* added lib/calloc.c, lib/free.c, lib/realloc.c, include/stddef.h
[fw/sdcc] / device / lib / calloc.c
1 #include <sdcc-lib.h>
2 #include <malloc.h>
3 #include <string.h>
4
5 //--------------------------------------------------------------------
6 //Written by Maarten Brock, 2004
7 //--------------------------------------------------------------------
8 //calloc function implementation for embedded system
9 //Non-ANSI keywords are C51 specific.
10 // xdata - variable in external memory (just RAM)
11 //--------------------------------------------------------------------
12
13 #if _SDCC_MALLOC_TYPE_MLH
14
15 #define xdata
16
17 typedef struct _MEMHEADER MEMHEADER;
18
19 struct _MEMHEADER
20 {
21   MEMHEADER *   next;
22   MEMHEADER *   prev;
23   unsigned int  len;
24   unsigned char mem;
25 };
26
27 #define HEADER_SIZE (sizeof(MEMHEADER)-sizeof(char))
28
29 #else
30
31 #define HEADER_SIZE sizeof(MEMHEADER)
32
33 #endif
34
35 void xdata * calloc (size_t nmemb, size_t size)
36 {
37   register void xdata * ptr;
38
39   ptr = malloc(nmemb * size);
40   if (ptr)
41   {
42     memset(ptr, 0, nmemb * size);
43   }
44   return ptr;
45 }
46 //END OF MODULE