From 22dce52d152bc9690bc14c71ce4aab8d2efec67a Mon Sep 17 00:00:00 2001 From: akallabeth Date: Tue, 25 Oct 2022 13:45:44 +0200 Subject: [PATCH] Add function winpr_MoveFileEx --- winpr/include/winpr/path.h | 1 + winpr/libwinpr/path/shell.c | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/winpr/include/winpr/path.h b/winpr/include/winpr/path.h index 2df7a210e..e677628b8 100644 --- a/winpr/include/winpr/path.h +++ b/winpr/include/winpr/path.h @@ -336,6 +336,7 @@ extern "C" #endif WINPR_API BOOL winpr_MoveFile(LPCSTR lpExistingFileName, LPCSTR lpNewFileName); + WINPR_API BOOL winpr_MoveFileEx(LPCSTR lpExistingFileName, LPCSTR lpNewFileName, DWORD dwFlags); WINPR_API BOOL winpr_DeleteFile(const char* lpFileName); WINPR_API BOOL winpr_RemoveDirectory(LPCSTR lpPathName); WINPR_API BOOL winpr_PathFileExists(const char* pszPath); diff --git a/winpr/libwinpr/path/shell.c b/winpr/libwinpr/path/shell.c index 25cd7d341..f37791244 100644 --- a/winpr/libwinpr/path/shell.c +++ b/winpr/libwinpr/path/shell.c @@ -689,6 +689,33 @@ cleanup: #endif } +BOOL winpr_MoveFileEx(LPCSTR lpExistingFileName, LPCSTR lpNewFileName, DWORD dwFlags) +{ +#ifndef _WIN32 + return MoveFileExA(lpExistingFileName, lpNewFileName, dwFlags); +#else + BOOL result = FALSE; + LPWSTR lpExistingFileNameW = NULL; + LPWSTR lpNewFileNameW = NULL; + + if (!lpExistingFileName || !lpNewFileName) + return FALSE; + + if (ConvertToUnicode(CP_UTF8, 0, lpExistingFileName, -1, &lpExistingFileNameW, 0) < 1) + goto cleanup; + + if (ConvertToUnicode(CP_UTF8, 0, lpNewFileName, -1, &lpNewFileNameW, 0) < 1) + goto cleanup; + + result = MoveFileExW(lpExistingFileNameW, lpNewFileNameW, dwFlags); + +cleanup: + free(lpExistingFileNameW); + free(lpNewFileNameW); + return result; +#endif +} + BOOL winpr_DeleteFile(const char* lpFileName) { #ifndef _WIN32