]> git.droids-corp.org - protos/libecoli.git/commitdiff
add malloc test
authorOlivier Matz <zer0@droids-corp.org>
Sun, 11 Mar 2018 12:52:08 +0000 (13:52 +0100)
committerOlivier Matz <zer0@droids-corp.org>
Sun, 11 Mar 2018 12:52:08 +0000 (13:52 +0100)
lib/ecoli_assert.c
lib/ecoli_malloc.c
lib/ecoli_malloc.h

index c2850e1cfa394ef79e8759f51a549ca712cf65c2..a36d6f688b1116fe1593b995365c106b154ed9cb 100644 (file)
@@ -16,9 +16,11 @@ void __ec_assert_print(bool expr, const char *expr_str, const char *format, ...)
        if (expr)
                return;
 
+       /* LCOV_EXCL_START */
        va_start(ap, format);
        fprintf(stderr, "assertion failed: '%s' is false\n", expr_str);
        vfprintf(stderr, format, ap);
        va_end(ap);
        abort();
+       /* LCOV_EXCL_END */
 }
index 21de1aa4c85585cade08e2a23a7566b2af1dc585..eb3c73d4587eb24a1319ba58bdfaf8a08050cfdf 100644 (file)
@@ -3,12 +3,15 @@
  */
 
 #include <ecoli_init.h>
+#include <ecoli_test.h>
 #include <ecoli_malloc.h>
 
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
 
+EC_LOG_TYPE_REGISTER(malloc);
+
 static int init_done = 0;
 
 struct ec_malloc_handler ec_malloc_handler;
@@ -120,3 +123,52 @@ static struct ec_init ec_malloc_init = {
 };
 
 EC_INIT_REGISTER(ec_malloc_init);
+
+/* LCOV_EXCL_START */
+static int ec_malloc_testcase(void)
+{
+       int ret, testres = 0;
+       char *ptr, *ptr2;
+
+       ret = ec_malloc_register(NULL, NULL, NULL);
+       testres |= EC_TEST_CHECK(ret == -1,
+               "should not be able to register NULL malloc handlers");
+       ret = ec_malloc_register(__ec_malloc, __ec_free, __ec_realloc);
+       testres |= EC_TEST_CHECK(ret == -1,
+               "should not be able to register after init");
+
+       /* registration is tested in the test main.c */
+
+       ptr = ec_malloc(10);
+       if (ptr == NULL)
+               return -1;
+       memset(ptr, 0, 10);
+       ptr2 = ec_realloc(ptr, 20);
+       EC_TEST_CHECK(ptr2 != NULL, "cannot realloc ptr\n");
+       if (ptr2 == NULL)
+               ec_free(ptr);
+       else
+               ec_free(ptr2);
+       ptr = NULL;
+       ptr2 = NULL;
+
+       ptr = ec_malloc_func(10);
+       if (ptr == NULL)
+               return -1;
+       memset(ptr, 0, 10);
+       ec_free_func(ptr);
+       ptr = NULL;
+
+       ptr = ec_calloc(2, (size_t)-1);
+       EC_TEST_CHECK(ptr == NULL, "bad overflow check in ec_calloc\n");
+
+       return testres;
+}
+/* LCOV_EXCL_STOP */
+
+static struct ec_test ec_malloc_test = {
+       .name = "malloc",
+       .test = ec_malloc_testcase,
+};
+
+EC_TEST_REGISTER(ec_malloc_test);
index 7ac0f20df3a2d162ddaf8edb8082781a0df9f9e9..e80c3d9116194244bf773152ff58d26e4f8c5770 100644 (file)
@@ -121,7 +121,8 @@ extern struct ec_malloc_handler ec_malloc_handler;
 /**
  * Ecoli malloc function.
  *
- * On use this function when the macro ec_malloc() cannot be used.
+ * Use this function when the macro ec_malloc() cannot be used,
+ * for instance when it is passed as a callback pointer.
  */
 void *ec_malloc_func(size_t size);
 
@@ -145,7 +146,8 @@ void *ec_malloc_func(size_t size);
 /**
  * Ecoli free function.
  *
- * On use this function when the macro ec_free() cannot be used.
+ * Use this function when the macro ec_free() cannot be used,
+ * for instance when it is passed as a callback pointer.
  */
 void ec_free_func(void *ptr);