From 7b725d5d8ffd127bf610a2024c3169b2f997447f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Wed, 18 Jan 2017 23:47:38 +0000 Subject: [PATCH] [SHELL32]: Follow-ups to r73579 and r73580: use PathYetAnotherMakeUniqueName. CORE-12684 svn path=/trunk/; revision=73583 --- reactos/dll/win32/shell32/CNewMenu.cpp | 35 +++++++++++--------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/reactos/dll/win32/shell32/CNewMenu.cpp b/reactos/dll/win32/shell32/CNewMenu.cpp index 430bcc55ccb..e8e202e2764 100644 --- a/reactos/dll/win32/shell32/CNewMenu.cpp +++ b/reactos/dll/win32/shell32/CNewMenu.cpp @@ -531,25 +531,20 @@ HRESULT CNewMenu::CreateNewItem(SHELLNEW_ITEM *pItem, LPCMINVOKECOMMANDINFO lpcm case SHELLNEW_TYPE_NULLFILE: { BOOL bSuccess = TRUE; - LPWSTR pwszFilename = NULL; - size_t cchFilenameMax = 0; + WCHAR wszName[MAX_PATH]; + WCHAR wszNewFile[MAX_PATH]; - /* Build new file name */ - LoadStringW(shell32_hInstance, FCIDM_SHVIEW_NEW, wszBuf, _countof(wszBuf)); - // FIXME: PathCchAddBackslashExW(wszPath, _countof(wszPath), &pwszFilename, &cchFilenameMax); - pwszFilename = PathAddBackslashW(wszPath); - cchFilenameMax = _countof(wszBuf) - wcslen(wszPath); - StringCchPrintfW(pwszFilename, cchFilenameMax, L"%s %s%s", wszBuf, pItem->pwszDesc, pItem->pwszExt); + if (!LoadStringW(shell32_hInstance, FCIDM_SHVIEW_NEW, wszBuf, _countof(wszBuf))) + return E_FAIL; - /* Find unique name */ - for (UINT i = 2; PathFileExistsW(wszPath); ++i) - { - StringCchPrintfW(pwszFilename, cchFilenameMax, L"%s %s (%u)%s", wszBuf, pItem->pwszDesc, i, pItem->pwszExt); - TRACE("New Filename %ls\n", pwszFilename); - } + StringCchPrintfW(wszNewFile, _countof(wszNewFile), L"%s %s%s", wszBuf, pItem->pwszDesc, pItem->pwszExt); + + /* Create the name of the new file */ + if (!PathYetAnotherMakeUniqueName(wszName, wszPath, NULL, wszNewFile)) + return E_FAIL; /* Create new file */ - HANDLE hFile = CreateFileW(wszPath, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); + HANDLE hFile = CreateFileW(wszName, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { if (pItem->Type == SHELLNEW_TYPE_DATA) @@ -570,20 +565,20 @@ HRESULT CNewMenu::CreateNewItem(SHELLNEW_ITEM *pItem, LPCMINVOKECOMMANDINFO lpcm if (pItem->Type == SHELLNEW_TYPE_FILENAME) { /* Copy file */ - if (!CopyFileW((LPWSTR)pItem->pData, wszPath, FALSE)) + if (!CopyFileW((LPWSTR)pItem->pData, wszName, FALSE)) ERR("Copy file failed: %ls\n", (LPWSTR)pItem->pData); } /* Show message if we failed */ if (bSuccess) { - TRACE("Notifying fs %s\n", debugstr_w(wszPath)); - SelectNewItem(lpcmi, SHCNE_CREATE, SHCNF_PATHW, wszPath); + TRACE("Notifying fs %s\n", debugstr_w(wszName)); + SelectNewItem(lpcmi, SHCNE_CREATE, SHCNF_PATHW, wszName); } else { - StringCbPrintfW(wszBuf, sizeof(wszBuf), L"Cannot create file: %s", pwszFilename); - MessageBoxW(NULL, wszBuf, L"Cannot create file", MB_OK|MB_ICONERROR); // FIXME + StringCbPrintfW(wszBuf, sizeof(wszBuf), L"Cannot create file: %s", wszName); + MessageBoxW(NULL, wszBuf, L"Cannot create file", MB_OK|MB_ICONERROR); // FIXME load localized error msg } break; }