mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 13:45:56 +00:00
[SHELL32] Fixed TRASH_CanTrashFile() sending the wrong path string to GetVolumeInformationW() (#635)
Function TRASH_CanTrashFile() would always fail because GetVolumeInformationW() requires only the base root path. The path (stored in buffer wszRootPathName) was not being stripped correctly. CORE-12340
This commit is contained in:
parent
1b1e1baa6e
commit
6a683dc6d8
1 changed files with 11 additions and 5 deletions
|
@ -3,6 +3,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (C) 2006 Mikolaj Zalewski
|
* Copyright (C) 2006 Mikolaj Zalewski
|
||||||
* Copyright (C) 2009 Andrew Hill
|
* Copyright (C) 2009 Andrew Hill
|
||||||
|
* Copyright (C) 2018 Russell Johnson
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -867,6 +868,11 @@ HRESULT WINAPI CRecycleBin::Initialize(LPCITEMIDLIST pidlFolder, IDataObject *pd
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests whether a file can be trashed
|
||||||
|
* @param wszPath Path to the file to be trash
|
||||||
|
* @returns TRUE if the file can be trashed, FALSE otherwise
|
||||||
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
TRASH_CanTrashFile(LPCWSTR wszPath)
|
TRASH_CanTrashFile(LPCWSTR wszPath)
|
||||||
{
|
{
|
||||||
|
@ -883,12 +889,12 @@ TRASH_CanTrashFile(LPCWSTR wszPath)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only keep the base path.
|
// Copy and retrieve the root path from get given string
|
||||||
WCHAR wszRootPathName[MAX_PATH];
|
WCHAR wszRootPathName[MAX_PATH];
|
||||||
strcpyW(wszRootPathName, wszPath);
|
StringCbCopy(wszRootPathName, sizeof(wszRootPathName), wszPath);
|
||||||
PathRemoveFileSpecW(wszRootPathName);
|
PathStripToRootW(wszRootPathName);
|
||||||
PathAddBackslashW(wszRootPathName);
|
|
||||||
|
|
||||||
|
// Test to see if the drive is fixed (non removable)
|
||||||
if (GetDriveTypeW(wszRootPathName) != DRIVE_FIXED)
|
if (GetDriveTypeW(wszRootPathName) != DRIVE_FIXED)
|
||||||
{
|
{
|
||||||
/* no bitbucket on removable media */
|
/* no bitbucket on removable media */
|
||||||
|
@ -897,7 +903,7 @@ TRASH_CanTrashFile(LPCWSTR wszPath)
|
||||||
|
|
||||||
if (!GetVolumeInformationW(wszRootPathName, NULL, 0, &VolSerialNumber, &MaxComponentLength, &FileSystemFlags, NULL, 0))
|
if (!GetVolumeInformationW(wszRootPathName, NULL, 0, &VolSerialNumber, &MaxComponentLength, &FileSystemFlags, NULL, 0))
|
||||||
{
|
{
|
||||||
ERR("GetVolumeInformationW failed with %u\n", GetLastError());
|
ERR("GetVolumeInformationW failed with %u wszRootPathName=%s\n", GetLastError(), debugstr_w(wszRootPathName));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue