Changeset 37 for trunk/src/kernel32
- Timestamp:
- Jun 6, 1999, 2:25:49 PM (26 years ago)
- Location:
- trunk/src/kernel32
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/heap.cpp
r20 r37 1 /* $Id: heap.cpp,v 1. 4 1999-05-31 23:17:17 phallerExp $ */1 /* $Id: heap.cpp,v 1.5 1999-06-06 12:25:49 cbratschi Exp $ */ 2 2 3 3 /* … … 71 71 curheap = new OS2Heap(hHeap, flOptions, dwInitialSize, dwMaximumSize); 72 72 if(curheap == NULL) { 73 73 O32_HeapDestroy(hHeap); 74 74 return(NULL); 75 75 } 76 76 if(curheap->getHeapHandle() == NULL) { 77 77 O32_HeapDestroy(hHeap); 78 78 delete curheap; 79 79 return(NULL); … … 98 98 /* PH: Though "HeapSize" is a reserved word for the linker, ILINK can be 99 99 tricked by placing the word HEAPSIZE in quotes. It then exports it properly 100 to the target DLL. 100 to the target DLL. 101 101 */ 102 102 DWORD WIN32API HeapSize(HANDLE hHeap, DWORD arg2, PVOID arg3) … … 154 154 //SvL: Only one process heap per process 155 155 if(processheap == NULL) { 156 157 158 159 160 161 162 163 156 //TODO: I haven't thought real hard about this. I added it just to make "hdr.exe" happy. 157 hHeap = O32_HeapCreate(HEAP_GENERATE_EXCEPTIONS, 1, 0x4000); 158 OS2ProcessHeap = new OS2Heap(hHeap, HEAP_GENERATE_EXCEPTIONS, 0x4000, 0); 159 if(OS2ProcessHeap == NULL) { 160 O32_HeapDestroy(hHeap); 161 return(NULL); 162 } 163 processheap = hHeap; 164 164 } 165 165 return(processheap); … … 173 173 174 174 if(processheap == NULL) { 175 176 175 if(GetProcessHeap() == NULL) 176 return(NULL); 177 177 } 178 178 if(fuFlags & LMEM_ZEROINIT) … … 209 209 210 210 if(OS2ProcessHeap->GetLockCnt((LPVOID)hMem) != 0) { 211 212 211 dprintf(("LocalFree, lock count != 0\n")); 212 return(hMem); //TODO: SetLastError 213 213 } 214 214 if(OS2ProcessHeap->Free(0, (LPVOID)hMem) == FALSE) { 215 215 return(hMem); //TODO: SetLastError 216 216 } 217 217 return NULL; //success … … 238 238 HLOCAL WIN32API LocalReAlloc(HLOCAL hMem, DWORD cbBytes, UINT fuFlags) 239 239 { 240 LPVOIDlpMem;240 HLOCAL lpMem; 241 241 242 242 dprintf(("KERNEL32: LocalReAlloc %X %d %X\n", hMem, cbBytes, fuFlags)); 243 243 //SvL: 8-8-'98: Notepad bugfix (assumes address is identical when new size < old size) 244 if(OS2ProcessHeap->Size(0, (LPVOID)hMem) > cbBytes) 245 return hMem; 246 247 lpMem = (LPVOID)O32_LocalAlloc(fuFlags, cbBytes); 248 memcpy(lpMem, (LPVOID)hMem, min(cbBytes, OS2ProcessHeap->Size(0, (LPVOID)hMem))); 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))); 249 252 OS2ProcessHeap->Free(0, (LPVOID)hMem); 253 254 dprintf(("KERNEL32: LocalReAlloc returned %X\n", lpMem)); 250 255 return((HLOCAL)lpMem); 251 256 } -
trunk/src/kernel32/resource.cpp
r25 r37 1 /* $Id: resource.cpp,v 1. 3 1999-06-01 15:47:38 phallerExp $ */1 /* $Id: resource.cpp,v 1.4 1999-06-06 12:25:49 cbratschi Exp $ */ 2 2 3 3 /* … … 31 31 32 32 dprintf(("FindResourceA %X", hModule)); 33 if(hModule == 0 || hModule == -1) 34 module = (Win32Image *)WinExe; 35 else module = (Win32Image *)Win32Dll::findModule(hModule); 33 // EB: ->>> added real exe module handle 34 if(hModule == 0 || hModule == -1 || (WinExe != NULL && hModule == WinExe->getOS2InstanceHandle())) 35 module = (Win32Image *)WinExe; 36 else 37 module = (Win32Image *)Win32Dll::findModule(hModule); 36 38 37 39 if(module == NULL) … … 43 45 //****************************************************************************** 44 46 HRSRC WIN32API FindResourceW(HINSTANCE hModule, LPCWSTR lpszName, 45 47 LPCWSTR lpszType) 46 48 { 47 49 Win32Image *module; … … 53 55 54 56 if(module == NULL) 55 57 return(NULL); 56 58 57 59 return module->findResourceW((LPWSTR)lpszName, (LPWSTR)lpszType); -
trunk/src/kernel32/winres.cpp
r4 r37 1 /* $Id: winres.cpp,v 1. 1 1999-05-24 20:19:50 ktkExp $ */1 /* $Id: winres.cpp,v 1.2 1999-06-06 12:25:49 cbratschi Exp $ */ 2 2 3 3 /* … … 32 32 #include "winexe.h" 33 33 34 static ULONG CalcBitmapSize(ULONG cBits, LONG cx, LONG cy) 35 { 36 ULONG alignment; 37 ULONG factor; 38 BOOL flag = TRUE; //true: '*' false: '/' 39 40 cy = cy < 0 ? -cy : cy; 41 42 switch(cBits) 43 { 44 case 1: 45 factor = 8; 46 flag = FALSE; 47 break; 48 49 case 4: 50 factor = 2; 51 flag = FALSE; 52 break; 53 54 case 8: 55 factor = 1; 56 break; 57 58 case 16: 59 factor = 2; 60 break; 61 62 case 24: 63 factor = 3; 64 break; 65 66 case 32: 67 return cx*cy; 68 69 default: 70 return 0; 71 } 72 73 if (flag) 74 alignment = (cx = (cx*factor)) % 4; 75 else 76 alignment = (cx = ((cx+factor-1)/factor)) % 4; 77 78 if (alignment != 0) 79 cx += 4 - alignment; 80 81 return cx*cy; 82 } 83 34 84 //****************************************************************************** 35 85 //****************************************************************************** … … 187 237 RGB2 *os2rgb; 188 238 int palsize = 0; 239 int imgsize; 189 240 190 241 if(bmphdr->cbSize != sizeof(BITMAPFILEHEADER2)) … … 194 245 palsize = (1 << bmphdr->bmp2.cBitCount) * sizeof(RGBQUAD); 195 246 } 247 248 // EB: ->>> added imgsize 249 if(bmphdr->bmp2.cbImage == 0) 250 imgsize = CalcBitmapSize(bmphdr->bmp2.cBitCount, 251 bmphdr->bmp2.cx, 252 bmphdr->bmp2.cy); 253 else 254 imgsize = bmphdr->bmp2.cbImage; 255 196 256 winbmphdr = (WINBITMAPINFOHEADER *)malloc(sizeof(WINBITMAPINFOHEADER) + 197 bmphdr->bmp2.cbImage + palsize); 198 memset((char *)winbmphdr, 0, sizeof(WINBITMAPINFOHEADER) + bmphdr->bmp2.cbImage + 199 palsize); 257 imgsize + palsize); 258 memset((char *)winbmphdr, 0, sizeof(WINBITMAPINFOHEADER) + imgsize + palsize); 200 259 201 260 winbmphdr->biSize = sizeof(WINBITMAPINFOHEADER); … … 206 265 //TODO: Identical except for BI_BITFIELDS (3L) type! 207 266 winbmphdr->biCompression = bmphdr->bmp2.ulCompression; 208 winbmphdr->biSizeImage = bmphdr->bmp2.cbImage; 267 winbmphdr->biSizeImage = bmphdr->bmp2.cbImage; //imgsize; 209 268 //TODO: Doesn't seem to be completely identical.. 210 269 winbmphdr->biClrUsed = bmphdr->bmp2.cclrUsed; … … 221 280 rgb = (RGBQUAD *)((int)rgb + palsize); 222 281 } 223 memcpy((char *)rgb, (char *)os2rgb, winbmphdr->biSizeImage);282 memcpy((char *)rgb, (char *)os2rgb, imgsize); 224 283 return((PVOID)winbmphdr); 225 284 }
Note:
See TracChangeset
for help on using the changeset viewer.