]> git.sesse.net Git - ffmpeg/blobdiff - libavutil/mem.c
struct timeval requires #include <sys/time.h>
[ffmpeg] / libavutil / mem.c
index 418e85f6bfcbad428d1092b116e9c5b6ffbdf321..960074c70f48dae3b26de8672b096254cd8dca07 100644 (file)
@@ -26,7 +26,7 @@
 
 #include "common.h"
 
-/* here we can use OS dependant allocation functions */
+/* here we can use OS dependent allocation functions */
 #undef malloc
 #undef free
 #undef realloc
    memory allocator. You do not need to suppress this file because the
    linker will do it automatically */
 
-/**
- * Memory allocation of size byte with alignment suitable for all
- * memory accesses (including vectors if available on the
- * CPU). av_malloc(0) must return a non NULL pointer.
- */
 void *av_malloc(unsigned int size)
 {
     void *ptr;
-#ifdef MEMALIGN_HACK
+#ifdef CONFIG_MEMALIGN_HACK
     long diff;
 #endif
 
@@ -55,12 +50,12 @@ void *av_malloc(unsigned int size)
     if(size > (INT_MAX-16) )
         return NULL;
 
-#ifdef MEMALIGN_HACK
+#ifdef CONFIG_MEMALIGN_HACK
     ptr = malloc(size+16);
     if(!ptr)
         return ptr;
     diff= ((-(long)ptr - 1)&15) + 1;
-    ptr += diff;
+    ptr = (char*)ptr + diff;
     ((char*)ptr)[-1]= diff;
 #elif defined (HAVE_MEMALIGN)
     ptr = memalign(16,size);
@@ -74,10 +69,10 @@ void *av_malloc(unsigned int size)
        But I don't want to code such logic here!
      */
      /* Why 16?
-        because some cpus need alignment, for example SSE2 on P4, & most RISC cpus
+        Because some CPUs need alignment, for example SSE2 on P4, & most RISC CPUs
         it will just trigger an exception and the unaligned load will be done in the
         exception handler or it will just segfault (SSE2 on P4)
-        Why not larger? because i didnt see a difference in benchmarks ...
+        Why not larger? Because I did not see a difference in benchmarks ...
      */
      /* benchmarks with p3
         memalign(64)+1          3071,3051,3032
@@ -96,14 +91,9 @@ void *av_malloc(unsigned int size)
     return ptr;
 }
 
-/**
- * av_realloc semantics (same as glibc): if ptr is NULL and size > 0,
- * identical to malloc(size). If size is zero, it is identical to
- * free(ptr) and NULL is returned.
- */
 void *av_realloc(void *ptr, unsigned int size)
 {
-#ifdef MEMALIGN_HACK
+#ifdef CONFIG_MEMALIGN_HACK
     int diff;
 #endif
 
@@ -111,36 +101,27 @@ void *av_realloc(void *ptr, unsigned int size)
     if(size > (INT_MAX-16) )
         return NULL;
 
-#ifdef MEMALIGN_HACK
+#ifdef CONFIG_MEMALIGN_HACK
     //FIXME this isn't aligned correctly, though it probably isn't needed
     if(!ptr) return av_malloc(size);
     diff= ((char*)ptr)[-1];
-    return realloc(ptr - diff, size + diff) + diff;
+    return (char*)realloc((char*)ptr - diff, size + diff) + diff;
 #else
     return realloc(ptr, size);
 #endif
 }
 
-/**
- * Free memory which has been allocated with av_malloc(z)() or av_realloc().
- * NOTE: ptr = NULL is explicetly allowed
- * Note2: it is recommended that you use av_freep() instead
- */
 void av_free(void *ptr)
 {
     /* XXX: this test should not be needed on most libcs */
     if (ptr)
-#ifdef MEMALIGN_HACK
-        free(ptr - ((char*)ptr)[-1]);
+#ifdef CONFIG_MEMALIGN_HACK
+        free((char*)ptr - ((char*)ptr)[-1]);
 #else
         free(ptr);
 #endif
 }
 
-/**
- * Frees memory and sets the pointer to NULL.
- * @param arg pointer to the pointer which should be freed
- */
 void av_freep(void *arg)
 {
     void **ptr= (void**)arg;
@@ -150,9 +131,7 @@ void av_freep(void *arg)
 
 void *av_mallocz(unsigned int size)
 {
-    void *ptr;
-
-    ptr = av_malloc(size);
+    void *ptr = av_malloc(size);
     if (ptr)
         memset(ptr, 0, size);
     return ptr;
@@ -160,12 +139,13 @@ void *av_mallocz(unsigned int size)
 
 char *av_strdup(const char *s)
 {
-    char *ptr;
-    int len;
-    len = strlen(s) + 1;
-    ptr = av_malloc(len);
-    if (ptr)
-        memcpy(ptr, s, len);
+    char *ptr= NULL;
+    if(s){
+        int len = strlen(s) + 1;
+        ptr = av_malloc(len);
+        if (ptr)
+            memcpy(ptr, s, len);
+    }
     return ptr;
 }