diff --git a/dlls/shell32/pidl.c b/dlls/shell32/pidl.c index 1856c124d95..c3a753a5e70 100644 --- a/dlls/shell32/pidl.c +++ b/dlls/shell32/pidl.c @@ -2408,15 +2408,18 @@ void _ILGetFileType(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) { char sTemp[64]; - if(uOutSize > 0) - pOut[0] = 0; - if (_ILGetExtension (pidl, sTemp, 64)) + /* "name" or "name." or any unhandled => "File" */ + lstrcpynA (pOut, "File", uOutSize); + + /* If there's space for more, try to get a better description. */ + if (uOutSize > 6 && _ILGetExtension (pidl, sTemp, 64)) { if (!( HCR_MapTypeToValueA(sTemp, sTemp, 64, TRUE) - && HCR_MapTypeToValueA(sTemp, pOut, uOutSize, FALSE ))) + && HCR_MapTypeToValueA(sTemp, pOut, uOutSize, FALSE )) + && sTemp[0]) { lstrcpynA (pOut, sTemp, uOutSize - 6); - strcat (pOut, "-file"); + strcat (pOut, " file"); } } } diff --git a/dlls/shell32/shell32_main.c b/dlls/shell32/shell32_main.c index dce18969c58..7e1c7d565c4 100644 --- a/dlls/shell32/shell32_main.c +++ b/dlls/shell32/shell32_main.c @@ -537,8 +537,9 @@ DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes, /* get the type name */ if (SUCCEEDED(hr) && (flags & SHGFI_TYPENAME)) { + static const WCHAR szFolder[] = { 'F','o','l','d','e','r',0 }; static const WCHAR szFile[] = { 'F','i','l','e',0 }; - static const WCHAR szDashFile[] = { '-','f','i','l','e',0 }; + static const WCHAR szSpaceFile[] = { ' ','f','i','l','e',0 }; if (!(flags & SHGFI_USEFILEATTRIBUTES) || (flags & SHGFI_PIDL)) { @@ -550,17 +551,29 @@ DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes, else { if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - strcatW (psfi->szTypeName, szFile); + strcatW (psfi->szTypeName, szFolder); else { WCHAR sTemp[64]; lstrcpyW(sTemp,PathFindExtensionW(szFullPath)); - if (!( HCR_MapTypeToValueW(sTemp, sTemp, 64, TRUE) && + if (sTemp[0] == 0 || (sTemp[0] == '.' && sTemp[1] == 0)) + { + /* "name" or "name." => "File" */ + lstrcpynW (psfi->szTypeName, szFile, 64); + } + else if (!( HCR_MapTypeToValueW(sTemp, sTemp, 64, TRUE) && HCR_MapTypeToValueW(sTemp, psfi->szTypeName, 80, FALSE ))) { - lstrcpynW (psfi->szTypeName, sTemp, 64); - strcatW (psfi->szTypeName, szDashFile); + if (sTemp[0]) + { + lstrcpynW (psfi->szTypeName, sTemp, 64); + strcatW (psfi->szTypeName, szSpaceFile); + } + else + { + lstrcpynW (psfi->szTypeName, szFile, 64); + } } } }