Changeset 6347 for trunk/src/kernel32/winimgres.cpp
- Timestamp:
- Jul 16, 2001, 9:30:08 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/winimgres.cpp
r5474 r6347 1 /* $Id: winimgres.cpp,v 1.5 1 2001-04-04 10:12:05sandervl Exp $ */1 /* $Id: winimgres.cpp,v 1.52 2001-07-16 19:30:08 sandervl Exp $ */ 2 2 3 3 /* … … 8 8 * 9 9 * Language order based on Wine Code (loader\pe_resource.c) 10 * + find_entry_by_id & find_entry_by_name 10 11 * Copyright 1995 Thomas Sandford 11 12 * Copyright 1996 Martin von Loewis … … 332 333 } 333 334 335 /********************************************************************** 336 * find_entry_by_id 337 * 338 * Find an entry by id in a resource directory 339 */ 340 IMAGE_RESOURCE_DIRECTORY *find_entry_by_id( const IMAGE_RESOURCE_DIRECTORY *dir, 341 WORD id, const void *root ) 342 { 343 const IMAGE_RESOURCE_DIRECTORY_ENTRY *entry; 344 int min, max, pos; 345 346 entry = (const IMAGE_RESOURCE_DIRECTORY_ENTRY *)(dir + 1); 347 min = dir->NumberOfNamedEntries; 348 max = min + dir->NumberOfIdEntries - 1; 349 while (min <= max) 350 { 351 pos = (min + max) / 2; 352 if (entry[pos].u1.Id == id) 353 return (IMAGE_RESOURCE_DIRECTORY *)((char *)root + entry[pos].u2.s.OffsetToDirectory); 354 if (entry[pos].u1.Id > id) max = pos - 1; 355 else min = pos + 1; 356 } 357 return NULL; 358 } 359 360 361 /********************************************************************** 362 * find_entry_by_nameW 363 * 364 * Find an entry by name in a resource directory 365 */ 366 IMAGE_RESOURCE_DIRECTORY *find_entry_by_nameW( const IMAGE_RESOURCE_DIRECTORY *dir, 367 LPCWSTR name, const void *root ) 368 { 369 const IMAGE_RESOURCE_DIRECTORY_ENTRY *entry; 370 const IMAGE_RESOURCE_DIR_STRING_U *str; 371 int min, max, res, pos, namelen; 372 373 entry = (const IMAGE_RESOURCE_DIRECTORY_ENTRY *)(dir + 1); 374 namelen = strlenW(name); 375 min = 0; 376 max = dir->NumberOfNamedEntries - 1; 377 while (min <= max) 378 { 379 pos = (min + max) / 2; 380 str = (IMAGE_RESOURCE_DIR_STRING_U *)((char *)root + entry[pos].u1.s.NameOffset); 381 res = strncmpiW( name, str->NameString, str->Length ); 382 if (!res && namelen == str->Length) 383 return (IMAGE_RESOURCE_DIRECTORY *)((char *)root + entry[pos].u2.s.OffsetToDirectory); 384 if (res < 0) max = pos - 1; 385 else min = pos + 1; 386 } 387 return NULL; 388 } 389 334 390 /** 335 391 * This function finds a resource (sub)directory within a given resource directory. … … 380 436 paResDirEntries += pResDirToSearch->NumberOfNamedEntries; 381 437 438 #if 1 439 return find_entry_by_id(pResDirToSearch, idName, pResRootDir); 440 #else 382 441 for (i = 0; i < pResDirToSearch->NumberOfIdEntries; i++) 383 442 if (paResDirEntries[i].u1.Id == (WORD)idName) … … 386 445 /*- ulRVAResourceSection*/) 387 446 : NULL; 447 #endif 388 448 } 389 449 else 390 { /* string name */ 450 { 451 #if 1 452 return find_entry_by_nameW(pResDirToSearch, lpszName, pResRootDir); 453 #else 454 /* string name */ 391 455 int cusName = lstrlenW(lpszName); 392 456 … … 406 470 } 407 471 } 472 #endif 408 473 } 409 474
Note:
See TracChangeset
for help on using the changeset viewer.