Changeset 46 for trunk/src/kernel32/heap.cpp
- Timestamp:
- Jun 7, 1999, 10:58:22 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/heap.cpp
r37 r46 1 /* $Id: heap.cpp,v 1.5 1999-06-06 12:25:49 cbratschi Exp $ */2 3 1 /* 4 2 * … … 15 13 #include <stdlib.h> 16 14 #include <string.h> 17 #include <builtin.h> 18 #include "misc.h" 19 15 #include <misc.h> 20 16 #define _WIN32 21 17 #include "os2heap.h" … … 71 67 curheap = new OS2Heap(hHeap, flOptions, dwInitialSize, dwMaximumSize); 72 68 if(curheap == NULL) { 73 69 O32_HeapDestroy(hHeap); 74 70 return(NULL); 75 71 } 76 72 if(curheap->getHeapHandle() == NULL) { 77 73 O32_HeapDestroy(hHeap); 78 74 delete curheap; 79 75 return(NULL); … … 96 92 //****************************************************************************** 97 93 //****************************************************************************** 98 /* PH: Though "HeapSize" is a reserved word for the linker, ILINK can be99 tricked by placing the word HEAPSIZE in quotes. It then exports it properly100 to the target DLL.101 */102 94 DWORD WIN32API HeapSize(HANDLE hHeap, DWORD arg2, PVOID arg3) 103 95 { … … 154 146 //SvL: Only one process heap per process 155 147 if(processheap == NULL) { 156 157 158 159 160 161 162 163 148 //TODO: I haven't thought real hard about this. I added it just to make "hdr.exe" happy. 149 hHeap = O32_HeapCreate(HEAP_GENERATE_EXCEPTIONS, 1, 0x4000); 150 OS2ProcessHeap = new OS2Heap(hHeap, HEAP_GENERATE_EXCEPTIONS, 0x4000, 0); 151 if(OS2ProcessHeap == NULL) { 152 O32_HeapDestroy(hHeap); 153 return(NULL); 154 } 155 processheap = hHeap; 164 156 } 165 157 return(processheap); … … 173 165 174 166 if(processheap == NULL) { 175 176 167 if(GetProcessHeap() == NULL) 168 return(NULL); 177 169 } 178 170 if(fuFlags & LMEM_ZEROINIT) … … 209 201 210 202 if(OS2ProcessHeap->GetLockCnt((LPVOID)hMem) != 0) { 211 212 203 dprintf(("LocalFree, lock count != 0\n")); 204 return(hMem); //TODO: SetLastError 213 205 } 214 206 if(OS2ProcessHeap->Free(0, (LPVOID)hMem) == FALSE) { 215 207 return(hMem); //TODO: SetLastError 216 208 } 217 209 return NULL; //success … … 238 230 HLOCAL WIN32API LocalReAlloc(HLOCAL hMem, DWORD cbBytes, UINT fuFlags) 239 231 { 240 HLOCALlpMem;232 LPVOID lpMem; 241 233 242 234 dprintf(("KERNEL32: LocalReAlloc %X %d %X\n", hMem, cbBytes, fuFlags)); 243 235 //SvL: 8-8-'98: Notepad bugfix (assumes address is identical when new size < old size) 244 if(OS2ProcessHeap->Size(0, (LPVOID)hMem) >= cbBytes) 245 { 246 dprintf(("KERNEL32: LocalReAlloc returned %X\n", hMem)); 247 return hMem; 248 } 249 250 lpMem = LocalAlloc(fuFlags, cbBytes); 251 memcpy((LPVOID)lpMem, (LPVOID)hMem, min(cbBytes, OS2ProcessHeap->Size(0, (LPVOID)hMem))); 236 if(OS2ProcessHeap->Size(0, (LPVOID)hMem) > cbBytes) 237 return hMem; 238 239 lpMem = (LPVOID)O32_LocalAlloc(fuFlags, cbBytes); 240 memcpy(lpMem, (LPVOID)hMem, min(cbBytes, OS2ProcessHeap->Size(0, (LPVOID)hMem))); 252 241 OS2ProcessHeap->Free(0, (LPVOID)hMem); 253 254 dprintf(("KERNEL32: LocalReAlloc returned %X\n", lpMem));255 242 return((HLOCAL)lpMem); 256 243 }
Note:
See TracChangeset
for help on using the changeset viewer.