VirtualBox

Changeset 7401 in vbox


Ignore:
Timestamp:
Mar 10, 2008 1:48:33 PM (17 years ago)
Author:
vboxsync
Message:

Don't use UCS2 routines & types. Fixed bug in RTPathUserHome().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r3/win/path-win.cpp

    r5999 r7401  
    5454{
    5555    /*
    56      * Convert to UCS2, call Win32 APIs, convert back.
     56     * Convert to UTF-16, call Win32 APIs, convert back.
    5757     */
    5858    PRTUTF16 pwszPath;
    59     int rc = RTStrUtf8ToUcs2(&pwszPath, pszPath);
     59    int rc = RTStrToUtf16(pszPath, &pwszPath);
    6060    if (!RT_SUCCESS(rc))
    6161        return (rc);
     
    6969        DWORD dwAttr = GetFileAttributesW(wsz);
    7070        if (dwAttr != INVALID_FILE_ATTRIBUTES)
    71             rc = RTStrUcs2ToUtf8Ex(&pszRealPath, cchRealPath, (PRTUTF16)&wsz[0]);
     71            rc = RTUtf16ToUtf8Ex((PRTUTF16)&wsz[0], RTSTR_MAX, &pszRealPath, cchRealPath, NULL);
    7272        else
    7373            rc = RTErrConvertFromWin32(GetLastError());
     
    7878        rc = VERR_FILENAME_TOO_LONG;
    7979
    80     RTStrUcs2Free(pwszPath);
     80    RTUtf16Free(pwszPath);
    8181
    8282    return rc;
     
    9595{
    9696    /*
    97      * Convert to UCS2, call Win32 API, convert back.
    98      */
    99     LPWSTR lpwPath;
    100     int rc = RTStrUtf8ToUcs2(&lpwPath, pszPath);
     97     * Convert to UTF-16, call Win32 API, convert back.
     98     */
     99    LPWSTR pwszPath;
     100    int rc = RTStrToUtf16(pszPath, &pwszPath);
    101101    if (!RT_SUCCESS(rc))
    102102        return (rc);
    103103
    104     LPWSTR lpFile;
    105     RTUCS2 ucsz[RTPATH_MAX];
    106     rc = GetFullPathNameW(lpwPath, ELEMENTS(ucsz), &ucsz[0], &lpFile);
    107     if (rc > 0 && rc < ELEMENTS(ucsz))
    108         rc = RTStrUcs2ToUtf8Ex(&pszAbsPath, cchAbsPath, &ucsz[0]);
     104    LPWSTR pwszFile; /* Ignored */
     105    RTUTF16 wsz[RTPATH_MAX];
     106    rc = GetFullPathNameW(pwszPath, RT_ELEMENTS(wsz), &wsz[0], &pwszFile);
     107    if (rc > 0 && rc < RT_ELEMENTS(wsz))
     108        rc = RTUtf16ToUtf8Ex(&wsz[0], RTSTR_MAX, &pszAbsPath, cchAbsPath, NULL);
    109109    else if (rc <= 0)
    110110        rc = RTErrConvertFromWin32(GetLastError());
     
    112112        rc = VERR_FILENAME_TOO_LONG;
    113113
    114     RTStrUcs2Free(lpwPath);
     114    RTUtf16Free(pwszPath);
    115115
    116116    return rc;
     
    165165RTDECL(int) RTPathUserHome(char *pszPath, unsigned cchPath)
    166166{
    167     RTUCS2  ucszPath[RTPATH_MAX];
     167    RTUTF16 wszPath[RTPATH_MAX];
    168168    DWORD   dwAttr;
    169169
     
    171171     * There are multiple definitions for what WE think of as user home...
    172172     */
    173     if (    !GetEnvironmentVariableW(L"HOME", &ucszPath[0], RTPATH_MAX)
    174         ||  (dwAttr = GetFileAttributesW(&ucszPath[0])) == INVALID_FILE_ATTRIBUTES
     173    if (    !GetEnvironmentVariableW(L"HOME", &wszPath[0], RTPATH_MAX)
     174        ||  (dwAttr = GetFileAttributesW(&wszPath[0])) == INVALID_FILE_ATTRIBUTES
    175175        ||  !(dwAttr & FILE_ATTRIBUTE_DIRECTORY))
    176176    {
    177         if (    !GetEnvironmentVariableW(L"USERPROFILE", &ucszPath[0], RTPATH_MAX)
    178             ||  (dwAttr = GetFileAttributesW(&ucszPath[0])) == INVALID_FILE_ATTRIBUTES
     177        if (    !GetEnvironmentVariableW(L"USERPROFILE", &wszPath[0], RTPATH_MAX)
     178            ||  (dwAttr = GetFileAttributesW(&wszPath[0])) == INVALID_FILE_ATTRIBUTES
    179179            ||  !(dwAttr & FILE_ATTRIBUTE_DIRECTORY))
    180180        {
    181             if (!GetEnvironmentVariableW(L"HOMEDRIVE", &ucszPath[0], RTPATH_MAX))
     181            /* %HOMEDRIVE%%HOMEPATH% */
     182            if (!GetEnvironmentVariableW(L"HOMEDRIVE", &wszPath[0], RTPATH_MAX))
    182183                return VERR_PATH_NOT_FOUND;
    183             PRTUCS2 pucsz = &ucszPath[RTStrUcs2Len(&ucszPath[0])];
    184             if (    !GetEnvironmentVariableW(L"HOMEPATH", &ucszPath[0], RTPATH_MAX)
    185                 ||  (dwAttr = GetFileAttributesW(&ucszPath[0])) == INVALID_FILE_ATTRIBUTES
     184            size_t const cwc = RTUtf16Len(&wszPath[0]);
     185            if (    !GetEnvironmentVariableW(L"HOMEPATH", &wszPath[cwc], RTPATH_MAX - cwc)
     186                ||  (dwAttr = GetFileAttributesW(&wszPath[0])) == INVALID_FILE_ATTRIBUTES
    186187                ||  !(dwAttr & FILE_ATTRIBUTE_DIRECTORY))
    187188                return VERR_PATH_NOT_FOUND;
     
    192193     * Convert and return.
    193194     */
    194     return RTStrUcs2ToUtf8Ex(&pszPath, cchPath, &ucszPath[0]);
     195    return RTStrUcs2ToUtf8Ex(&pszPath, cchPath, &wszPath[0]);
    195196}
    196197
     
    223224    WIN32_FILE_ATTRIBUTE_DATA Data;
    224225#ifndef RT_DONT_CONVERT_FILENAMES
    225     PRTUCS2 puszPath;
    226     int rc = RTStrUtf8ToUcs2(&puszPath, pszPath);
     226    PRTUTF16 pwszPath;
     227    int rc = RTStrUtf8ToUcs2(&pwszPath, pszPath);
    227228    if (RT_FAILURE(rc))
    228229        return rc;
    229     if (!GetFileAttributesExW(puszPath, GetFileExInfoStandard, &Data))
     230    if (!GetFileAttributesExW(pwszPath, GetFileExInfoStandard, &Data))
    230231    {
    231232        rc = RTErrConvertFromWin32(GetLastError());
    232         RTStrUcs2Free(puszPath);
     233        RTUtf16Free(pwszPath);
    233234        return rc;
    234235    }
    235     RTStrUcs2Free(puszPath);
     236    RTUtf16Free(pwszPath);
    236237#else
    237238    if (!GetFileAttributesExA(pszPath, GetFileExInfoStandard, &Data))
     
    457458/**
    458459 * Checks if the path exists.
    459  * 
     460 *
    460461 * Symbolic links will all be attempted resolved.
    461  * 
     462 *
    462463 * @returns true if it exists and false if it doesn't
    463464 * @param   pszPath     The path to check.
     
    475476     */
    476477#ifndef RT_DONT_CONVERT_FILENAMES
    477     PRTUCS2 puszPath;
    478     int rc = RTStrUtf8ToUcs2(&puszPath, pszPath);
     478    PRT16UTF pwszPath;
     479    int rc = RTStrUtf8ToUcs2(&pwszPath, pszPath);
    479480    if (RT_SUCCESS(rc))
    480481    {
    481         if (GetFileAttributesW(puszPath) == INVALID_FILE_ATTRIBUTES)
     482        if (GetFileAttributesW(pwszPath) == INVALID_FILE_ATTRIBUTES)
    482483            rc = VERR_GENERAL_FAILURE;
    483         RTStrUcs2Free(puszPath);
     484        RTUtf16Free(pwszPath);
    484485    }
    485486#else
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette