Changeset 21524 for trunk/src


Ignore:
Timestamp:
Dec 11, 2010, 12:11:19 AM (15 years ago)
Author:
dmik
Message:

Fixed: GetObjectType() on DC handles would return wrong values.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gdi32/objhandle.cpp

    r21304 r21524  
    5151} GdiObject;
    5252
    53 typedef struct 
     53typedef struct
    5454{
    5555  GdiObject *headfree;
     
    7373
    7474    objTableMutex.enter();
    75     if(objHandleTable.objects == NULL) 
     75    if(objHandleTable.objects == NULL)
    7676    {
    7777        objHandleTable.objects = (GdiObject *)malloc(MAX_OBJECT_HANDLES*sizeof(GdiObject));
     
    8888        }
    8989        objHandleTable.tailfree = &objHandleTable.objects[MAX_OBJECT_HANDLES-1];
    90         for(int i=MAX_OBJECT_HANDLES-1;i>0;i--) 
     90        for(int i=MAX_OBJECT_HANDLES-1;i>0;i--)
    9191        {
    9292            GdiObject *obj = &objHandleTable.objects[i];
     
    147147{
    148148    hObject &= OBJHANDLE_MAGIC_MASK;
    149     if(hObject < MAX_OBJECT_HANDLES) 
     149    if(hObject < MAX_OBJECT_HANDLES)
    150150    {
    151151        objTableMutex.enter();
    152152        GdiObject *obj = &objHandleTable.objects[hObject];
    153         if(!(obj->dwFlags & OBJHANDLE_FLAG_NODELETE)) 
     153        if(!(obj->dwFlags & OBJHANDLE_FLAG_NODELETE))
    154154        {
    155155            dprintf2(("ObjDeleteHandle %x type %d", MAKE_HANDLE(hObject), obj->dwType));
     
    160160
    161161            //add to the tail of the free object list
    162             if(objHandleTable.tailfree) 
     162            if(objHandleTable.tailfree)
    163163                objHandleTable.tailfree->next = obj;
    164164
     
    189189    objTableMutex.enter();
    190190    hObject &= OBJHANDLE_MAGIC_MASK;
    191     if(hObject < MAX_OBJECT_HANDLES && 
    192        ((dwType == HNDL_ANY && objHandleTable.objects[hObject].dwType != HNDL_NONE) || 
    193        dwType == objHandleTable.objects[hObject].dwType)) 
     191    if(hObject < MAX_OBJECT_HANDLES &&
     192       ((dwType == HNDL_ANY && objHandleTable.objects[hObject].dwType != HNDL_NONE) ||
     193       dwType == objHandleTable.objects[hObject].dwType))
    194194    {
    195195        dwUserData = objHandleTable.objects[hObject].dwUserData;
     
    206206    objTableMutex.enter();
    207207    hObject &= OBJHANDLE_MAGIC_MASK;
    208     if(hObject < MAX_OBJECT_HANDLES && 
    209        ((dwType == HNDL_ANY && objHandleTable.objects[hObject].dwType != HNDL_NONE) || 
    210        dwType == objHandleTable.objects[hObject].dwType)) 
     208    if(hObject < MAX_OBJECT_HANDLES &&
     209       ((dwType == HNDL_ANY && objHandleTable.objects[hObject].dwType != HNDL_NONE) ||
     210       dwType == objHandleTable.objects[hObject].dwType))
    211211    {
    212212        objHandleTable.objects[hObject].dwUserData = dwUserData;
     
    224224    objTableMutex.enter();
    225225    hObject &= OBJHANDLE_MAGIC_MASK;
    226     if(hObject < MAX_OBJECT_HANDLES && 
    227        ((dwType == HNDL_ANY && objHandleTable.objects[hObject].dwType != HNDL_NONE) || 
    228        dwType == objHandleTable.objects[hObject].dwType)) 
     226    if(hObject < MAX_OBJECT_HANDLES &&
     227       ((dwType == HNDL_ANY && objHandleTable.objects[hObject].dwType != HNDL_NONE) ||
     228       dwType == objHandleTable.objects[hObject].dwType))
    229229    {
    230230        dwGDI32Data = objHandleTable.objects[hObject].dwGDI32Data;
     
    241241    objTableMutex.enter();
    242242    hObject &= OBJHANDLE_MAGIC_MASK;
    243     if(hObject < MAX_OBJECT_HANDLES && 
    244        ((dwType == HNDL_ANY && objHandleTable.objects[hObject].dwType != HNDL_NONE) || 
    245        dwType == objHandleTable.objects[hObject].dwType)) 
     243    if(hObject < MAX_OBJECT_HANDLES &&
     244       ((dwType == HNDL_ANY && objHandleTable.objects[hObject].dwType != HNDL_NONE) ||
     245       dwType == objHandleTable.objects[hObject].dwType))
    246246    {
    247247        objHandleTable.objects[hObject].dwGDI32Data = dwGDI32Data;
     
    259259    objTableMutex.enter();
    260260    hObject &= OBJHANDLE_MAGIC_MASK;
    261     if(hObject < MAX_OBJECT_HANDLES && objHandleTable.objects[hObject].dwType != HNDL_NONE) 
     261    if(hObject < MAX_OBJECT_HANDLES && objHandleTable.objects[hObject].dwType != HNDL_NONE)
    262262    {
    263263        dwFlags = objHandleTable.objects[hObject].dwFlags;
     
    291291DWORD WIN32API ObjQueryHandleType(HANDLE hObject)
    292292{
     293//hack alert
     294    if(HIWORD(hObject) == 0x100)
     295    {//most likely a DC handle
     296        if(OSLibGpiQueryDCData(hObject) != NULL) {
     297            return HNDL_DC;
     298        }
     299    }
     300//end hack
     301
    293302    DWORD objtype = 0;
    294303
     
    343352{
    344353    int rc;
    345    
     354
    346355    if(lpBuffer == NULL)
    347356    { //return required size if buffer pointer == NULL
     
    351360        case OBJ_PEN:
    352361            return sizeof(LOGPEN);
    353    
     362
    354363        case OBJ_EXTPEN:
    355364            return sizeof(EXTLOGPEN);
    356    
     365
    357366        case OBJ_BRUSH:
    358367            return sizeof(LOGBRUSH);
    359    
     368
    360369        case OBJ_PAL:
    361370            return sizeof(USHORT);
    362    
     371
    363372        case OBJ_FONT:
    364373            return sizeof(LOGFONTA);
    365    
     374
    366375        case OBJ_BITMAP:
    367376            return sizeof(BITMAP); //also default for dib sections??? (TODO: NEED TO CHECK THIS)
    368    
     377
    369378        case OBJ_DC:
    370379        case OBJ_METADC:
     
    438447static char *gditypenames[] = {
    439448"NULL",
    440 "OBJ_PEN", 
    441 "OBJ_BRUSH", 
    442 "OBJ_DC", 
    443 "OBJ_METADC", 
    444 "OBJ_PAL", 
    445 "OBJ_FONT", 
    446 "OBJ_BITMAP", 
    447 "OBJ_REGION", 
    448 "OBJ_METAFILE", 
    449 "OBJ_MEMDC", 
    450 "OBJ_EXTPEN", 
    451 "OBJ_ENHMETADC", 
     449"OBJ_PEN",
     450"OBJ_BRUSH",
     451"OBJ_DC",
     452"OBJ_METADC",
     453"OBJ_PAL",
     454"OBJ_FONT",
     455"OBJ_BITMAP",
     456"OBJ_REGION",
     457"OBJ_METAFILE",
     458"OBJ_MEMDC",
     459"OBJ_EXTPEN",
     460"OBJ_ENHMETADC",
    452461"OBJ_ENHMETAFILE"
    453462};
     
    583592
    584593//hack alert
    585     if(HIWORD(hObj) == 0x100) 
     594    if(HIWORD(hObj) == 0x100)
    586595    {//most likely a DC handle
    587596        if(OSLibGpiQueryDCData(hObj) != NULL) {
     
    596605        dprintf(("!WARNING!: Can't delete system object"));
    597606        return TRUE;
    598     }   
     607    }
    599608    STATS_DeleteObject(hObj, GetObjectType(hObj));
    600609
Note: See TracChangeset for help on using the changeset viewer.