diff --git a/dlls/shell32/shfldr_mycomp.c b/dlls/shell32/shfldr_mycomp.c index 4c76ebcadb..0a97a20449 100644 --- a/dlls/shell32/shfldr_mycomp.c +++ b/dlls/shell32/shfldr_mycomp.c @@ -535,9 +535,7 @@ static HRESULT WINAPI ISF_MyComputer_fnGetDisplayNameOf (IShellFolder2 *iface, { IGenericSFImpl *This = (IGenericSFImpl *)iface; - char szPath[MAX_PATH], szDrive[18]; - int len = 0; - BOOL bSimplePidl; + char szPath[MAX_PATH]; HRESULT hr = S_OK; TRACE ("(%p)->(pidl=%p,0x%08lx,%p)\n", This, pidl, dwFlags, strRet); @@ -547,9 +545,6 @@ static HRESULT WINAPI ISF_MyComputer_fnGetDisplayNameOf (IShellFolder2 *iface, return E_INVALIDARG; szPath[0] = 0x00; - szDrive[0] = 0x00; - - bSimplePidl = _ILIsPidlSimple (pidl); if (!pidl->mkid.cb) { @@ -557,10 +552,10 @@ static HRESULT WINAPI ISF_MyComputer_fnGetDisplayNameOf (IShellFolder2 *iface, lstrcpyA (szPath, "::"); SHELL32_GUIDToStringA(&CLSID_MyComputer, &szPath[2]); } - else if (_ILIsSpecialFolder (pidl)) + else if (_ILIsPidlSimple(pidl)) { /* take names of special folders only if its only this folder */ - if (bSimplePidl) + if (_ILIsSpecialFolder(pidl)) { GUID const *clsid; @@ -634,42 +629,37 @@ static HRESULT WINAPI ISF_MyComputer_fnGetDisplayNameOf (IShellFolder2 *iface, _ILSimpleGetText (pidl, szPath, MAX_PATH); } } - else - FIXME ("special folder\n"); + else if (_ILIsDrive(pidl)) + { + _ILSimpleGetText (pidl, szPath, MAX_PATH); /* append my own path */ + + /* long view "lw_name (C:)" */ + if (!(dwFlags & SHGDN_FORPARSING)) + { + DWORD dwVolumeSerialNumber, dwMaximumComponetLength, dwFileSystemFlags; + char szDrive[18] = ""; + + GetVolumeInformationA (szPath, szDrive, sizeof (szDrive) - 6, + &dwVolumeSerialNumber, + &dwMaximumComponetLength, &dwFileSystemFlags, NULL, 0); + strcat (szDrive, " ("); + strncat (szDrive, szPath, 2); + strcat (szDrive, ")"); + strcpy (szPath, szDrive); + } + } + else + { + /* Neither a shell namespace extension nor a drive letter. */ + ERR("Wrong pidl type\n"); + return E_INVALIDARG; + } } else { - if (!_ILIsDrive (pidl)) - { - ERR ("Wrong pidl type\n"); - return E_INVALIDARG; - } - - _ILSimpleGetText (pidl, szPath, MAX_PATH); /* append my own path */ - - /* long view "lw_name (C:)" */ - if (bSimplePidl && !(dwFlags & SHGDN_FORPARSING)) - { - DWORD dwVolumeSerialNumber, dwMaximumComponetLength, dwFileSystemFlags; - - GetVolumeInformationA (szPath, szDrive, sizeof (szDrive) - 6, - &dwVolumeSerialNumber, - &dwMaximumComponetLength, &dwFileSystemFlags, NULL, 0); - strcat (szDrive, " ("); - strncat (szDrive, szPath, 2); - strcat (szDrive, ")"); - strcpy (szPath, szDrive); - } - } - - if (!bSimplePidl) - { - /* go deeper if needed */ - PathAddBackslashA (szPath); - len = strlen (szPath); - - hr = SHELL32_GetDisplayNameOfChild (iface, pidl, - dwFlags | SHGDN_INFOLDER, szPath + len, MAX_PATH - len); + /* Complex pidl. Let the child folder do the work */ + strRet->uType = STRRET_CSTR; + hr = SHELL32_GetDisplayNameOfChild(iface, pidl, dwFlags, szPath, MAX_PATH); } if (SUCCEEDED (hr))