[PATCH 01/13] reg: Add initial support for the export operation

Hugh McMaster hugh.mcmaster at outlook.com
Sun Dec 3 00:50:09 CST 2017


Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
 programs/reg/Makefile.in |  1 +
 programs/reg/export.c    | 29 +++++++++++++++++++++++++++++
 programs/reg/reg.c       |  6 ++++++
 programs/reg/reg.h       |  3 +++
 programs/reg/reg.rc      |  3 ++-
 programs/reg/resource.h  |  1 +
 programs/reg/tests/reg.c |  2 +-
 7 files changed, 43 insertions(+), 2 deletions(-)
 create mode 100644 programs/reg/export.c

diff --git a/programs/reg/Makefile.in b/programs/reg/Makefile.in
index 256bcde62b..7c6a899362 100644
--- a/programs/reg/Makefile.in
+++ b/programs/reg/Makefile.in
@@ -4,6 +4,7 @@ IMPORTS   = advapi32
 DELAYIMPORTS = user32
 
 C_SRCS = \
+	export.c \
 	import.c \
 	reg.c
 
diff --git a/programs/reg/export.c b/programs/reg/export.c
new file mode 100644
index 0000000000..f4318eff72
--- /dev/null
+++ b/programs/reg/export.c
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2017 Hugh McMaster
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <windows.h>
+
+#include <wine/debug.h>
+
+WINE_DEFAULT_DEBUG_CHANNEL(reg);
+
+int reg_export(int argc, WCHAR *argv[])
+{
+    FIXME(": operation not yet implemented\n");
+    return 1;
+}
diff --git a/programs/reg/reg.c b/programs/reg/reg.c
index 42fd6e9daa..7affdd282b 100644
--- a/programs/reg/reg.c
+++ b/programs/reg/reg.c
@@ -908,6 +908,7 @@ enum operations {
     REG_ADD,
     REG_DELETE,
     REG_IMPORT,
+    REG_EXPORT,
     REG_QUERY,
     REG_INVALID
 };
@@ -919,6 +920,7 @@ static enum operations get_operation(const WCHAR *str, int *op_help)
     static const WCHAR add[] = {'a','d','d',0};
     static const WCHAR delete[] = {'d','e','l','e','t','e',0};
     static const WCHAR import[] = {'i','m','p','o','r','t',0};
+    static const WCHAR export[] = {'e','x','p','o','r','t',0};
     static const WCHAR query[] = {'q','u','e','r','y',0};
 
     static const struct op_info op_array[] =
@@ -926,6 +928,7 @@ static enum operations get_operation(const WCHAR *str, int *op_help)
         { add,     REG_ADD,     STRING_ADD_USAGE },
         { delete,  REG_DELETE,  STRING_DELETE_USAGE },
         { import,  REG_IMPORT,  STRING_IMPORT_USAGE },
+        { export,  REG_EXPORT,  STRING_EXPORT_USAGE },
         { query,   REG_QUERY,   STRING_QUERY_USAGE },
         { NULL,    -1,          0 }
     };
@@ -994,6 +997,9 @@ int wmain(int argc, WCHAR *argvW[])
     if (op == REG_IMPORT)
         return reg_import(argvW[2]);
 
+    if (op == REG_EXPORT)
+        return reg_export(argc, argvW);
+
     if (!parse_registry_key(argvW[2], &root, &path, &key_name))
         return 1;
 
diff --git a/programs/reg/reg.h b/programs/reg/reg.h
index 07bbecf8d5..b4751e408c 100644
--- a/programs/reg/reg.h
+++ b/programs/reg/reg.h
@@ -33,4 +33,7 @@ HKEY path_get_rootkey(const WCHAR *path);
 /* import.c */
 int reg_import(const WCHAR *filename);
 
+/* export.c */
+int reg_export(int argc, WCHAR *argv[]);
+
 #endif /* __REG_H__ */
diff --git a/programs/reg/reg.rc b/programs/reg/reg.rc
index 9a00cc1c57..1647e222fa 100644
--- a/programs/reg/reg.rc
+++ b/programs/reg/reg.rc
@@ -29,7 +29,7 @@ STRINGTABLE
     STRING_USAGE, "Usage:\n\
 \  REG [operation] [parameters]\n\n\
 \Supported operations:\n\
-\  ADD | DELETE | IMPORT | QUERY\n\n\
+\  ADD | DELETE | IMPORT | EXPORT | QUERY\n\n\
 \For help on a specific operation, type:\n\
 \  REG [operation] /?\n\n"
     STRING_ADD_USAGE, "REG ADD key_name [/v value_name | /ve] [/t type] [/s separator] [/d data] [/f]\n"
@@ -66,4 +66,5 @@ STRINGTABLE
     STRING_FILE_NOT_FOUND, "reg: The file '%1' was not found.\n"
     STRING_OPEN_KEY_FAILED, "reg: Unable to open the registry key '%1'.\n"
     STRING_ESCAPE_SEQUENCE, "reg: Unrecognized escape sequence [\\%1!c!]\n"
+    STRING_EXPORT_USAGE, "REG EXPORT key_name file.reg [/y]\n"
 }
diff --git a/programs/reg/resource.h b/programs/reg/resource.h
index 1f2c150d63..8441638657 100644
--- a/programs/reg/resource.h
+++ b/programs/reg/resource.h
@@ -56,3 +56,4 @@
 #define STRING_FILE_NOT_FOUND   133
 #define STRING_OPEN_KEY_FAILED  134
 #define STRING_ESCAPE_SEQUENCE  135
+#define STRING_EXPORT_USAGE     136
diff --git a/programs/reg/tests/reg.c b/programs/reg/tests/reg.c
index 0bab8bc2af..9e4a8145a6 100644
--- a/programs/reg/tests/reg.c
+++ b/programs/reg/tests/reg.c
@@ -4389,7 +4389,7 @@ static void test_export(void)
     ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
 
     run_reg_exe("reg export /?", &r);
-    todo_wine ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
+    ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
 
     run_reg_exe("reg export \\\\remote-pc\\HKLM\\Wine file.reg", &r);
     ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
-- 
2.15.0




More information about the wine-devel mailing list