-/* $Id$ */
-
-/* 7.20 General utilities <stdlib.h>
+/* General utilities <stdlib.h>
This file is part of the Public Domain C Library (PDCLib).
Permission is granted to use, modify, and / or redistribute at will.
#ifndef _PDCLIB_STDLIB_H
#define _PDCLIB_STDLIB_H _PDCLIB_STDLIB_H
#include <_PDCLIB_int.h>
-_PDCLIB_BEGIN_EXTERN_C
+
+#ifdef __cplusplus
+extern "C" {
+#endif
#ifndef _PDCLIB_SIZE_T_DEFINED
#define _PDCLIB_SIZE_T_DEFINED _PDCLIB_SIZE_T_DEFINED
#define NULL _PDCLIB_NULL
#endif
+#ifndef _PDCLIB_MB_CUR_MAX_DEFINED
+#define _PDCLIB_MB_CUR_MAX_DEFINED
+#define MB_CUR_MAX (_PDCLIB_mb_cur_max())
+#endif
+
/* Numeric conversion functions */
/* TODO: atof(), strtof(), strtod(), strtold() */
/* Memory management functions */
-/* Allocate a chunk of heap memory of given size. If request could not be
+/* Allocate a chunk of memory of given size. If request could not be
satisfied, return NULL. Otherwise, return a pointer to the allocated
memory. Memory contents are undefined.
*/
void * malloc( size_t size ) _PDCLIB_nothrow;
-/* Allocate a chunk of heap memory that is large enough to hold nmemb elements
- of the given size, and zero-initialize that memory. If request could not be
+/* Allocate a chunk of memory that is large enough to hold nmemb elements of
+ the given size, and zero-initialize that memory. If request could not be
satisfied, return NULL. Otherwise, return a pointer to the allocated
memory.
*/
void * calloc( size_t nmemb, size_t size ) _PDCLIB_nothrow;
+/* Allocate a chunk of memory of given size, with specified alignment (which
+ must be a power of two; if it is not, the next greater power of two is
+ used). If request could not be satisfied, return NULL. Otherwise, return
+ a pointer to the allocated memory.
+*/
+void * aligned_alloc( size_t alignment, size_t size ) _PDCLIB_nothrow;
+
/* De-allocate a chunk of heap memory previously allocated using malloc(),
calloc(), or realloc(), and pointed to by ptr. If ptr does not match a
pointer previously returned by the mentioned allocation functions, or
reverse order of registration (last-in, first-out).
Returns zero if registration is successfull, nonzero if it failed.
*/
-int atexit( void (*func)( void ) ) _PDCLIB_nothrow;
+int atexit( void (*func)( void ) ) _PDCLIB_nothrow;
/* Normal process termination. Functions registered by atexit() (see above) are
called, streams flushed, files closed and temporary files removed before the
size_t wcstombs( char * _PDCLIB_restrict s, const wchar_t * _PDCLIB_restrict pwcs, size_t n );
*/
-_PDCLIB_END_EXTERN_C
+#ifdef __cplusplus
+}
+#endif
+
#endif