00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00027 #include "common.h"
00028
00029
00030 #undef malloc
00031 #undef free
00032 #undef realloc
00033
00034 #ifdef HAVE_MALLOC_H
00035 #include <malloc.h>
00036 #endif
00037
00038
00039
00040
00041
00042 void *av_malloc(unsigned int size)
00043 {
00044 void *ptr;
00045 #ifdef CONFIG_MEMALIGN_HACK
00046 long diff;
00047 #endif
00048
00049
00050 if(size > (INT_MAX-16) )
00051 return NULL;
00052
00053 #ifdef CONFIG_MEMALIGN_HACK
00054 ptr = malloc(size+16);
00055 if(!ptr)
00056 return ptr;
00057 diff= ((-(long)ptr - 1)&15) + 1;
00058 ptr += diff;
00059 ((char*)ptr)[-1]= diff;
00060 #elif defined (HAVE_MEMALIGN)
00061 ptr = memalign(16,size);
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088 #else
00089 ptr = malloc(size);
00090 #endif
00091 return ptr;
00092 }
00093
00094 void *av_realloc(void *ptr, unsigned int size)
00095 {
00096 #ifdef CONFIG_MEMALIGN_HACK
00097 int diff;
00098 #endif
00099
00100
00101 if(size > (INT_MAX-16) )
00102 return NULL;
00103
00104 #ifdef CONFIG_MEMALIGN_HACK
00105
00106 if(!ptr) return av_malloc(size);
00107 diff= ((char*)ptr)[-1];
00108 return realloc(ptr - diff, size + diff) + diff;
00109 #else
00110 return realloc(ptr, size);
00111 #endif
00112 }
00113
00114 void av_free(void *ptr)
00115 {
00116
00117 if (ptr)
00118 #ifdef CONFIG_MEMALIGN_HACK
00119 free(ptr - ((char*)ptr)[-1]);
00120 #else
00121 free(ptr);
00122 #endif
00123 }
00124
00125 void av_freep(void *arg)
00126 {
00127 void **ptr= (void**)arg;
00128 av_free(*ptr);
00129 *ptr = NULL;
00130 }
00131
00132 void *av_mallocz(unsigned int size)
00133 {
00134 void *ptr;
00135
00136 ptr = av_malloc(size);
00137 if (ptr)
00138 memset(ptr, 0, size);
00139 return ptr;
00140 }
00141
00142 char *av_strdup(const char *s)
00143 {
00144 char *ptr;
00145 int len;
00146 len = strlen(s) + 1;
00147 ptr = av_malloc(len);
00148 if (ptr)
00149 memcpy(ptr, s, len);
00150 return ptr;
00151 }
00152