reactos/lib/shell32
diff -u -r1.4 -r1.5
--- iconcache.c 16 Feb 2004 21:46:12 -0000 1.4
+++ iconcache.c 22 Mar 2004 21:40:12 -0000 1.5
@@ -53,7 +53,7 @@
typedef struct
{
- LPSTR sSourceFile; /* file (not path!) containing the icon */
+ LPWSTR sSourceFile; /* file (not path!) containing the icon */
DWORD dwSourceIndex; /* index within the file, if it is a resoure ID it will be negated */
DWORD dwListIndex; /* index within the iconlist */
DWORD dwFlags; /* GIL_* flags */
@@ -83,7 +83,7 @@
if (((LPSIC_ENTRY)p1)->dwSourceIndex != ((LPSIC_ENTRY)p2)->dwSourceIndex) /* first the faster one*/
return 1;
- if (strcasecmp(((LPSIC_ENTRY)p1)->sSourceFile,((LPSIC_ENTRY)p2)->sSourceFile))
+ if (strcmpiW(((LPSIC_ENTRY)p1)->sSourceFile,((LPSIC_ENTRY)p2)->sSourceFile))
return 1;
return 0;
@@ -94,17 +94,17 @@
* NOTES
* appends an icon pair to the end of the cache
*/
-static INT SIC_IconAppend (LPCSTR sSourceFile, INT dwSourceIndex, HICON hSmallIcon, HICON hBigIcon)
+static INT SIC_IconAppend (LPCWSTR sSourceFile, INT dwSourceIndex, HICON hSmallIcon, HICON hBigIcon)
{ LPSIC_ENTRY lpsice;
INT ret, index, index1;
- char path[MAX_PATH];
- TRACE("%s %i %p %p\n", sSourceFile, dwSourceIndex, hSmallIcon ,hBigIcon);
+ WCHAR path[MAX_PATH];
+ TRACE("%s %i %p %p\n", debugstr_w(sSourceFile), dwSourceIndex, hSmallIcon ,hBigIcon);
lpsice = (LPSIC_ENTRY) SHAlloc (sizeof (SIC_ENTRY));
- GetFullPathNameA(sSourceFile, MAX_PATH, path, NULL);
- lpsice->sSourceFile = HeapAlloc( GetProcessHeap(), 0, strlen(path)+1 );
- strcpy( lpsice->sSourceFile, path );
+ GetFullPathNameW(sSourceFile, MAX_PATH, path, NULL);
+ lpsice->sSourceFile = HeapAlloc( GetProcessHeap(), 0, (strlenW(path)+1)*sizeof(WCHAR) );
+ strcpyW( lpsice->sSourceFile, path );
lpsice->dwSourceIndex = dwSourceIndex;
@@ -139,30 +139,30 @@
* NOTES
* gets small/big icon by number from a file
*/
-static INT SIC_LoadIcon (LPCSTR sSourceFile, INT dwSourceIndex)
+static INT SIC_LoadIcon (LPCWSTR sSourceFile, INT dwSourceIndex)
{ HICON hiconLarge=0;
HICON hiconSmall=0;
#if defined(__CYGWIN__) || defined (__MINGW32__) || defined(_MSC_VER)
- static UINT (WINAPI*PrivateExtractIconExA)(LPCSTR,int,HICON*,HICON*,UINT) = NULL;
+ static UINT (WINAPI*PrivateExtractIconExW)(LPCWSTR,int,HICON*,HICON*,UINT) = NULL;
- if (!PrivateExtractIconExA) {
+ if (!PrivateExtractIconExW) {
HMODULE hUser32 = GetModuleHandleA("user32");
- PrivateExtractIconExA = (UINT(WINAPI*)(LPCSTR,int,HICON*,HICON*,UINT)) GetProcAddress(hUser32, "PrivateExtractIconExA");
+ PrivateExtractIconExW = (UINT(WINAPI*)(LPCWSTR,int,HICON*,HICON*,UINT)) GetProcAddress(hUser32, "PrivateExtractIconExW");
}
- if (PrivateExtractIconExA)
- PrivateExtractIconExA(sSourceFile, dwSourceIndex, &hiconLarge, &hiconSmall, 1);
+ if (PrivateExtractIconExW)
+ PrivateExtractIconExW(sSourceFile, dwSourceIndex, &hiconLarge, &hiconSmall, 1);
else
#endif
{
- PrivateExtractIconsA(sSourceFile, dwSourceIndex, 32, 32, &hiconLarge, NULL, 1, 0);
- PrivateExtractIconsA(sSourceFile, dwSourceIndex, 16, 16, &hiconSmall, NULL, 1, 0);
+ PrivateExtractIconsW(sSourceFile, dwSourceIndex, 32, 32, &hiconLarge, NULL, 1, 0);
+ PrivateExtractIconsW(sSourceFile, dwSourceIndex, 16, 16, &hiconSmall, NULL, 1, 0);
}
if ( !hiconLarge || !hiconSmall)
{
- WARN("failure loading icon %i from %s (%p %p)\n", dwSourceIndex, sSourceFile, hiconLarge, hiconSmall);
+ WARN("failure loading icon %i from %s (%p %p)\n", dwSourceIndex, debugstr_w(sSourceFile), hiconLarge, hiconSmall);
return -1;
}
return SIC_IconAppend (sSourceFile, dwSourceIndex, hiconSmall, hiconLarge);
@@ -178,14 +178,15 @@
* look in the cache for a proper icon. if not available the icon is taken
* from the file and cached
*/
-INT SIC_GetIconIndex (LPCSTR sSourceFile, INT dwSourceIndex )
-{ SIC_ENTRY sice;
+INT SIC_GetIconIndex (LPCWSTR sSourceFile, INT dwSourceIndex )
+{
+ SIC_ENTRY sice;
INT ret, index = INVALID_INDEX;
- char path[MAX_PATH];
+ WCHAR path[MAX_PATH];
- TRACE("%s %i\n", sSourceFile, dwSourceIndex);
+ TRACE("%s %i\n", debugstr_w(sSourceFile), dwSourceIndex);
- GetFullPathNameA(sSourceFile, MAX_PATH, path, NULL);
+ GetFullPathNameW(sSourceFile, MAX_PATH, path, NULL);
sice.sSourceFile = path;
sice.dwSourceIndex = dwSourceIndex;
@@ -216,10 +217,10 @@
* NOTES
* retrieves the specified icon from the iconcache.
*/
-static HICON WINE_UNUSED SIC_GetIcon (LPCSTR sSourceFile, INT dwSourceIndex, BOOL bSmallIcon )
+static HICON WINE_UNUSED SIC_GetIcon (LPCWSTR sSourceFile, INT dwSourceIndex, BOOL bSmallIcon )
{ INT index;
- TRACE("%s %i\n", sSourceFile, dwSourceIndex);
+ TRACE("%s %i\n", debugstr_w(sSourceFile), dwSourceIndex);
index = SIC_GetIconIndex(sSourceFile, dwSourceIndex);
@@ -280,7 +281,7 @@
hSm = LoadImageA(shell32_hInstance, MAKEINTRESOURCEA(1), IMAGE_ICON, cx_small, cy_small, LR_SHARED);
hLg = LoadImageA(shell32_hInstance, MAKEINTRESOURCEA(1), IMAGE_ICON, cx_large, cy_large, LR_SHARED);
}
- SIC_IconAppend (sShell32Name, index, hSm, hLg);
+ SIC_IconAppend (swShell32Name, index, hSm, hLg);
}
TRACE("hIconSmall=%p hIconBig=%p\n",ShellSmallIconList, ShellBigIconList);
@@ -349,22 +350,22 @@
UINT uFlags,
int * pIndex)
{
- IExtractIconA *ei;
- char szIconFile[MAX_PATH]; /* file containing the icon */
+ IExtractIconW *ei;
+ WCHAR szIconFile[MAX_PATH]; /* file containing the icon */
INT iSourceIndex; /* index or resID(negated) in this file */
BOOL ret = FALSE;
UINT dwFlags = 0;
TRACE("sf=%p pidl=%p %s\n", sh, pidl, bBigIcon?"Big":"Small");
- if (SUCCEEDED (IShellFolder_GetUIObjectOf(sh, 0, 1, &pidl, &IID_IExtractIconA, 0, (void **)&ei)))
+ if (SUCCEEDED (IShellFolder_GetUIObjectOf(sh, 0, 1, &pidl, &IID_IExtractIconW, 0, (void **)&ei)))
{
- if (SUCCEEDED(IExtractIconA_GetIconLocation(ei, uFlags, szIconFile, MAX_PATH, &iSourceIndex, &dwFlags)))
+ if (SUCCEEDED(IExtractIconW_GetIconLocation(ei, uFlags, szIconFile, MAX_PATH, &iSourceIndex, &dwFlags)))
{
*pIndex = SIC_GetIconIndex(szIconFile, iSourceIndex);
ret = TRUE;
}
- IExtractIconA_Release(ei);
+ IExtractIconW_Release(ei);
}
if (INVALID_INDEX == *pIndex) /* default icon when failed */
@@ -408,19 +409,27 @@
*/
INT WINAPI Shell_GetCachedImageIndexA(LPCSTR szPath, INT nIndex, BOOL bSimulateDoc)
{
+ INT ret, len;
+ LPWSTR szTemp;
+
WARN("(%s,%08x,%08x) semi-stub.\n",debugstr_a(szPath), nIndex, bSimulateDoc);
- return SIC_GetIconIndex(szPath, nIndex);
+
+ len = MultiByteToWideChar( CP_ACP, 0, szPath, -1, NULL, 0 );
+ szTemp = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) );
+ MultiByteToWideChar( CP_ACP, 0, szPath, -1, szTemp, len );
+
+ ret = SIC_GetIconIndex( szTemp, nIndex );
+
+ HeapFree( GetProcessHeap(), 0, szTemp );
+
+ return ret;
}
INT WINAPI Shell_GetCachedImageIndexW(LPCWSTR szPath, INT nIndex, BOOL bSimulateDoc)
-{ INT ret;
- LPSTR sTemp = HEAP_strdupWtoA (GetProcessHeap(),0,szPath);
-
+{
WARN("(%s,%08x,%08x) semi-stub.\n",debugstr_w(szPath), nIndex, bSimulateDoc);
- ret = SIC_GetIconIndex(sTemp, nIndex);
- HeapFree(GetProcessHeap(),0,sTemp);
- return ret;
+ return SIC_GetIconIndex(szPath, nIndex);
}
INT WINAPI Shell_GetCachedImageIndexAW(LPCVOID szPath, INT nIndex, BOOL bSimulateDoc)
reactos/lib/shell32
diff -u -r1.4 -r1.5
--- shell32_main.c 16 Mar 2004 10:07:38 -0000 1.4
+++ shell32_main.c 22 Mar 2004 21:40:12 -0000 1.5
@@ -208,21 +208,21 @@
*
*/
-DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes,
- SHFILEINFOA *psfi, UINT sizeofpsfi,
+DWORD WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes,
+ SHFILEINFOW *psfi, UINT sizeofpsfi,
UINT flags )
{
- char szLocation[MAX_PATH], szFullPath[MAX_PATH];
+ WCHAR szLocation[MAX_PATH], szFullPath[MAX_PATH];
int iIndex;
DWORD ret = TRUE, dwAttributes = 0;
IShellFolder * psfParent = NULL;
- IExtractIconA * pei = NULL;
+ IExtractIconW * pei = NULL;
LPITEMIDLIST pidlLast = NULL, pidl = NULL;
HRESULT hr = S_OK;
BOOL IconNotYetLoaded=TRUE;
TRACE("(%s fattr=0x%lx sfi=%p(attr=0x%08lx) size=0x%x flags=0x%x)\n",
- (flags & SHGFI_PIDL)? "pidl" : path, dwFileAttributes, psfi, psfi->dwAttributes, sizeofpsfi, flags);
+ (flags & SHGFI_PIDL)? "pidl" : debugstr_w(path), dwFileAttributes, psfi, psfi->dwAttributes, sizeofpsfi, flags);
if ((flags & SHGFI_USEFILEATTRIBUTES) && (flags & (SHGFI_ATTRIBUTES|SHGFI_EXETYPE|SHGFI_PIDL)))
return FALSE;
@@ -236,11 +236,11 @@
if (!(flags & SHGFI_PIDL)){
/* SHGitFileInfo should work with absolute and relative paths */
- if (PathIsRelativeA(path)){
- GetCurrentDirectoryA(MAX_PATH, szLocation);
- PathCombineA(szFullPath, szLocation, path);
+ if (PathIsRelativeW(path)){
+ GetCurrentDirectoryW(MAX_PATH, szLocation);
+ PathCombineW(szFullPath, szLocation, path);
} else {
- lstrcpynA(szFullPath, path, MAX_PATH);
+ lstrcpynW(szFullPath, path, MAX_PATH);
}
}
@@ -255,12 +255,12 @@
if (flags != SHGFI_EXETYPE) return 0;
- status = GetBinaryTypeA (szFullPath, &BinaryType);
+ status = GetBinaryTypeW (szFullPath, &BinaryType);
if (!status) return 0;
if ((BinaryType == SCS_DOS_BINARY)
|| (BinaryType == SCS_PIF_BINARY)) return 0x4d5a;
- hfile = CreateFileA( szFullPath, GENERIC_READ, FILE_SHARE_READ,
+ hfile = CreateFileW( szFullPath, GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, 0, 0 );
if ( hfile == INVALID_HANDLE_VALUE ) return 0;
@@ -313,7 +313,7 @@
if (flags & SHGFI_PIDL) {
pidl = ILClone((LPCITEMIDLIST)path);
} else if (!(flags & SHGFI_USEFILEATTRIBUTES)) {
- hr = SHILCreateFromPathA(szFullPath, &pidl, &dwAttributes);
+ hr = SHILCreateFromPathW(szFullPath, &pidl, &dwAttributes);
}
if ((flags & SHGFI_PIDL) || !(flags & SHGFI_USEFILEATTRIBUTES))
@@ -343,34 +343,40 @@
{
if (flags & SHGFI_USEFILEATTRIBUTES)
{
- strcpy (psfi->szDisplayName, PathFindFileNameA(szFullPath));
+ lstrcpyW (psfi->szDisplayName, PathFindFileNameW(szFullPath));
}
else
{
STRRET str;
hr = IShellFolder_GetDisplayNameOf(psfParent, pidlLast, SHGDN_INFOLDER, &str);
- StrRetToStrNA (psfi->szDisplayName, MAX_PATH, &str, pidlLast);
+ StrRetToStrNW (psfi->szDisplayName, MAX_PATH, &str, pidlLast);
}
}
/* get the type name */
if (SUCCEEDED(hr) && (flags & SHGFI_TYPENAME))
{
+ WCHAR szFile[] = { 'F','i','l','e',0 };
+ WCHAR szDashFile[] = { '-','f','i','l','e',0 };
if (!(flags & SHGFI_USEFILEATTRIBUTES))
- _ILGetFileType(pidlLast, psfi->szTypeName, 80);
+ {
+ char ftype[80];
+ _ILGetFileType(pidlLast, ftype, 80);
+ MultiByteToWideChar(CP_ACP, 0, ftype, -1, psfi->szTypeName, 80 );
+ }
else
{
if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- strcat (psfi->szTypeName, "File");
+ strcatW (psfi->szTypeName, szFile);
else
{
- char sTemp[64];
- strcpy(sTemp,PathFindExtensionA(szFullPath));
- if (!( HCR_MapTypeToValueA(sTemp, sTemp, 64, TRUE)
- && HCR_MapTypeToValueA(sTemp, psfi->szTypeName, 80, FALSE )))
+ WCHAR sTemp[64];
+ lstrcpyW(sTemp,PathFindExtensionW(szFullPath));
+ if (!( HCR_MapTypeToValueW(sTemp, sTemp, 64, TRUE)
+ && HCR_MapTypeToValueW(sTemp, psfi->szTypeName, 80, FALSE )))
{
- lstrcpynA (psfi->szTypeName, sTemp, 64);
- strcat (psfi->szTypeName, "-file");
+ lstrcpynW (psfi->szTypeName, sTemp, 64);
+ strcatW (psfi->szTypeName, szDashFile);
}
}
}
@@ -394,11 +400,11 @@
if (SUCCEEDED(hr))
{
- hr = IExtractIconA_GetIconLocation(pei, (flags & SHGFI_OPENICON)? GIL_OPENICON : 0,szLocation, MAX_PATH, &iIndex, &uFlags);
+ hr = IExtractIconW_GetIconLocation(pei, (flags & SHGFI_OPENICON)? GIL_OPENICON : 0,szLocation, MAX_PATH, &iIndex, &uFlags);
psfi->iIcon = iIndex;
if(uFlags != GIL_NOTFILENAME)
- strcpy (psfi->szDisplayName, szLocation);
+ lstrcpyW (psfi->szDisplayName, szLocation);
else
ret = FALSE;
@@ -412,23 +418,24 @@
if (flags & SHGFI_USEFILEATTRIBUTES)
{
- char sTemp [MAX_PATH];
- char * szExt;
+ WCHAR sTemp [MAX_PATH];
+ WCHAR * szExt;
DWORD dwNr=0;
- lstrcpynA(sTemp, szFullPath, MAX_PATH);
+ lstrcpynW(sTemp, szFullPath, MAX_PATH);
if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
psfi->iIcon = 2;
else
{
+ WCHAR p1W[] = {'%','1',0};
psfi->iIcon = 0;
- szExt = (LPSTR) PathFindExtensionA(sTemp);
- if ( szExt && HCR_MapTypeToValueA(szExt, sTemp, MAX_PATH, TRUE)
- && HCR_GetDefaultIconA(sTemp, sTemp, MAX_PATH, &dwNr))
+ szExt = (LPWSTR) PathFindExtensionW(sTemp);
+ if ( szExt && HCR_MapTypeToValueW(szExt, sTemp, MAX_PATH, TRUE)
+ && HCR_GetDefaultIconW(sTemp, sTemp, MAX_PATH, &dwNr))
{
- if (!strcmp("%1",sTemp)) /* icon is in the file */
- strcpy(sTemp, szFullPath);
+ if (!lstrcmpW(p1W,sTemp)) /* icon is in the file */
+ strcpyW(sTemp, szFullPath);
if (flags & SHGFI_SYSICONINDEX)
{
@@ -438,7 +445,7 @@
else
{
IconNotYetLoaded=FALSE;
- PrivateExtractIconsA(sTemp,dwNr,(flags & SHGFI_SMALLICON) ?
+ PrivateExtractIconsW(sTemp,dwNr,(flags & SHGFI_SMALLICON) ?
GetSystemMetrics(SM_CXSMICON) : GetSystemMetrics(SM_CXICON),
(flags & SHGFI_SMALLICON) ? GetSystemMetrics(SM_CYSMICON) :
GetSystemMetrics(SM_CYICON), &psfi->hIcon,0,1,0);
@@ -477,7 +484,7 @@
if(pidlLast) SHFree(pidlLast);
#ifdef MORE_DEBUG
TRACE ("icon=%p index=0x%08x attr=0x%08lx name=%s type=%s ret=0x%08lx\n",
- psfi->hIcon, psfi->iIcon, psfi->dwAttributes, psfi->szDisplayName, psfi->szTypeName, ret);
+ psfi->hIcon, psfi->iIcon, psfi->dwAttributes, debugstr_w(psfi->szDisplayName), debugstr_w(psfi->szTypeName), ret);
#endif
return ret;
}
@@ -486,28 +493,28 @@
* SHGetFileInfoW [SHELL32.@]
*/
-DWORD WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes,
- SHFILEINFOW *psfi, UINT sizeofpsfi,
+DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes,
+ SHFILEINFOA *psfi, UINT sizeofpsfi,
UINT flags )
{
INT len;
- LPSTR temppath;
+ LPWSTR temppath;
DWORD ret;
- SHFILEINFOA temppsfi;
+ SHFILEINFOW temppsfi;
if (flags & SHGFI_PIDL) {
/* path contains a pidl */
- temppath = (LPSTR) path;
+ temppath = (LPWSTR) path;
} else {
- len = WideCharToMultiByte(CP_ACP, 0, path, -1, NULL, 0, NULL, NULL);
- temppath = HeapAlloc(GetProcessHeap(), 0, len);
- WideCharToMultiByte(CP_ACP, 0, path, -1, temppath, len, NULL, NULL);
+ len = MultiByteToWideChar(CP_ACP, 0, path, -1, NULL, 0);
+ temppath = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR));
+ MultiByteToWideChar(CP_ACP, 0, path, -1, temppath, len);
}
if(psfi && (flags & SHGFI_ATTR_SPECIFIED))
temppsfi.dwAttributes=psfi->dwAttributes;
- ret = SHGetFileInfoA(temppath, dwFileAttributes, (psfi == NULL)? NULL : &temppsfi, sizeof(temppsfi), flags);
+ ret = SHGetFileInfoW(temppath, dwFileAttributes, (psfi == NULL)? NULL : &temppsfi, sizeof(temppsfi), flags);
if (psfi)
{
@@ -518,9 +525,9 @@
if(flags & SHGFI_ATTRIBUTES)
psfi->dwAttributes=temppsfi.dwAttributes;
if(flags & (SHGFI_DISPLAYNAME|SHGFI_ICONLOCATION))
- MultiByteToWideChar(CP_ACP, 0, temppsfi.szDisplayName, -1, psfi->szDisplayName, sizeof(psfi->szDisplayName));
+ WideCharToMultiByte(CP_ACP, 0, temppsfi.szDisplayName, -1, psfi->szDisplayName, sizeof(psfi->szDisplayName), NULL, NULL);
if(flags & SHGFI_TYPENAME)
- MultiByteToWideChar(CP_ACP, 0, temppsfi.szTypeName, -1, psfi->szTypeName, sizeof(psfi->szTypeName));
+ WideCharToMultiByte(CP_ACP, 0, temppsfi.szTypeName, -1, psfi->szTypeName, sizeof(psfi->szTypeName), NULL, NULL);
}
if(!(flags & SHGFI_PIDL)) HeapFree(GetProcessHeap(), 0, temppath);
return ret;
@@ -916,7 +923,6 @@
/* get full path to this DLL for IExtractIconW_fnGetIconLocation() */
GetModuleFileNameW(hinstDLL, swShell32Name, MAX_PATH);
- WideCharToMultiByte(CP_ACP, 0, swShell32Name, -1, sShell32Name, MAX_PATH, NULL, NULL);
InitCommonControlsEx(NULL);