Skip to content

Commit

Permalink
[SHELL32] SetNameOf should not append old extension to folders (react…
Browse files Browse the repository at this point in the history
  • Loading branch information
whindsaks committed Jun 8, 2024
1 parent 3f6af8b commit ecb5cae
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 27 deletions.
9 changes: 6 additions & 3 deletions dll/shellext/netshell/shfldr_netconnect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -270,9 +270,12 @@ HRESULT WINAPI CNetworkConnections::SetNameOf (
if (FAILED_UNEXPECTEDLY(hr))
return hr;

*pPidlOut = ILCreateNetConnectItem(pCon);
if (*pPidlOut == NULL)
return E_FAIL;
if (pPidlOut)
{
*pPidlOut = ILCreateNetConnectItem(pCon);
if (*pPidlOut == NULL)
return E_FAIL;
}

return S_OK;
}
Expand Down
38 changes: 16 additions & 22 deletions dll/win32/shell32/folders/CFSFolder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1499,47 +1499,41 @@ HRESULT WINAPI CFSFolder::SetNameOf(
}

/* build source path */
PathCombineW(szSrc, m_sPathTarget, pDataW->wszName);
PathCombineW(szSrc, m_sPathTarget, pDataW->wszName); // FIXME: PIDLs without wide string

/* build destination path */
if (dwFlags == SHGDN_NORMAL || dwFlags & SHGDN_INFOLDER)
PathCombineW(szDest, m_sPathTarget, lpName);
else
lstrcpynW(szDest, lpName, MAX_PATH);

if(!(dwFlags & SHGDN_FORPARSING) && SHELL_FS_HideExtension(szSrc)) {
WCHAR *ext = PathFindExtensionW(szSrc);
if(*ext != '\0') {
INT len = wcslen(szDest);
lstrcpynW(szDest + len, ext, MAX_PATH - len);
}
if (!(dwFlags & SHGDN_FORPARSING) && !bIsFolder && SHELL_FS_HideExtension(szSrc))
{
LPCWSTR ext = PathFindExtensionW(szSrc);
if (*ext)
PathAddExtensionW(szDest, ext);
}

HRESULT hr = S_OK;
TRACE ("src=%s dest=%s\n", debugstr_w(szSrc), debugstr_w(szDest));
if (!wcscmp(szSrc, szDest))
{
/* src and destination is the same */
HRESULT hr = S_OK;
if (pPidlOut)
hr = _ILCreateFromPathW(szDest, pPidlOut);

return hr;
hr = SHILClone(pidl, pPidlOut);
}

if (MoveFileW (szSrc, szDest))
else if (MoveFileW(szSrc, szDest))
{
HRESULT hr = S_OK;

if (pPidlOut)
hr = _ILCreateFromPathW(szDest, pPidlOut);

SHChangeNotify (bIsFolder ? SHCNE_RENAMEFOLDER : SHCNE_RENAMEITEM,
SHCNF_PATHW, szSrc, szDest);
hr = ParseDisplayName(hwndOwner, NULL, PathFindFileNameW(szDest), NULL, pPidlOut, NULL);

return hr;
SHChangeNotify(bIsFolder ? SHCNE_RENAMEFOLDER : SHCNE_RENAMEITEM, SHCNF_PATHW, szSrc, szDest);
}

return E_FAIL;
else
{
hr = HResultFromWin32(GetLastError());
}
return hr;
}

HRESULT WINAPI CFSFolder::GetDefaultSearchGUID(GUID * pguid)
Expand Down
3 changes: 1 addition & 2 deletions dll/win32/shell32/folders/CRegFolder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -772,8 +772,7 @@ HRESULT WINAPI CRegFolder::SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, /*

if (res == ERROR_SUCCESS)
{
*pPidlOut = ILClone(pidl);
return S_OK;
return pPidlOut ? SHILClone(pidl, pPidlOut) : S_OK;
}

return E_FAIL;
Expand Down

0 comments on commit ecb5cae

Please sign in to comment.