mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
tst: winfsp-tests: ResilientRemoveDirectoryW
This commit is contained in:
parent
8f54152096
commit
205a59dbc6
@ -208,7 +208,8 @@ BOOL HookRemoveDirectoryW(
|
||||
PrepareFileName(lpPathName, FileNameBuf);
|
||||
|
||||
MaybeAdjustTraversePrivilege(FALSE);
|
||||
Success = RemoveDirectoryW(FileNameBuf);
|
||||
Success = (OptResilient ? ResilientRemoveDirectoryW : RemoveDirectoryW)(
|
||||
FileNameBuf);
|
||||
MaybeAdjustTraversePrivilege(TRUE);
|
||||
return Success;
|
||||
}
|
||||
|
@ -116,6 +116,32 @@ BOOL ResilientDeleteFileW(
|
||||
return Success;
|
||||
}
|
||||
|
||||
BOOL ResilientRemoveDirectoryW(
|
||||
LPCWSTR lpPathName)
|
||||
{
|
||||
BOOL Success;
|
||||
DWORD LastError;
|
||||
|
||||
Success = RemoveDirectoryW(lpPathName);
|
||||
LastError = GetLastError();
|
||||
|
||||
if (Success)
|
||||
WaitDeletePending(lpPathName);
|
||||
else
|
||||
{
|
||||
for (ULONG MaxTries = DeleteMaxTries;
|
||||
!Success && ERROR_SHARING_VIOLATION == GetLastError() && 0 != MaxTries;
|
||||
MaxTries--)
|
||||
{
|
||||
Sleep(DeleteSleepTimeout);
|
||||
Success = RemoveDirectoryW(lpPathName);
|
||||
}
|
||||
}
|
||||
|
||||
SetLastError(LastError);
|
||||
return Success;
|
||||
}
|
||||
|
||||
static VOID WaitDeletePending(PCWSTR FileName)
|
||||
{
|
||||
for (ULONG MaxTries = DeleteMaxTries; 0 != MaxTries; MaxTries--)
|
||||
|
@ -105,6 +105,8 @@ BOOL ResilientCloseHandle(
|
||||
HANDLE hObject);
|
||||
BOOL ResilientDeleteFileW(
|
||||
LPCWSTR lpFileName);
|
||||
BOOL ResilientRemoveDirectoryW(
|
||||
LPCWSTR lpPathName);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user