]> git.ozlabs.org Git - petitboot/blobdiff - lib/talloc/talloc.c
discover/grub2: Allow to separate the --id argument using a space char
[petitboot] / lib / talloc / talloc.c
index 95a0a6a0b395a82990170e1efae5227f8fdce544..e275fb0bf5da695a9eeed354fee146a5d03321c1 100644 (file)
@@ -40,6 +40,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <assert.h>
 
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
@@ -59,6 +60,7 @@
 #include <stdint.h>
 #endif
 
+#include "log/log.h"
 #include "talloc.h"
 
 /* use this to force every realloc to change the pointer, to stress test
 #define TALLOC_MAGIC_FREE 0x7faebef3
 #define TALLOC_MAGIC_REFERENCE ((const char *)1)
 
-/* by default we abort when given a bad pointer (such as when talloc_free() is
- * called on a pointer that came from malloc() */
-#ifndef TALLOC_ABORT
-#define TALLOC_ABORT(reason) abort()
-#endif
-
 #ifndef discard_const_p
 #if defined(__intptr_t_defined) || defined(HAVE_INTPTR_T)
 # define discard_const_p(type, ptr) ((type *)((intptr_t)(ptr)))
@@ -119,10 +115,16 @@ static struct talloc_chunk *talloc_chunk_from_ptr(const void *ptr)
        struct talloc_chunk *tc = discard_const_p(struct talloc_chunk, ptr)-1;
        if (tc->u.magic != TALLOC_MAGIC) {
                if (tc->u.magic == TALLOC_MAGIC_FREE) {
-                       TALLOC_ABORT("Bad talloc magic value - double free");
+                       pb_log_fn("Failed: Bad talloc magic value - double free, for name: %s\n",
+                               tc->name);
+                       fprintf(stderr, "%s: name: %s\n", __func__, tc->name);
+                       fflush(stderr);
+                       assert(0 && "Bad talloc magic value - double free");
                } else {
-                       TALLOC_ABORT("Bad talloc magic value - unknown value");
+                       pb_log_fn("Failed: Bad talloc magic value - unknown value\n");
+                       assert(0 && "Bad talloc magic value - unknown value");
                }
+               abort();
        }
 
        return tc;
@@ -753,7 +755,7 @@ off_t talloc_total_blocks(const void *ptr)
 /*
   return the number of external references to a pointer
 */
-static int talloc_reference_count(const void *ptr)
+int talloc_reference_count(const void *ptr)
 {
        struct talloc_chunk *tc = talloc_chunk_from_ptr(ptr);
        struct talloc_reference_handle *h;
@@ -977,6 +979,7 @@ char *talloc_vasprintf(const void *t, const char *fmt, va_list ap)
                talloc_set_name_const(ret, ret);
        }
 
+       va_end(ap2);
        return ret;
 }
 
@@ -1024,13 +1027,16 @@ static char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap)
        len = vsnprintf(NULL, 0, fmt, ap2);
 
        s = talloc_realloc(NULL, s, char, s_len + len+1);
-       if (!s) return NULL;
+       if (!s)
+               goto out;
 
        VA_COPY(ap2, ap);
 
        vsnprintf(s+s_len, len+1, fmt, ap2);
        talloc_set_name_const(s, s);
 
+out:
+       va_end(ap2);
        return s;
 }