Hugh McMaster : regedit: Output an error message and exit with error code zero instead of calling exit (1).

Alexandre Julliard julliard at winehq.org
Wed Jul 12 15:37:26 CDT 2017


Module: wine
Branch: master
Commit: ae147a5bf68bf65511ee4711ab237de5293fa672
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ae147a5bf68bf65511ee4711ab237de5293fa672

Author: Hugh McMaster <hugh.mcmaster at outlook.com>
Date:   Wed Jul 12 11:09:05 2017 +0000

regedit: Output an error message and exit with error code zero instead of calling exit(1).

Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 programs/regedit/regedit.c | 29 +++++++++++++++++++++--------
 programs/regedit/regproc.c | 23 +++++++++--------------
 programs/regedit/regproc.h |  1 +
 3 files changed, 31 insertions(+), 22 deletions(-)

diff --git a/programs/regedit/regedit.c b/programs/regedit/regedit.c
index 47fec63..c563628 100644
--- a/programs/regedit/regedit.c
+++ b/programs/regedit/regedit.c
@@ -83,6 +83,23 @@ void __cdecl output_message(unsigned int id, ...)
     __ms_va_end(va_args);
 }
 
+void __cdecl error_exit(unsigned int id, ...)
+{
+    WCHAR fmt[1536];
+    __ms_va_list va_args;
+
+    if (!LoadStringW(GetModuleHandleW(NULL), id, fmt, sizeof(fmt)/sizeof(*fmt)))
+    {
+        WINE_FIXME("LoadString failed with %u\n", GetLastError());
+        return;
+    }
+    __ms_va_start(va_args, id);
+    output_formatstring(fmt, va_args);
+    __ms_va_end(va_args);
+
+    exit(0); /* regedit.exe always terminates with error code zero */
+}
+
 typedef enum {
     ACTION_ADD, ACTION_EXPORT, ACTION_DELETE
 } REGEDIT_ACTION;
@@ -147,8 +164,7 @@ static void PerformRegAction(REGEDIT_ACTION action, WCHAR **argv, int *i)
             break;
         }
     default:
-        output_message(STRING_UNHANDLED_ACTION);
-        exit(1);
+        error_exit(STRING_UNHANDLED_ACTION);
         break;
     }
 }
@@ -184,8 +200,7 @@ BOOL ProcessCmdLine(WCHAR *cmdline)
         switch (toupperW(argv[i][1]))
         {
         case '?':
-            output_message(STRING_USAGE);
-            exit(0);
+            error_exit(STRING_USAGE);
             break;
         case 'D':
             action = ACTION_DELETE;
@@ -204,8 +219,7 @@ BOOL ProcessCmdLine(WCHAR *cmdline)
             break;
         default:
             output_message(STRING_INVALID_SWITCH, argv[i]);
-            output_message(STRING_HELP);
-            exit(1);
+            error_exit(STRING_HELP);
         }
     }
 
@@ -221,8 +235,7 @@ BOOL ProcessCmdLine(WCHAR *cmdline)
             output_message(STRING_NO_REG_KEY);
             break;
         }
-        output_message(STRING_HELP);
-        exit(1);
+        error_exit(STRING_HELP);
     }
 
     for (; i < argc; i++)
diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index ea0b6f8..9ebe2fa 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -1421,8 +1421,7 @@ static FILE *REGPROC_open_export_file(WCHAR *file_name, BOOL unicode)
         file = _wfopen(file_name, wb_mode);
         if (!file) {
             _wperror(regedit);
-            output_message(STRING_CANNOT_OPEN_FILE, file_name);
-            exit(1);
+            error_exit(STRING_CANNOT_OPEN_FILE, file_name);
         }
     }
     if(unicode)
@@ -1478,10 +1477,9 @@ BOOL export_registry_key(WCHAR *file_name, WCHAR *reg_key_name, DWORD format)
         lstrcpyW(reg_key_name_buf, reg_key_name);
 
         /* open the specified key */
-        if (!(reg_key_class = parse_key_name(reg_key_name, &branch_name))) {
-            output_message(STRING_INCORRECT_REG_CLASS, reg_key_name);
-            exit(1);
-        }
+        if (!(reg_key_class = parse_key_name(reg_key_name, &branch_name)))
+            error_exit(STRING_INCORRECT_REG_CLASS, reg_key_name);
+
         if (!branch_name || !*branch_name) {
             /* no branch - registry class is specified */
             file = REGPROC_open_export_file(file_name, unicode);
@@ -1591,14 +1589,11 @@ void delete_registry_key(WCHAR *reg_key_name)
     if (!reg_key_name || !reg_key_name[0])
         return;
 
-    if (!(key_class = parse_key_name(reg_key_name, &key_name))) {
-        output_message(STRING_INCORRECT_REG_CLASS, reg_key_name);
-        exit(1);
-    }
-    if (!*key_name) {
-        output_message(STRING_DELETE_REG_CLASS_FAILED, reg_key_name);
-        exit(1);
-    }
+    if (!(key_class = parse_key_name(reg_key_name, &key_name)))
+        error_exit(STRING_INCORRECT_REG_CLASS, reg_key_name);
+
+    if (!*key_name)
+        error_exit(STRING_DELETE_REG_CLASS_FAILED, reg_key_name);
 
     RegDeleteTreeW(key_class, key_name);
 }
diff --git a/programs/regedit/regproc.h b/programs/regedit/regproc.h
index 72e6b38..81ac3e3 100644
--- a/programs/regedit/regproc.h
+++ b/programs/regedit/regproc.h
@@ -34,6 +34,7 @@ if (!(p)) \
 }
 
 void __cdecl output_message(unsigned int id, ...);
+void __cdecl error_exit(unsigned int id, ...);
 
 BOOL export_registry_key(WCHAR *file_name, WCHAR *reg_key_name, DWORD format);
 BOOL import_registry_file(FILE *in);




More information about the wine-cvs mailing list