update for HEAD-2003091401
[reactos.git] / lib / msvcrt / stdlib / malloc.c
1 #include <windows.h>
2 #include <msvcrt/stdlib.h>
3
4 extern HANDLE hHeap;
5
6 typedef void (*MSVCRT_new_handler_func)(unsigned long size);
7 static MSVCRT_new_handler_func MSVCRT_new_handler;
8 static int MSVCRT_new_mode;
9
10 /* ??2@YAPAXI@Z (MSVCRT.@) */
11 void* MSVCRT_operator_new(unsigned long size)
12 {
13   void *retval = HeapAlloc(GetProcessHeap(), 0, size);
14
15 /*  FIXME: LOCK_HEAP; */
16   if(!retval && MSVCRT_new_handler)
17     (*MSVCRT_new_handler)(size);
18 /*  FIXME: UNLOCK_HEAP; */
19
20   return retval;
21 }
22
23 /* ??3@YAXPAX@Z (MSVCRT.@) */
24 void MSVCRT_operator_delete(void *mem)
25 {
26   HeapFree(GetProcessHeap(), 0, mem);
27 }
28
29 /* ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z (MSVCRT.@) */
30 MSVCRT_new_handler_func MSVCRT__set_new_handler(MSVCRT_new_handler_func func)
31 {
32   MSVCRT_new_handler_func old_handler;
33 /*  FIXME:  LOCK_HEAP; */
34   old_handler = MSVCRT_new_handler;
35   MSVCRT_new_handler = func;
36 /*  FIXME:  UNLOCK_HEAP; */
37   return old_handler;
38 }
39
40 /*
41  * @implemented
42  */
43 void* malloc(size_t _size)
44 {
45    return HeapAlloc(hHeap, HEAP_ZERO_MEMORY, _size);
46 }
47
48 /*
49  * @implemented
50  */
51 void free(void* _ptr)
52 {
53    HeapFree(hHeap,0,_ptr);
54 }
55
56 /*
57  * @implemented
58  */
59 void* calloc(size_t _nmemb, size_t _size)
60 {
61    return HeapAlloc(hHeap, HEAP_ZERO_MEMORY, _nmemb*_size);
62 }
63
64 /*
65  * @implemented
66  */
67 void* realloc(void* _ptr, size_t _size)
68 {
69    return HeapReAlloc(hHeap, 0, _ptr, _size);
70 }
71
72 /* ?_set_new_mode@@YAHH@Z (MSVCRT.@) */
73 int MSVCRT__set_new_mode(int mode)
74 {
75   int old_mode;
76 /*  FIXME:  LOCK_HEAP; */
77   old_mode = MSVCRT_new_mode;
78   MSVCRT_new_mode = mode;
79 /*  FIXME:  UNLOCK_HEAP; */
80   return old_mode;
81 }