X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Fecoli_malloc.c;h=505f49f753254d1827af5635ed821b27cb960369;hb=a996bfdc120eba8e0041aeefe5d2fe2f48593723;hp=3113f0efd9bb015aadc4be1beda9de26169c9ae4;hpb=07da7f3238a980f1aa9654c2d084a24e00e48e90;p=protos%2Flibecoli.git diff --git a/lib/ecoli_malloc.c b/lib/ecoli_malloc.c index 3113f0e..505f49f 100644 --- a/lib/ecoli_malloc.c +++ b/lib/ecoli_malloc.c @@ -1,37 +1,17 @@ -/* - * Copyright (c) 2016, Olivier MATZ - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the University of California, Berkeley nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2016, Olivier MATZ */ #include +#include #include #include #include #include +EC_LOG_TYPE_REGISTER(malloc); + static int init_done = 0; struct ec_malloc_handler ec_malloc_handler; @@ -139,7 +119,56 @@ static int ec_malloc_init_func(void) static struct ec_init ec_malloc_init = { .init = ec_malloc_init_func, - .priority = 50, + .priority = 40, }; 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);