diff --git a/dll/win32/shell32/folders/CDrivesFolder.cpp b/dll/win32/shell32/folders/CDrivesFolder.cpp index 304a7b55009..9cc549a842a 100644 --- a/dll/win32/shell32/folders/CDrivesFolder.cpp +++ b/dll/win32/shell32/folders/CDrivesFolder.cpp @@ -57,13 +57,13 @@ static int iDriveTypeIds[7] = { IDS_DRIVE_FIXED, /* DRIVE_UNKNOWN */ BOOL _ILGetDriveType(LPCITEMIDLIST pidl) { - char szDrive[8]; + WCHAR szDrive[8]; if (!_ILGetDrive(pidl, szDrive, _countof(szDrive))) { ERR("pidl %p is not a drive\n", pidl); return DRIVE_UNKNOWN; } - return ::GetDriveTypeA(szDrive); + return ::GetDriveTypeW(szDrive); } /*********************************************************************** @@ -285,16 +285,16 @@ HRESULT CALLBACK DrivesContextMenuCallback(IShellFolder *psf, if (FAILED_UNEXPECTEDLY(hr)) return hr; - char szDrive[8] = {0}; - if (!_ILGetDrive(apidl[0], szDrive, sizeof(szDrive))) + WCHAR szDrive[8] = {0}; + if (!_ILGetDrive(apidl[0], szDrive, _countof(szDrive))) { ERR("pidl is not a drive\n"); SHFree(pidlFolder); _ILFreeaPidl(apidl, cidl); return E_FAIL; } - nDriveType = GetDriveTypeA(szDrive); - GetVolumeInformationA(szDrive, NULL, 0, NULL, NULL, &dwFlags, NULL, 0); + nDriveType = GetDriveTypeW(szDrive); + GetVolumeInformationW(szDrive, NULL, 0, NULL, NULL, &dwFlags, NULL, 0); // custom command IDs #if 0 // Disabled until our menu building system is fixed diff --git a/dll/win32/shell32/folders/CFSFolder.cpp b/dll/win32/shell32/folders/CFSFolder.cpp index 50340a39db7..888d0f8f690 100644 --- a/dll/win32/shell32/folders/CFSFolder.cpp +++ b/dll/win32/shell32/folders/CFSFolder.cpp @@ -657,9 +657,9 @@ HRESULT SHELL32_GetFSItemAttributes(IShellFolder * psf, LPCITEMIDLIST pidl, LPDW if (SFGAO_LINK & *pdwAttributes) { - char ext[MAX_PATH]; + WCHAR ext[MAX_PATH]; - if (_ILGetExtension(pidl, ext, MAX_PATH) && !lstrcmpiA(ext, "lnk")) + if (_ILGetExtension(pidl, ext, _countof(ext)) && !lstrcmpiW(ext, L"lnk")) dwShellAttributes |= SFGAO_LINK; } @@ -1598,7 +1598,8 @@ HRESULT WINAPI CFSFolder::GetDetailsOf(PCUITEMID_CHILD pidl, else { hr = S_OK; - psd->str.uType = STRRET_CSTR; + psd->str.uType = STRRET_WSTR; + psd->str.pOleStr = (LPWSTR)CoTaskMemAlloc(MAX_PATH * sizeof(WCHAR)); /* the data from the pidl */ switch (iColumn) { @@ -1606,19 +1607,19 @@ HRESULT WINAPI CFSFolder::GetDetailsOf(PCUITEMID_CHILD pidl, hr = GetDisplayNameOf (pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); break; case SHFSF_COL_SIZE: - _ILGetFileSize(pidl, psd->str.cStr, MAX_PATH); + _ILGetFileSize(pidl, psd->str.pOleStr, MAX_PATH); break; case SHFSF_COL_TYPE: - _ILGetFileType(pidl, psd->str.cStr, MAX_PATH); + _ILGetFileType(pidl, psd->str.pOleStr, MAX_PATH); break; case SHFSF_COL_MDATE: - _ILGetFileDate(pidl, psd->str.cStr, MAX_PATH); + _ILGetFileDate(pidl, psd->str.pOleStr, MAX_PATH); break; case SHFSF_COL_FATTS: - _ILGetFileAttributes(pidl, psd->str.cStr, MAX_PATH); + _ILGetFileAttributes(pidl, psd->str.pOleStr, MAX_PATH); break; case SHFSF_COL_COMMENT: - psd->str.cStr[0] = '\0'; // TODO: Extract comment from .lnk files? desktop.ini? + psd->str.pOleStr[0] = UNICODE_NULL; // TODO: Extract comment from .lnk files? desktop.ini? break; #if DBG default: diff --git a/dll/win32/shell32/wine/pidl.c b/dll/win32/shell32/wine/pidl.c index 9c3df45bc3b..e749d05125c 100644 --- a/dll/win32/shell32/wine/pidl.c +++ b/dll/win32/shell32/wine/pidl.c @@ -1855,13 +1855,11 @@ LPITEMIDLIST _ILCreateDrive(LPCWSTR lpszNew) pidlOut = _ILAlloc(PT_DRIVE, sizeof(DriveStruct)); if (pidlOut) { - LPSTR pszDest; - - pszDest = _ILGetTextPointer(pidlOut); + LPSTR pszDest = _ILGetTextPointer(pidlOut); if (pszDest) { - strcpy(pszDest, "x:\\"); - pszDest[0]=toupperW(lpszNew[0]); + lstrcpyA(pszDest, "x:\\"); + pszDest[0] = toupper(lpszNew[0]); TRACE("-- create Drive: %s\n", debugstr_a(pszDest)); } } @@ -1893,7 +1891,7 @@ LPITEMIDLIST _ILCreateEntireNetwork(void) * RETURNS * strlen (lpszText) */ -DWORD _ILGetDrive(LPCITEMIDLIST pidl,LPSTR pOut, UINT uSize) +DWORD _ILGetDrive(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uSize) { TRACE("(%p,%p,%u)\n",pidl,pOut,uSize); @@ -1901,7 +1899,7 @@ DWORD _ILGetDrive(LPCITEMIDLIST pidl,LPSTR pOut, UINT uSize) pidl = ILGetNext(pidl); if (pidl && _ILIsDrive(pidl)) - return _ILSimpleGetText(pidl, pOut, uSize); + return _ILSimpleGetTextW(pidl, pOut, uSize); return 0; } @@ -2066,79 +2064,7 @@ BOOL _ILIsPidlSimple(LPCITEMIDLIST pidl) * ### 3. section getting values from pidls ### */ - /************************************************************************** - * _ILSimpleGetText - * - * gets the text for the first item in the pidl (eg. simple pidl) - * - * returns the length of the string - */ -DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize) -{ - DWORD dwReturn=0; - LPSTR szSrc; - LPWSTR szSrcW; - GUID const * riid; - char szTemp[MAX_PATH]; - - TRACE("(%p %p %x)\n",pidl,szOut,uOutSize); - - if (!pidl) - return 0; - - if (szOut) - *szOut = 0; - - if (_ILIsDesktop(pidl)) - { - /* desktop */ - if (HCR_GetClassNameA(&CLSID_ShellDesktop, szTemp, MAX_PATH)) - { - if (szOut) - lstrcpynA(szOut, szTemp, uOutSize); - - dwReturn = strlen (szTemp); - } - } - else if (( szSrc = _ILGetTextPointer(pidl) )) - { - /* filesystem */ - if (szOut) - lstrcpynA(szOut, szSrc, uOutSize); - - dwReturn = strlen(szSrc); - } - else if (( szSrcW = _ILGetTextPointerW(pidl) )) - { - /* unicode filesystem */ - WideCharToMultiByte(CP_ACP,0,szSrcW, -1, szTemp, MAX_PATH, NULL, NULL); - - if (szOut) - lstrcpynA(szOut, szTemp, uOutSize); - - dwReturn = strlen (szTemp); - } - else if (( riid = _ILGetGUIDPointer(pidl) )) - { - /* special folder */ - if ( HCR_GetClassNameA(riid, szTemp, MAX_PATH) ) - { - if (szOut) - lstrcpynA(szOut, szTemp, uOutSize); - - dwReturn = strlen (szTemp); - } - } - else - { - ERR("-- no text\n"); - } - - TRACE("-- (%p=%s 0x%08x)\n",szOut,debugstr_a(szOut),dwReturn); - return dwReturn; -} - - /************************************************************************** +/************************************************************************** * _ILSimpleGetTextW * * gets the text for the first item in the pidl (eg. simple pidl) @@ -2171,7 +2097,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize) if (_ILIsDesktop(pidl)) { /* desktop */ - if (HCR_GetClassNameW(&CLSID_ShellDesktop, szTemp, MAX_PATH)) + if (HCR_GetClassNameW(&CLSID_ShellDesktop, szTemp, _countof(szTemp))) { if (szOut) lstrcpynW(szOut, szTemp, uOutSize); @@ -2190,7 +2116,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize) else if (( szSrc = _ILGetTextPointer(pidl) )) { /* filesystem */ - MultiByteToWideChar(CP_ACP, 0, szSrc, -1, szTemp, MAX_PATH); + MultiByteToWideChar(CP_ACP, 0, szSrc, -1, szTemp, _countof(szTemp)); if (szOut) lstrcpynW(szOut, szTemp, uOutSize); @@ -2200,7 +2126,7 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize) else if (( riid = _ILGetGUIDPointer(pidl) )) { /* special folder */ - if ( HCR_GetClassNameW(riid, szTemp, MAX_PATH) ) + if ( HCR_GetClassNameW(riid, szTemp, _countof(szTemp))) { if (szOut) lstrcpynW(szOut, szTemp, uOutSize); @@ -2460,7 +2386,7 @@ BOOL _ILGetFileDateTime(LPCITEMIDLIST pidl, FILETIME *pFt) return TRUE; } -BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) +BOOL _ILGetFileDate(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) { FILETIME ft,lft; SYSTEMTIME time; @@ -2471,17 +2397,17 @@ BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) FileTimeToLocalFileTime(&ft, &lft); FileTimeToSystemTime (&lft, &time); - ret = GetDateFormatA(LOCALE_USER_DEFAULT,DATE_SHORTDATE,&time, NULL, pOut, uOutSize); - if (ret) + ret = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, pOut, uOutSize); + if (ret) { /* Append space + time without seconds */ - pOut[ret-1] = ' '; - GetTimeFormatA(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &time, NULL, &pOut[ret], uOutSize - ret); + pOut[ret - 1] = L' '; + GetTimeFormatW(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &time, NULL, &pOut[ret], uOutSize - ret); } } else { - pOut[0] = '\0'; + pOut[0] = UNICODE_NULL; ret = FALSE; } return ret; @@ -2504,7 +2430,7 @@ BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) * pOut can be null when no string is needed * */ -DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) +DWORD _ILGetFileSize(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) { LPPIDLDATA pdata = _ILGetDataPointer(pidl); DWORD dwSize; @@ -2517,19 +2443,19 @@ DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) case PT_VALUE: dwSize = pdata->u.file.dwFileSize; if (pOut) - StrFormatKBSizeA(dwSize, pOut, uOutSize); + StrFormatKBSizeW(dwSize, pOut, uOutSize); return dwSize; } if (pOut) - *pOut = 0x00; + *pOut = UNICODE_NULL; return 0; } -BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) +BOOL _ILGetExtension(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) { - char szTemp[MAX_PATH]; - const char * pPoint; - LPCITEMIDLIST pidlTemp=pidl; + WCHAR szTemp[MAX_PATH]; + LPCWSTR pPoint; + LPCITEMIDLIST pidlTemp = pidl; TRACE("pidl=%p\n",pidl); @@ -2540,17 +2466,17 @@ BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) if (!_ILIsValue(pidlTemp)) return FALSE; - if (!_ILSimpleGetText(pidlTemp, szTemp, MAX_PATH)) + if (!_ILSimpleGetTextW(pidlTemp, szTemp, _countof(szTemp))) return FALSE; - pPoint = PathFindExtensionA(szTemp); + pPoint = PathFindExtensionW(szTemp); if (!*pPoint) return FALSE; pPoint++; - lstrcpynA(pOut, pPoint, uOutSize); - TRACE("%s\n",pOut); + lstrcpynW(pOut, pPoint, uOutSize); + TRACE("%s\n", debugstr_w(pOut)); return TRUE; } @@ -2571,60 +2497,41 @@ BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) * NOTES * This function copies as much as possible into the buffer. */ -void _ILGetFileType(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) +void _ILGetFileType(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) { -#ifdef __REACTOS__ /* r32966 */ - char sType[64]; -#endif + WCHAR sType[64], sTemp[64]; if(_ILIsValue(pidl)) { - char sTemp[64]; - if(uOutSize > 0) pOut[0] = 0; -#ifdef __REACTOS__ /* r32966 */ - if (_ILGetExtension (pidl, sType, 64)) + if (_ILGetExtension(pidl, sType, _countof(sType))) { - if (HCR_MapTypeToValueA(sType, sTemp, 64, TRUE)) + if (HCR_MapTypeToValueW(sType, sTemp, _countof(sTemp), TRUE)) { /* retrieve description */ - if(HCR_MapTypeToValueA(sTemp, pOut, uOutSize, FALSE )) + if (HCR_MapTypeToValueW(sTemp, pOut, uOutSize, FALSE)) return; } + /* display Ext-file as description */ - _strupr(sType); + CharUpperW(sType); /* load localized file string */ - sTemp[0] = '\0'; - if(LoadStringA(shell32_hInstance, IDS_ANY_FILE, sTemp, 64)) + sTemp[0] = UNICODE_NULL; + if (LoadStringW(shell32_hInstance, IDS_ANY_FILE, sTemp, _countof(sTemp))) { - sTemp[63] = '\0'; - StringCchPrintfA(pOut, uOutSize, sTemp, sType); + sTemp[_countof(sTemp) - 1] = UNICODE_NULL; + StringCchPrintfW(pOut, uOutSize, sTemp, sType); } } -#else - if (_ILGetExtension (pidl, sTemp, 64)) - { - if (!( HCR_MapTypeToValueA(sTemp, sTemp, 64, TRUE) - && HCR_MapTypeToValueA(sTemp, pOut, uOutSize, FALSE ))) - { - lstrcpynA (pOut, sTemp, uOutSize - 6); - strcat (pOut, "-file"); - } - } -#endif } else -#ifdef __REACTOS__ /* r32966 */ { - pOut[0] = '\0'; - LoadStringA(shell32_hInstance, IDS_DIRECTORY, pOut, uOutSize); + pOut[0] = UNICODE_NULL; + LoadStringW(shell32_hInstance, IDS_DIRECTORY, pOut, uOutSize); /* make sure its null terminated */ - pOut[uOutSize-1] = '\0'; + pOut[uOutSize - 1] = UNICODE_NULL; } -#else - lstrcpynA(pOut, "Folder", uOutSize); -#endif } /************************************************************************* @@ -2644,7 +2551,7 @@ void _ILGetFileType(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) * return value 0 in case of error is a valid return value * */ -DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) +DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) { LPPIDLDATA pData = _ILGetDataPointer(pidl); WORD wAttrib = 0; @@ -2665,16 +2572,16 @@ DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) { i=0; if(wAttrib & FILE_ATTRIBUTE_READONLY) - pOut[i++] = 'R'; + pOut[i++] = L'R'; if(wAttrib & FILE_ATTRIBUTE_HIDDEN) - pOut[i++] = 'H'; + pOut[i++] = L'H'; if(wAttrib & FILE_ATTRIBUTE_SYSTEM) - pOut[i++] = 'S'; + pOut[i++] = L'S'; if(wAttrib & FILE_ATTRIBUTE_ARCHIVE) - pOut[i++] = 'A'; + pOut[i++] = L'A'; if(wAttrib & FILE_ATTRIBUTE_COMPRESSED) - pOut[i++] = 'C'; - pOut[i] = 0x00; + pOut[i++] = L'C'; + pOut[i] = UNICODE_NULL; } return wAttrib; } diff --git a/dll/win32/shell32/wine/pidl.h b/dll/win32/shell32/wine/pidl.h index e6e0bd6425e..b25481bd6c8 100644 --- a/dll/win32/shell32/wine/pidl.h +++ b/dll/win32/shell32/wine/pidl.h @@ -218,16 +218,14 @@ typedef struct tagPIDLDATA /* * getting special values from simple pidls */ -DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; -DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; -BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; -DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; -BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; -void _ILGetFileType (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; -DWORD _ILGetFileAttributes (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; - -BOOL _ILGetFileDateTime (LPCITEMIDLIST pidl, FILETIME *ft) DECLSPEC_HIDDEN; -DWORD _ILGetDrive (LPCITEMIDLIST, LPSTR, UINT) DECLSPEC_HIDDEN; +DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; +BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; +DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; +BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; +void _ILGetFileType (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; +DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; +BOOL _ILGetFileDateTime (LPCITEMIDLIST pidl, FILETIME *ft) DECLSPEC_HIDDEN; +DWORD _ILGetDrive (LPCITEMIDLIST, LPWSTR, UINT) DECLSPEC_HIDDEN; /* * testing simple pidls diff --git a/dll/win32/shell32/wine/shell32_main.c b/dll/win32/shell32/wine/shell32_main.c index 3ab985c0740..6f50815036b 100644 --- a/dll/win32/shell32/wine/shell32_main.c +++ b/dll/win32/shell32/wine/shell32_main.c @@ -382,19 +382,19 @@ static DWORD shgfi_get_exe_type(LPCWSTR szFullPath) */ BOOL SHELL_IsShortcut(LPCITEMIDLIST pidlLast) { - char szTemp[MAX_PATH]; + WCHAR szTemp[MAX_PATH]; HKEY keyCls; BOOL ret = FALSE; - if (_ILGetExtension(pidlLast, szTemp, MAX_PATH) && - HCR_MapTypeToValueA(szTemp, szTemp, MAX_PATH, TRUE)) + if (_ILGetExtension(pidlLast, szTemp, _countof(szTemp)) && + HCR_MapTypeToValueW(szTemp, szTemp, _countof(szTemp), TRUE)) { - if (ERROR_SUCCESS == RegOpenKeyExA(HKEY_CLASSES_ROOT, szTemp, 0, KEY_QUERY_VALUE, &keyCls)) + if (ERROR_SUCCESS == RegOpenKeyExW(HKEY_CLASSES_ROOT, szTemp, 0, KEY_QUERY_VALUE, &keyCls)) { - if (ERROR_SUCCESS == RegQueryValueExA(keyCls, "IsShortcut", NULL, NULL, NULL, NULL)) - ret = TRUE; + if (ERROR_SUCCESS == RegQueryValueExW(keyCls, L"IsShortcut", NULL, NULL, NULL, NULL)) + ret = TRUE; - RegCloseKey(keyCls); + RegCloseKey(keyCls); } } @@ -560,10 +560,7 @@ DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes, { if (!(flags & SHGFI_USEFILEATTRIBUTES) || (flags & SHGFI_PIDL)) { - char ftype[80]; - - _ILGetFileType(pidlLast, ftype, 80); - MultiByteToWideChar(CP_ACP, 0, ftype, -1, psfi->szTypeName, 80 ); + _ILGetFileType(pidlLast, psfi->szTypeName, _countof(psfi->szTypeName)); } else {