save
[protos/libecoli.git] / lib / main.c
index 56bc9d9..1a6a0d3 100644 (file)
@@ -31,7 +31,9 @@
 #include <getopt.h>
 #include <limits.h>
 #include <execinfo.h>
+#include <errno.h>
 
+#include <ecoli_init.h>
 #include <ecoli_log.h>
 #include <ecoli_test.h>
 #include <ecoli_malloc.h>
@@ -179,9 +181,9 @@ static void *debug_malloc(size_t size, const char *file, unsigned int line)
        struct debug_alloc_ftr *ftr;
        size_t new_size = size + sizeof(*hdr) + sizeof(*ftr);
        void *ret;
+       int r = random();
 
-
-       if (alloc_fail_proba != 0 && (random() % 100) < alloc_fail_proba)
+       if (alloc_fail_proba != 0 && (r % 100) < alloc_fail_proba)
                hdr = NULL;
        else
                hdr = malloc(new_size);
@@ -201,8 +203,10 @@ static void *debug_malloc(size_t size, const char *file, unsigned int line)
                ftr->cookie = 0x87654321;
        }
 
-       EC_LOG(EC_LOG_DEBUG, "%s:%d: info: malloc(%zd) -> %p\n",
-               file, line, size, ret);
+       EC_LOG(EC_LOG_DEBUG, "%s:%d: info: malloc(%zd) -> %p [rand=%d]\n",
+               file, line, size, ret, r);
+       if (r == 976499400)
+               printf("here\n");
 
        if (ret)
                alloc_success++;
@@ -365,7 +369,10 @@ static int debug_log(int type, unsigned int level, void *opaque,
        if (level > (unsigned int)log_level)
                return 0;
 
-       return printf("%s", str);
+       if (printf("%s", str) < 0)
+               return -1;
+
+       return 0;
 }
 
 int main(int argc, char **argv)
@@ -381,14 +388,18 @@ int main(int argc, char **argv)
 
        srandom(seed);
 
-       if (0) ec_log_fct_register(debug_log, NULL);
-
        /* register a new malloc to track memleaks */
        TAILQ_INIT(&debug_alloc_hdr_list);
        if (ec_malloc_register(debug_malloc, debug_free, debug_realloc) < 0) {
                EC_LOG(EC_LOG_ERR, "cannot register new malloc\n");
-               return -1;
+               return 1;
+       }
+
+       if (ec_init() < 0) {
+               fprintf(stderr, "cannot init ecoli: %s\n", strerror(errno));
+               return 1;
        }
+       ec_log_fct_register(debug_log, NULL);
 
        ret = 0;
        if (argc <= 1) {
@@ -398,7 +409,6 @@ int main(int argc, char **argv)
                        ret |= ec_test_one(argv[i]);
        }
 
-       ec_malloc_unregister();
        leaks = debug_alloc_dump_leaks();
 
        if (alloc_fail_proba == 0 && ret != 0) {