update for HEAD-2003091401
[reactos.git] / lib / gdi32 / misc / heap.c
1 // heap.c
2
3 #undef WIN32_LEAN_AND_MEAN
4 #include <windows.h>
5 #include <ddk/ntddk.h>
6 #include <debug.h>
7
8 // global variables in a dll are process-global
9 HANDLE hProcessHeap = NULL;
10
11 PVOID
12 HEAP_alloc ( DWORD len )
13 {
14   /* make sure hProcessHeap gets initialized by GdiProcessSetup before we get here */
15   assert(hProcessHeap);
16   return RtlAllocateHeap ( hProcessHeap, 0, len );
17 }
18
19 NTSTATUS
20 HEAP_strdupA2W ( LPWSTR* ppszW, LPCSTR lpszA )
21 {
22   ULONG len;
23   NTSTATUS Status;
24
25   *ppszW = NULL;
26   if ( !lpszA )
27     return STATUS_SUCCESS;
28   len = lstrlenA(lpszA);
29
30   *ppszW = HEAP_alloc ( (len+1) * sizeof(WCHAR) );
31   if ( !*ppszW )
32     return STATUS_NO_MEMORY;
33   Status = RtlMultiByteToUnicodeN ( *ppszW, len*sizeof(WCHAR), NULL, (PCHAR)lpszA, len );
34   (*ppszW)[len] = L'\0';
35   return Status;
36 }
37
38
39 VOID
40 HEAP_free ( LPVOID memory )
41 {
42   /* make sure hProcessHeap gets initialized by GdiProcessSetup before we get here */
43   assert(hProcessHeap);
44
45   RtlFreeHeap ( hProcessHeap, 0, memory );
46 }