- Timestamp:
- Dec 11, 2010, 12:11:19 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/gdi32/objhandle.cpp
r21304 r21524 51 51 } GdiObject; 52 52 53 typedef struct 53 typedef struct 54 54 { 55 55 GdiObject *headfree; … … 73 73 74 74 objTableMutex.enter(); 75 if(objHandleTable.objects == NULL) 75 if(objHandleTable.objects == NULL) 76 76 { 77 77 objHandleTable.objects = (GdiObject *)malloc(MAX_OBJECT_HANDLES*sizeof(GdiObject)); … … 88 88 } 89 89 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--) 91 91 { 92 92 GdiObject *obj = &objHandleTable.objects[i]; … … 147 147 { 148 148 hObject &= OBJHANDLE_MAGIC_MASK; 149 if(hObject < MAX_OBJECT_HANDLES) 149 if(hObject < MAX_OBJECT_HANDLES) 150 150 { 151 151 objTableMutex.enter(); 152 152 GdiObject *obj = &objHandleTable.objects[hObject]; 153 if(!(obj->dwFlags & OBJHANDLE_FLAG_NODELETE)) 153 if(!(obj->dwFlags & OBJHANDLE_FLAG_NODELETE)) 154 154 { 155 155 dprintf2(("ObjDeleteHandle %x type %d", MAKE_HANDLE(hObject), obj->dwType)); … … 160 160 161 161 //add to the tail of the free object list 162 if(objHandleTable.tailfree) 162 if(objHandleTable.tailfree) 163 163 objHandleTable.tailfree->next = obj; 164 164 … … 189 189 objTableMutex.enter(); 190 190 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)) 194 194 { 195 195 dwUserData = objHandleTable.objects[hObject].dwUserData; … … 206 206 objTableMutex.enter(); 207 207 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)) 211 211 { 212 212 objHandleTable.objects[hObject].dwUserData = dwUserData; … … 224 224 objTableMutex.enter(); 225 225 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)) 229 229 { 230 230 dwGDI32Data = objHandleTable.objects[hObject].dwGDI32Data; … … 241 241 objTableMutex.enter(); 242 242 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)) 246 246 { 247 247 objHandleTable.objects[hObject].dwGDI32Data = dwGDI32Data; … … 259 259 objTableMutex.enter(); 260 260 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) 262 262 { 263 263 dwFlags = objHandleTable.objects[hObject].dwFlags; … … 291 291 DWORD WIN32API ObjQueryHandleType(HANDLE hObject) 292 292 { 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 293 302 DWORD objtype = 0; 294 303 … … 343 352 { 344 353 int rc; 345 354 346 355 if(lpBuffer == NULL) 347 356 { //return required size if buffer pointer == NULL … … 351 360 case OBJ_PEN: 352 361 return sizeof(LOGPEN); 353 362 354 363 case OBJ_EXTPEN: 355 364 return sizeof(EXTLOGPEN); 356 365 357 366 case OBJ_BRUSH: 358 367 return sizeof(LOGBRUSH); 359 368 360 369 case OBJ_PAL: 361 370 return sizeof(USHORT); 362 371 363 372 case OBJ_FONT: 364 373 return sizeof(LOGFONTA); 365 374 366 375 case OBJ_BITMAP: 367 376 return sizeof(BITMAP); //also default for dib sections??? (TODO: NEED TO CHECK THIS) 368 377 369 378 case OBJ_DC: 370 379 case OBJ_METADC: … … 438 447 static char *gditypenames[] = { 439 448 "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", 452 461 "OBJ_ENHMETAFILE" 453 462 }; … … 583 592 584 593 //hack alert 585 if(HIWORD(hObj) == 0x100) 594 if(HIWORD(hObj) == 0x100) 586 595 {//most likely a DC handle 587 596 if(OSLibGpiQueryDCData(hObj) != NULL) { … … 596 605 dprintf(("!WARNING!: Can't delete system object")); 597 606 return TRUE; 598 } 607 } 599 608 STATS_DeleteObject(hObj, GetObjectType(hObj)); 600 609
Note:
See TracChangeset
for help on using the changeset viewer.