Changeset 2869 for trunk/kLdr/kLdrDyldFind.c
- Timestamp:
- Nov 12, 2006, 3:47:25 AM (19 years ago)
- File:
-
- 1 edited
-
trunk/kLdr/kLdrDyldFind.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/kLdr/kLdrDyldFind.c
r2868 r2869 218 218 */ 219 219 rc = kldrHlpGetEnv("KLDR_LIBRARY_PATH", kLdrDyldPath, sizeof(kLdrDyldPath)); 220 if (rc)221 kLdrDyldPath[0] = '\0';222 223 220 rc = kldrHlpGetEnv("KLDR_DEF_PREFIX", szTmp, sizeof(szTmp)); 224 221 if (!rc) 225 222 kLdrHlpMemCopy(kLdrDyldDefPrefix, szTmp, sizeof(szTmp)); 226 227 223 rc = kldrHlpGetEnv("KLDR_DEF_SUFFIX", szTmp, sizeof(szTmp)); 228 224 if (!rc) … … 249 245 kldrHlpGetEnv("KLDR_OS2_LIBPATH", kLdrDyldOS2Libpath, sizeof(kLdrDyldOS2Libpath)); 250 246 kldrHlpGetEnv("KLDR_OS2_LIBPATHSTRICT", kLdrDyldOS2LibpathStrict, sizeof(kLdrDyldOS2LibpathStrict)); 247 if ( kLdrDyldOS2LibpathStrict[0] == 'T' 248 || kLdrDyldOS2LibpathStrict[0] == 't') 249 kLdrDyldOS2LibpathStrict[0] = 'T'; 250 else 251 kLdrDyldOS2LibpathStrict[0] = '\0'; 252 kLdrDyldOS2LibpathStrict[1] = '\0'; 251 253 kldrHlpGetEnv("KLDR_OS2_BEGINLIBPATH", kLdrDyldOS2BeginLibpath, sizeof(kLdrDyldOS2BeginLibpath)); 252 254 kldrHlpGetEnv("KLDR_OS2_ENDLIBPATH", kLdrDyldOS2EndLibpath, sizeof(kLdrDyldOS2EndLibpath)); … … 267 269 kldrHlpGetEnv("KLDR_WINDOWS_SYSTEM_DIR", kLdrDyldWindowsSystemDir, sizeof(kLdrDyldWindowsSystemDir)); 268 270 kldrHlpGetEnv("KLDR_WINDOWS_DIR", kLdrDyldWindowsDir, sizeof(kLdrDyldWindowsDir)); 269 kldrHlpGetEnv("KLDR_WINDOWS_PATH", kLdrDyldWindowsPath, sizeof(kLdrDyldWindowsPath)); 271 rc = kldrHlpGetEnv("KLDR_WINDOWS_PATH", kLdrDyldWindowsPath, sizeof(kLdrDyldWindowsPath)); 272 if (rc) 273 kldrHlpGetEnv("PATH", kLdrDyldWindowsPath, sizeof(kLdrDyldWindowsPath)); 270 274 #endif 271 275 … … 279 283 (void)cch; 280 284 return 0; 285 } 286 287 288 /** 289 * Lazily initialize the two application directory paths. 290 */ 291 static void kldrDyldFindLazyInitAppDir(void) 292 { 293 if (!kLdrDyldAppDir[0]) 294 { 295 #if defined(__OS2__) 296 PPIB pPib; 297 PTIB pTib; 298 APIRET rc; 299 300 DosGetInfoBlocks(&pTib, &pPib); 301 rc = DosQueryModuleName(pPib->pib_hmte, sizeof(kLdrDyldAppDir), kLdrDyldAppDir); 302 if (!rc) 303 { 304 *kldrHlpGetFilename(kLdrDyldAppDir) = '\0'; 305 kLdrHlpMemCopy(kLdrDyldWindowsAppDir, kLdrDyldAppDir, sizeof(kLdrDyldAppDir)); 306 } 307 else 308 { 309 kLdrDyldWindowsAppDir[0] = kLdrDyldAppDir[0] = '.'; 310 kLdrDyldWindowsAppDir[1] = kLdrDyldAppDir[1] = '\0'; 311 } 312 313 314 #elif defined(__WIN__) 315 DWORD dwSize = GetModuleFileName(NULL /* the executable */, kLdrDyldAppDir, sizeof(kLdrDyldAppDir)); 316 if (dwSize > 0) 317 { 318 *kldrHlpGetFilename(kLdrDyldAppDir) = '\0'; 319 kLdrHlpMemCopy(kLdrDyldWindowsAppDir, kLdrDyldAppDir, sizeof(kLdrDyldAppDir)); 320 } 321 else 322 { 323 kLdrDyldWindowsAppDir[0] = kLdrDyldAppDir[0] = '.'; 324 kLdrDyldWindowsAppDir[1] = kLdrDyldAppDir[1] = '\0'; 325 } 326 327 #else 328 # error "Port me" 329 #endif 330 } 281 331 } 282 332 … … 390 440 Args.pszName = pszName; 391 441 Args.cchName = kLdrHlpStrLen(pszName); 392 Args.cchPrefix = Args.pszPrefix ? kLdrHlpStrLen( pszPrefix) : 0;393 Args.cchSuffix = Args.pszSuffix ? kLdrHlpStrLen( pszSuffix) : 0;442 Args.cchPrefix = Args.pszPrefix ? kLdrHlpStrLen(Args.pszPrefix) : 0; 443 Args.cchSuffix = Args.pszSuffix ? kLdrHlpStrLen(Args.pszSuffix) : 0; 394 444 Args.cchMaxLength = Args.cchName + Args.cchSuffix + Args.cchPrefix; 395 445 Args.fFlags = fFlags; … … 400 450 */ 401 451 /** @todo get rid of the strlen() on the various paths here! */ 402 switch ( enmSearch)452 switch (Args.enmSearch) 403 453 { 404 454 case KLDRDYLD_SEARCH_KLDR: 405 455 { 456 kldrDyldFindLazyInitAppDir(); 406 457 if (kLdrDyldAppDir[0] != '\0') 407 458 { … … 432 483 case KLDRDYLD_SEARCH_WINDOWS_ALTERED: 433 484 { 485 kldrDyldFindLazyInitAppDir(); 434 486 rc = kldrDyldFindTryOpenPath(kLdrDyldWindowsAppDir, kLdrHlpStrLen(kLdrDyldWindowsAppDir), &Args); 435 487 if (rc != KLDR_ERR_MODULE_NOT_FOUND) 436 488 break; 437 if ( enmSearch == KLDRDYLD_SEARCH_WINDOWS_ALTERED)489 if (Args.enmSearch == KLDRDYLD_SEARCH_WINDOWS_ALTERED) 438 490 { 439 491 rc = kldrDyldFindTryOpenPath(".", 1, &Args); … … 447 499 if (rc != KLDR_ERR_MODULE_NOT_FOUND) 448 500 break; 449 if ( enmSearch == KLDRDYLD_SEARCH_WINDOWS)501 if (Args.enmSearch == KLDRDYLD_SEARCH_WINDOWS) 450 502 { 451 503 rc = kldrDyldFindTryOpenPath(".", 1, &Args); … … 513 565 static char s_szFilename[1024]; 514 566 char *psz; 567 568 /* 569 * Ignore any attempts at opening empty paths. 570 * This can happen when a *Dir globals is empty. 571 */ 572 if (!cchPath) 573 return KLDR_ERR_MODULE_NOT_FOUND; /* ignore */ 515 574 516 575 /* … … 692 751 if ( cchName > cchSuffix 693 752 && ( fCaseSensitive 694 ? kLdrHlpMemComp(pszName + cchName - cchSuffix, *ppszSuffix, cchSuffix)695 : kLdrHlpMemIComp(pszName + cchName - cchSuffix, *ppszSuffix, cchSuffix))753 ? !kLdrHlpMemComp(pszName + cchName - cchSuffix, *ppszSuffix, cchSuffix) 754 : !kLdrHlpMemIComp(pszName + cchName - cchSuffix, *ppszSuffix, cchSuffix)) 696 755 ) 697 756 *ppszSuffix = NULL;
Note:
See TracChangeset
for help on using the changeset viewer.
