update for HEAD-2003050101
[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 void* malloc(size_t _size)
41 {
42    return HeapAlloc(hHeap, HEAP_ZERO_MEMORY, _size);
43 }
44
45 void free(void* _ptr)
46 {
47    HeapFree(hHeap,0,_ptr);
48 }
49
50 void* calloc(size_t _nmemb, size_t _size)
51 {
52    return HeapAlloc(hHeap, HEAP_ZERO_MEMORY, _nmemb*_size);
53 }
54
55 void* realloc(void* _ptr, size_t _size)
56 {
57    return HeapReAlloc(hHeap, 0, _ptr, _size);
58 }
59
60 /* ?_set_new_mode@@YAHH@Z (MSVCRT.@) */
61 int MSVCRT__set_new_mode(int mode)
62 {
63   int old_mode;
64 /*  FIXME:  LOCK_HEAP; */
65   old_mode = MSVCRT_new_mode;
66   MSVCRT_new_mode = mode;
67 /*  FIXME:  UNLOCK_HEAP; */
68   return old_mode;
69 }