-/* ----------------------------------------------------------------------------
- * $Id$
- * ----------------------------------------------------------------------------
- * Public Domain C Library - http://pdclib.sourceforge.net
- * This code is Public Domain. Use, modify, and redistribute at will.
- * --------------------------------------------------------------------------*/
+/* $Id$ */
-void * calloc( size_t nelem, size_t size ) { /* TODO */ };
+/* void * calloc( size_t, size_t )
-/* PDPC code - unreviewed
+ This file is part of the Public Domain C Library (PDCLib).
+ Permission is granted to use, modify, and / or redistribute at will.
+*/
+
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef REGTEST
+
+void * calloc( size_t nmemb, size_t size )
{
- void *ptr;
- size_t total;
-
- if (nmemb == 1)
+ /* assign memory for nmemb elements of given size */
+ void * rc = malloc( nmemb * size );
+ if ( rc != NULL )
{
- total = size;
+ /* zero-initialize the memory */
+ memset( rc, 0, nmemb * size );
}
- else if (size == 1)
- {
- total = nmemb;
- }
- else
- {
- total = nmemb * size;
- }
- ptr = malloc(total);
- if (ptr != NULL)
- {
- memset(ptr, '\0', total);
- }
- return (ptr);
+ return rc;
}
-*/
+
+#endif
+
+#ifdef TEST
+#include <_PDCLIB_test.h>
+
+int main( void )
+{
+ char * s;
+ TESTCASE( ( s = calloc( 3, 2 ) ) != NULL );
+ TESTCASE( s[0] == '\0' );
+ TESTCASE( s[5] == '\0' );
+ free( s );
+ TESTCASE( ( s = calloc( 6, 1 ) ) != NULL );
+ TESTCASE( s[0] == '\0' );
+ TESTCASE( s[5] == '\0' );
+ free( s );
+ TESTCASE( ( s = calloc( 1, 6 ) ) != NULL );
+ TESTCASE( s[0] == '\0' );
+ TESTCASE( s[5] == '\0' );
+ free( s );
+ return TEST_RESULTS;
+}
+
+#endif