From 7b597d4c2001598518af458984d22ff9bf0e5b83 Mon Sep 17 00:00:00 2001 From: Mike McCormack Date: Mon, 22 Mar 2004 20:43:07 +0000 Subject: [PATCH] Unicode-ify the icon cache and SHGetFileInfo. --- dlls/shell32/folders.c | 1 - dlls/shell32/iconcache.c | 73 ++++++++++++++++++--------------- dlls/shell32/shell32_main.c | 98 ++++++++++++++++++++++++--------------------- dlls/shell32/shell32_main.h | 3 +- 4 files changed, 94 insertions(+), 81 deletions(-) diff --git a/dlls/shell32/folders.c b/dlls/shell32/folders.c index 837fd1302c5..a4ef4384f2b 100644 --- a/dlls/shell32/folders.c +++ b/dlls/shell32/folders.c @@ -151,7 +151,6 @@ static ULONG WINAPI IExtractIconW_fnRelease(IExtractIconW * iface) } WCHAR swShell32Name[MAX_PATH]; -char sShell32Name[MAX_PATH]; /************************************************************************** * IExtractIconW_GetIconLocation diff --git a/dlls/shell32/iconcache.c b/dlls/shell32/iconcache.c index b3e021c112e..b226f337d51 100644 --- a/dlls/shell32/iconcache.c +++ b/dlls/shell32/iconcache.c @@ -53,7 +53,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell); 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 @@ static INT CALLBACK SIC_CompareEntries( LPVOID p1, LPVOID p2, LPARAM lparam) 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 @@ static INT CALLBACK SIC_CompareEntries( LPVOID p1, LPVOID p2, LPARAM lparam) * 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,16 +139,16 @@ static INT SIC_IconAppend (LPCSTR sSourceFile, INT dwSourceIndex, HICON hSmallIc * 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; - PrivateExtractIconsA( sSourceFile, dwSourceIndex, 32, 32, &hiconLarge, 0, 1, 0 ); - PrivateExtractIconsA( sSourceFile, dwSourceIndex, 16, 16, &hiconSmall, 0, 1, 0 ); + PrivateExtractIconsW( sSourceFile, dwSourceIndex, 32, 32, &hiconLarge, 0, 1, 0 ); + PrivateExtractIconsW( sSourceFile, dwSourceIndex, 16, 16, &hiconSmall, 0, 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); @@ -164,15 +164,16 @@ static INT SIC_LoadIcon (LPCSTR sSourceFile, INT dwSourceIndex) * 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); - sice.sSourceFile = path; + GetFullPathNameW(sSourceFile, MAX_PATH, path, NULL); + sice.sSourceFile = path; sice.dwSourceIndex = dwSourceIndex; EnterCriticalSection(&SHELL32_SicCS); @@ -202,10 +203,10 @@ INT SIC_GetIconIndex (LPCSTR sSourceFile, INT dwSourceIndex ) * NOTES * retrieves the specified icon from the iconcache. if not found tries to load the icon */ -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); @@ -259,7 +260,7 @@ BOOL SIC_Initialize(void) hSm = LoadImageA(shell32_hInstance, MAKEINTRESOURCEA(0), IMAGE_ICON, 16, 16,LR_SHARED); hLg = LoadImageA(shell32_hInstance, MAKEINTRESOURCEA(0), IMAGE_ICON, 32, 32,LR_SHARED); } - SIC_IconAppend (sShell32Name, index, hSm, hLg); + SIC_IconAppend (swShell32Name, index, hSm, hLg); } TRACE("hIconSmall=%p hIconBig=%p\n",ShellSmallIconList, ShellBigIconList); @@ -327,8 +328,8 @@ BOOL PidlToSicIndex ( 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; @@ -337,12 +338,12 @@ BOOL PidlToSicIndex ( if (SUCCEEDED (IShellFolder_GetUIObjectOf(sh, 0, 1, &pidl, &IID_IExtractIconA, 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 */ @@ -383,19 +384,27 @@ int WINAPI SHMapPIDLToSystemImageListIndex( */ 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) diff --git a/dlls/shell32/shell32_main.c b/dlls/shell32/shell32_main.c index 7afba34621a..4f37d2b5dcf 100644 --- a/dlls/shell32/shell32_main.c +++ b/dlls/shell32/shell32_main.c @@ -208,21 +208,21 @@ LPWSTR* WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int* numargs) * */ -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 @@ DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, 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 @@ DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, 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 @@ DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, 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 @@ DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, { 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 @@ DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, 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 @@ DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, 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 @@ DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, 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 @@ DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, 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 @@ DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, * 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 @@ DWORD WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes, 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 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad) /* 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); diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h index 050d2c3e7f7..f0ffae89d82 100644 --- a/dlls/shell32/shell32_main.h +++ b/dlls/shell32/shell32_main.h @@ -53,7 +53,7 @@ BOOL WINAPI Shell_GetImageList(HIMAGELIST * lpBigList, HIMAGELIST * lpSmallList) BOOL SIC_Initialize(void); void SIC_Destroy(void); BOOL PidlToSicIndex (IShellFolder * sh, LPCITEMIDLIST pidl, BOOL bBigIcon, UINT uFlags, int * pIndex); -INT SIC_GetIconIndex (LPCSTR sSourceFile, INT dwSourceIndex ); +INT SIC_GetIconIndex (LPCWSTR sSourceFile, INT dwSourceIndex ); /* Classes Root */ BOOL HCR_MapTypeToValueW(LPCWSTR szExtension, LPWSTR szFileType, DWORD len, BOOL bPrependDot); @@ -234,6 +234,5 @@ typedef UINT (*SHELL_ExecuteW32)(const WCHAR *lpCmd, void *env, BOOL shWait, BOOL WINAPI ShellExecuteExW32(LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfunc); extern WCHAR swShell32Name[MAX_PATH]; -extern char sShell32Name[MAX_PATH]; #endif -- 2.11.4.GIT