lib: Add obvious definition for calloc
				
					
				
			The calloc() function is useful in addition to malloc and friends, so add the obvious definition. Change-Id: I57a568e323344a97b35014b7b8bec16adc2fd720 Signed-off-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/51949 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
		
				
					committed by
					
						
						Patrick Georgi
					
				
			
			
				
	
			
			
			
						parent
						
							8aedb34501
						
					
				
				
					commit
					c556dffe98
				
			@@ -5,6 +5,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void *memalign(size_t boundary, size_t size);
 | 
					void *memalign(size_t boundary, size_t size);
 | 
				
			||||||
void *malloc(size_t size);
 | 
					void *malloc(size_t size);
 | 
				
			||||||
 | 
					void *calloc(size_t nitems, size_t size);
 | 
				
			||||||
void free(void *ptr);
 | 
					void free(void *ptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* STDLIB_H */
 | 
					#endif /* STDLIB_H */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
#include <stdlib.h>
 | 
					 | 
				
			||||||
#include <console/console.h>
 | 
					#include <console/console.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if CONFIG(DEBUG_MALLOC)
 | 
					#if CONFIG(DEBUG_MALLOC)
 | 
				
			||||||
#define MALLOCDBG(x...) printk(BIOS_SPEW, x)
 | 
					#define MALLOCDBG(x...) printk(BIOS_SPEW, x)
 | 
				
			||||||
@@ -54,6 +55,15 @@ void *malloc(size_t size)
 | 
				
			|||||||
	return memalign(sizeof(u64), size);
 | 
						return memalign(sizeof(u64), size);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void *calloc(size_t nitems, size_t size)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						void *p = malloc(nitems * size);
 | 
				
			||||||
 | 
						if (p)
 | 
				
			||||||
 | 
							memset(p, 0, nitems * size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return p;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void free(void *ptr)
 | 
					void free(void *ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (ptr == NULL)
 | 
						if (ptr == NULL)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* Include malloc() and memalign() source code and alter its name to indicate the functions
 | 
					/* Include malloc() and memalign() source code and alter its name to indicate the functions
 | 
				
			||||||
   source origin. */
 | 
					   source origin. */
 | 
				
			||||||
 | 
					#define calloc cb_calloc
 | 
				
			||||||
#define malloc cb_malloc
 | 
					#define malloc cb_malloc
 | 
				
			||||||
#define free cb_free
 | 
					#define free cb_free
 | 
				
			||||||
#define memalign cb_memalign
 | 
					#define memalign cb_memalign
 | 
				
			||||||
@@ -10,6 +11,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "../lib/malloc.c"
 | 
					#include "../lib/malloc.c"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#undef calloc
 | 
				
			||||||
#undef malloc
 | 
					#undef malloc
 | 
				
			||||||
#undef free
 | 
					#undef free
 | 
				
			||||||
#undef memalign
 | 
					#undef memalign
 | 
				
			||||||
@@ -46,6 +48,12 @@ static int setup_test(void **state)
 | 
				
			|||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int setup_calloc_test(void **state)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						memset(&_heap, 0xFF, TEST_HEAP_SZ);
 | 
				
			||||||
 | 
						return setup_test(state);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void test_malloc_out_of_memory(void **state)
 | 
					static void test_malloc_out_of_memory(void **state)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* Expect die() call if out of memory */
 | 
						/* Expect die() call if out of memory */
 | 
				
			||||||
@@ -130,6 +138,19 @@ static void test_memalign_multiple_small_allocations(void **state)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void test_calloc_memory_is_zeroed(void **state)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						const size_t nitems = 42;
 | 
				
			||||||
 | 
						const size_t size = sizeof(uint32_t);
 | 
				
			||||||
 | 
						void *ptr = cb_calloc(nitems, size);
 | 
				
			||||||
 | 
						assert_non_null(ptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (size_t i = 0; i < nitems; i++) {
 | 
				
			||||||
 | 
							const uint32_t *p = (const uint32_t *)ptr + i;
 | 
				
			||||||
 | 
							assert_int_equal(*p, 0);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(void)
 | 
					int main(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	const struct CMUnitTest tests[] = {
 | 
						const struct CMUnitTest tests[] = {
 | 
				
			||||||
@@ -140,6 +161,7 @@ int main(void)
 | 
				
			|||||||
		cmocka_unit_test_setup(test_memalign_out_of_memory, setup_test),
 | 
							cmocka_unit_test_setup(test_memalign_out_of_memory, setup_test),
 | 
				
			||||||
		cmocka_unit_test_setup(test_memalign_zero, setup_test),
 | 
							cmocka_unit_test_setup(test_memalign_zero, setup_test),
 | 
				
			||||||
		cmocka_unit_test_setup(test_memalign_multiple_small_allocations, setup_test),
 | 
							cmocka_unit_test_setup(test_memalign_multiple_small_allocations, setup_test),
 | 
				
			||||||
 | 
							cmocka_unit_test_setup(test_calloc_memory_is_zeroed, setup_calloc_test),
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return cmocka_run_group_tests(tests, NULL, NULL);
 | 
						return cmocka_run_group_tests(tests, NULL, NULL);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user