[PATCH 06/41] robocopy: add basic error output
Florian Eder
others.meder at gmail.com
Mon Sep 6 09:54:43 CDT 2021
Outputs error messages with the affected file / directory, the error code
and its meaning
Signed-off-by: Florian Eder <others.meder at gmail.com>
---
programs/robocopy/main.c | 23 +++++++++++++++++++----
programs/robocopy/robocopy.h | 3 +++
programs/robocopy/robocopy.rc | 3 +++
3 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/programs/robocopy/main.c b/programs/robocopy/main.c
index a28b008a8fa..050258ddab2 100644
--- a/programs/robocopy/main.c
+++ b/programs/robocopy/main.c
@@ -69,6 +69,21 @@ static void output_message(UINT format_string_id, ...)
LocalFree(string);
}
+static void output_error(UINT format_string_id, HRESULT error_code, WCHAR* path)
+{
+ WCHAR *error_string, error_code_long[64], error_code_short[64];
+
+ FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER,
+ NULL, error_code, 0, (LPWSTR)&error_string, 0, NULL);
+
+ swprintf(error_code_long, ARRAY_SIZE(error_code_long), L"0x%08x", error_code);
+ swprintf(error_code_short, ARRAY_SIZE(error_code_short), L"%u", error_code);
+
+ output_message(format_string_id, L"", error_code_short, error_code_long, path, error_string);
+
+ LocalFree(error_string);
+}
+
static BOOL is_valid_robocopy_flag(WCHAR *string)
{
/*
@@ -194,7 +209,7 @@ static BOOL create_directory_path(WCHAR *path)
{
if (GetLastError() != ERROR_ALREADY_EXISTS)
{
- WINE_FIXME("error create directory %S %d", current_folder, GetLastError());
+ output_error(STRING_ERROR_WRITE_DIRECTORY, GetLastError(), strip_path_prefix(current_folder));
return FALSE;
}
}
@@ -265,7 +280,7 @@ static BOOL perform_copy(void)
if (!PathIsDirectoryW(options.source))
{
- WINE_FIXME("error read directory %S %d", options.source, GetLastError());
+ output_error(STRING_ERROR_READ_DIRECTORY, ERROR_FILE_NOT_FOUND, strip_path_prefix(options.source));
return FALSE;
}
@@ -288,12 +303,12 @@ static BOOL perform_copy(void)
{
/* Create the directory path and then create the directory itself */
if (!create_directory_path(target_path))
- WINE_FIXME("error write directory %S %d", target_path, GetLastError());
+ output_error(STRING_ERROR_WRITE_DIRECTORY, GetLastError(), strip_path_prefix(target_path));
}
else
{
if (!CopyFileW(current_absolute_path, target_path, FALSE))
- WINE_FIXME("error write file %S %d", target_path, GetLastError());
+ output_error(STRING_ERROR_WRITE_FILE, GetLastError(), strip_path_prefix(target_path));
else
{
output_message(STRING_CREATE_FILE, strip_path_prefix(target_path));
diff --git a/programs/robocopy/robocopy.h b/programs/robocopy/robocopy.h
index 22c7406e0ea..1cd0a427c03 100644
--- a/programs/robocopy/robocopy.h
+++ b/programs/robocopy/robocopy.h
@@ -42,5 +42,8 @@ struct robocopy_options {
#define STRING_DESTINATION 1004
#define STRING_FILES 1005
#define STRING_ADDITIONAL_INFO 1008
+#define STRING_ERROR_READ_DIRECTORY 1011
+#define STRING_ERROR_WRITE_DIRECTORY 1012
+#define STRING_ERROR_WRITE_FILE 1014
#define STRING_CREATE_DIRECTORY 1019
#define STRING_CREATE_FILE 1022
\ No newline at end of file
diff --git a/programs/robocopy/robocopy.rc b/programs/robocopy/robocopy.rc
index 92f3b8efe63..45d7bdacd69 100644
--- a/programs/robocopy/robocopy.rc
+++ b/programs/robocopy/robocopy.rc
@@ -30,6 +30,9 @@ STRINGTABLE
STRING_DESTINATION, " Destination: %1\n\n"
STRING_FILES, " Files: %1\n"
STRING_ADDITIONAL_INFO, " %1\n"
+ STRING_ERROR_READ_DIRECTORY, "[%1] Error %2 (%3) occurred reading directory \"%4\":\n%5\n"
+ STRING_ERROR_WRITE_DIRECTORY, "[%1] Error %2 (%3) occurred writing directory \"%4\":\n%5\n"
+ STRING_ERROR_WRITE_FILE, "[%1] Error %2 (%3) occurred writing file \"%4\":\n%5\n"
STRING_CREATE_DIRECTORY, " Created Dir: %1\n"
STRING_CREATE_FILE, " Copied File: %1\n"
}
--
2.32.0
More information about the wine-devel
mailing list