]> pd.if.org Git - pdclib/blobdiff - internals/_PDCLIB_config.h
Adding malloc(), free(), and realloc().
[pdclib] / internals / _PDCLIB_config.h
index 5e22b527478bbe20d4fc9f2501b450497b3afbb3..41fe02cb3f62711e2ee40b482ef3adc66f3137f7 100644 (file)
 /* The character (sequence) your platform uses as newline.                    */
 #define _PDCLIB_endl "\n"
 
+/* exit() can signal success to the host environment by the value of zero or  */
+/* the constant EXIT_SUCCESS. Failure is signaled by EXIT_FAILURE. Note that  */
+/* any other return value is "implementation-defined", i.e. your environment  */
+/* is not required to handle it gracefully. Set your definitions here.        */
+#define _PDCLIB_SUCCESS 0
+#define _PDCLIB_FAILURE -1
+
+/* qsort() in <stdlib.h> requires a function that swaps two memory areas.     */
+/* Below is a naive implementation that can be improved significantly for     */
+/* specific platforms, e.g. by swapping int instead of char.                  */
+#define _PDCLIB_memswp( i, j, size ) char tmp; do { tmp = *i; *i++ = *j; *j++ = tmp; } while ( --size );
+
 /* -------------------------------------------------------------------------- */
 /* Integers                                                                   */
 /* -------------------------------------------------------------------------- */
@@ -109,7 +121,7 @@ struct _PDCLIB_lldiv_t
 */
 #define _PDCLIB_SIG_ATOMIC INT
 
-/* Result type of the 'sizeof' operator */
+/* Result type of the 'sizeof' operator (must be unsigned) */
 #define _PDCLIB_size unsigned int
 #define _PDCLIB_SIZE UINT
 
@@ -187,3 +199,33 @@ typedef char * _PDCLIB_va_list;
 #define _PDCLIB_va_copy( dest, src ) ( (dest) = (src), (void)0 )
 #define _PDCLIB_va_end( ap ) ( (ap) = (void *)0, (void)0 )
 #define _PDCLIB_va_start( ap, parmN ) ( (ap) = (char *) &parmN + ( _PDCLIB_va_round(parmN) ), (void)0 )
+
+/* -------------------------------------------------------------------------- */
+/* OS "glue"                                                                  */
+/* This is where PDCLib interfaces with the operating system. The examples    */
+/* below are POSIX calls; provide your OS' equivalents.                       */
+/* -------------------------------------------------------------------------- */
+
+/* A system call that terminates the calling process */
+void _exit( int status ) __attribute__(( noreturn ));
+#define _PDCLIB_Exit( x ) _exit( x )
+
+/* Memory management */
+
+/* Set this to the page size of your OS. If your OS does not support paging, set
+   to an appropriate value. (Too small, and malloc() will call the kernel too
+   often. Too large, and you will waste memory.
+*/
+#define _PDCLIB_PAGESIZE 4096
+
+/* Set this to the minimum memory node size. Any malloc() for a smaller siz
+   will be satisfied by a malloc() of this size instead.
+*/
+#define _PDCLIB_MINALLOC 8
+
+/* Request another x pages (of size _PDCLIB_PAGESIZE) of memory from the kernel,
+   or release them back to the kernel if n is negative.
+   Return a (void *) pointing to the former end-of-heap if successful, NULL
+   otherwise.
+*/
+void * _PDCLIB_allocpages( int n );