Ignore:
Timestamp:
Nov 12, 2006, 3:47:25 AM (19 years ago)
Author:
bird
Message:

the simple testcase works.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kLdr/kLdrDyldFind.c

    r2868 r2869  
    218218     */
    219219    rc = kldrHlpGetEnv("KLDR_LIBRARY_PATH", kLdrDyldPath, sizeof(kLdrDyldPath));
    220     if (rc)
    221         kLdrDyldPath[0] = '\0';
    222 
    223220    rc = kldrHlpGetEnv("KLDR_DEF_PREFIX", szTmp, sizeof(szTmp));
    224221    if (!rc)
    225222        kLdrHlpMemCopy(kLdrDyldDefPrefix, szTmp, sizeof(szTmp));
    226 
    227223    rc = kldrHlpGetEnv("KLDR_DEF_SUFFIX", szTmp, sizeof(szTmp));
    228224    if (!rc)
     
    249245    kldrHlpGetEnv("KLDR_OS2_LIBPATH", kLdrDyldOS2Libpath, sizeof(kLdrDyldOS2Libpath));
    250246    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';
    251253    kldrHlpGetEnv("KLDR_OS2_BEGINLIBPATH", kLdrDyldOS2BeginLibpath, sizeof(kLdrDyldOS2BeginLibpath));
    252254    kldrHlpGetEnv("KLDR_OS2_ENDLIBPATH", kLdrDyldOS2EndLibpath, sizeof(kLdrDyldOS2EndLibpath));
     
    267269    kldrHlpGetEnv("KLDR_WINDOWS_SYSTEM_DIR", kLdrDyldWindowsSystemDir, sizeof(kLdrDyldWindowsSystemDir));
    268270    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));
    270274#endif
    271275
     
    279283    (void)cch;
    280284    return 0;
     285}
     286
     287
     288/**
     289 * Lazily initialize the two application directory paths.
     290 */
     291static 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    }
    281331}
    282332
     
    390440    Args.pszName = pszName;
    391441    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;
    394444    Args.cchMaxLength = Args.cchName + Args.cchSuffix + Args.cchPrefix;
    395445    Args.fFlags = fFlags;
     
    400450     */
    401451/** @todo get rid of the strlen() on the various paths here! */
    402     switch (enmSearch)
     452    switch (Args.enmSearch)
    403453    {
    404454        case KLDRDYLD_SEARCH_KLDR:
    405455        {
     456            kldrDyldFindLazyInitAppDir();
    406457            if (kLdrDyldAppDir[0] != '\0')
    407458            {
     
    432483        case KLDRDYLD_SEARCH_WINDOWS_ALTERED:
    433484        {
     485            kldrDyldFindLazyInitAppDir();
    434486            rc = kldrDyldFindTryOpenPath(kLdrDyldWindowsAppDir, kLdrHlpStrLen(kLdrDyldWindowsAppDir), &Args);
    435487            if (rc != KLDR_ERR_MODULE_NOT_FOUND)
    436488                break;
    437             if (enmSearch == KLDRDYLD_SEARCH_WINDOWS_ALTERED)
     489            if (Args.enmSearch == KLDRDYLD_SEARCH_WINDOWS_ALTERED)
    438490            {
    439491                rc = kldrDyldFindTryOpenPath(".", 1, &Args);
     
    447499            if (rc != KLDR_ERR_MODULE_NOT_FOUND)
    448500                break;
    449             if (enmSearch == KLDRDYLD_SEARCH_WINDOWS)
     501            if (Args.enmSearch == KLDRDYLD_SEARCH_WINDOWS)
    450502            {
    451503                rc = kldrDyldFindTryOpenPath(".", 1, &Args);
     
    513565    static char s_szFilename[1024];
    514566    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 */
    515574
    516575    /*
     
    692751        if (    cchName > cchSuffix
    693752            &&  (   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))
    696755           )
    697756            *ppszSuffix = NULL;
Note: See TracChangeset for help on using the changeset viewer.