Changeset 37 for trunk/src/kernel32


Ignore:
Timestamp:
Jun 6, 1999, 2:25:49 PM (26 years ago)
Author:
cbratschi
Message:

hiho

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 phaller Exp $ */
     1/* $Id: heap.cpp,v 1.5 1999-06-06 12:25:49 cbratschi Exp $ */
    22
    33/*
     
    7171  curheap = new OS2Heap(hHeap, flOptions, dwInitialSize, dwMaximumSize);
    7272  if(curheap == NULL) {
    73         O32_HeapDestroy(hHeap);
     73        O32_HeapDestroy(hHeap);
    7474        return(NULL);
    7575  }
    7676  if(curheap->getHeapHandle() == NULL) {
    77         O32_HeapDestroy(hHeap);
     77        O32_HeapDestroy(hHeap);
    7878        delete curheap;
    7979        return(NULL);
     
    9898/* PH: Though "HeapSize" is a reserved word for the linker, ILINK can be
    9999   tricked by placing the word HEAPSIZE in quotes. It then exports it properly
    100    to the target DLL. 
     100   to the target DLL.
    101101 */
    102102DWORD WIN32API HeapSize(HANDLE hHeap, DWORD arg2, PVOID  arg3)
     
    154154    //SvL: Only one process heap per process
    155155    if(processheap == NULL) {
    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;
     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;
    164164    }
    165165    return(processheap);
     
    173173
    174174  if(processheap == NULL) {
    175         if(GetProcessHeap() == NULL)
    176                 return(NULL);
     175        if(GetProcessHeap() == NULL)
     176                return(NULL);
    177177  }
    178178  if(fuFlags & LMEM_ZEROINIT)
     
    209209
    210210    if(OS2ProcessHeap->GetLockCnt((LPVOID)hMem) != 0) {
    211         dprintf(("LocalFree, lock count != 0\n"));
    212         return(hMem);   //TODO: SetLastError
     211        dprintf(("LocalFree, lock count != 0\n"));
     212        return(hMem);   //TODO: SetLastError
    213213    }
    214214    if(OS2ProcessHeap->Free(0, (LPVOID)hMem) == FALSE) {
    215         return(hMem);   //TODO: SetLastError
     215        return(hMem);   //TODO: SetLastError
    216216    }
    217217    return NULL; //success
     
    238238HLOCAL WIN32API LocalReAlloc(HLOCAL hMem, DWORD cbBytes, UINT fuFlags)
    239239{
    240  LPVOID lpMem;
     240 HLOCAL lpMem;
    241241
    242242    dprintf(("KERNEL32: LocalReAlloc %X %d %X\n", hMem, cbBytes, fuFlags));
    243243    //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)));
    249252    OS2ProcessHeap->Free(0, (LPVOID)hMem);
     253
     254    dprintf(("KERNEL32:  LocalReAlloc returned %X\n", lpMem));
    250255    return((HLOCAL)lpMem);
    251256}
  • trunk/src/kernel32/resource.cpp

    r25 r37  
    1 /* $Id: resource.cpp,v 1.3 1999-06-01 15:47:38 phaller Exp $ */
     1/* $Id: resource.cpp,v 1.4 1999-06-06 12:25:49 cbratschi Exp $ */
    22
    33/*
     
    3131
    3232    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);
    3638
    3739    if(module == NULL)
     
    4345//******************************************************************************
    4446HRSRC WIN32API FindResourceW(HINSTANCE hModule, LPCWSTR lpszName,
    45                              LPCWSTR lpszType)
     47                             LPCWSTR lpszType)
    4648{
    4749 Win32Image *module;
     
    5355
    5456    if(module == NULL)
    55         return(NULL);
     57        return(NULL);
    5658
    5759    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 ktk Exp $ */
     1/* $Id: winres.cpp,v 1.2 1999-06-06 12:25:49 cbratschi Exp $ */
    22
    33/*
     
    3232#include "winexe.h"
    3333
     34static 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
    3484//******************************************************************************
    3585//******************************************************************************
     
    187237 RGB2                *os2rgb;
    188238 int                  palsize = 0;
     239 int                  imgsize;
    189240
    190241  if(bmphdr->cbSize != sizeof(BITMAPFILEHEADER2))
     
    194245    palsize = (1 << bmphdr->bmp2.cBitCount) * sizeof(RGBQUAD);
    195246  }
     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
    196256  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);
    200259
    201260  winbmphdr->biSize          = sizeof(WINBITMAPINFOHEADER);
     
    206265  //TODO: Identical except for BI_BITFIELDS (3L) type!
    207266  winbmphdr->biCompression   = bmphdr->bmp2.ulCompression;
    208   winbmphdr->biSizeImage     = bmphdr->bmp2.cbImage;
     267  winbmphdr->biSizeImage     = bmphdr->bmp2.cbImage; //imgsize;
    209268  //TODO: Doesn't seem to be completely identical..
    210269  winbmphdr->biClrUsed       = bmphdr->bmp2.cclrUsed;
     
    221280    rgb    = (RGBQUAD *)((int)rgb    + palsize);
    222281  }
    223   memcpy((char *)rgb, (char *)os2rgb, winbmphdr->biSizeImage);
     282  memcpy((char *)rgb, (char *)os2rgb, imgsize);
    224283  return((PVOID)winbmphdr);
    225284}
Note: See TracChangeset for help on using the changeset viewer.