[Libreoffice-commits] core.git: solenv/wsl

Tor Lillqvist (via logerrit) logerrit at kemper.freedesktop.org
Sun Oct 25 10:25:48 UTC 2020


 solenv/wsl/wsl-lo-helper.cpp |   62 ++++++++++++++++++++++++++++++++++++-------
 1 file changed, 53 insertions(+), 9 deletions(-)

New commits:
commit 2a422f08d5e005ef30ec607134c3f3cdf9823346
Author:     Tor Lillqvist <tml at collabora.com>
AuthorDate: Sun Oct 25 11:45:25 2020 +0200
Commit:     Tor Lillqvist <tml at collabora.com>
CommitDate: Sun Oct 25 11:25:15 2020 +0100

    Improve the --read-registry functionality
    
    Do take the hive name part in the path to the key, too.
    
    Change-Id: I222cb6cb890b5a4a1cce9707bac51f3def6735f1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104767
    Tested-by: Jenkins
    Reviewed-by: Tor Lillqvist <tml at collabora.com>

diff --git a/solenv/wsl/wsl-lo-helper.cpp b/solenv/wsl/wsl-lo-helper.cpp
index 2bbc8cec16f8..5e20f3199bf8 100644
--- a/solenv/wsl/wsl-lo-helper.cpp
+++ b/solenv/wsl/wsl-lo-helper.cpp
@@ -94,14 +94,58 @@ int wmain(int argc, wchar_t** argv)
             if (*p == '/')
                 *p = '\\';
 
+        wchar_t* const first_backslash = wcschr(path, L'\\');
+        if (first_backslash == NULL)
+        {
+            fprintf(stderr, "%S: Invalid path %S to value in the Registry.\n", argv[0], path);
+            exit(1);
+        }
+
+        *first_backslash = L'\0';
+        wchar_t* const key_path = first_backslash + 1;
+
+        HKEY hive;
+        const wchar_t* hive_name;
+        if (wcscmp(path, L"HKEY_CLASSES_ROOT") == 0)
+        {
+            hive = HKEY_CLASSES_ROOT;
+            hive_name = L"HKEY_CLASSES_ROOT";
+        }
+        else if (wcscmp(path, L"HKEY_CURRENT_CONFIG") == 0)
+        {
+            hive = HKEY_CURRENT_CONFIG;
+            hive_name = L"HKEY_CURRENT_CONFIG";
+        }
+        else if (wcscmp(path, L"HKEY_CURRENT_USER") == 0)
+        {
+            hive = HKEY_CURRENT_USER;
+            hive_name = L"HKEY_CURRENT_USER";
+        }
+        else if (wcscmp(path, L"HKEY_LOCAL_MACHINE") == 0)
+        {
+            hive = HKEY_LOCAL_MACHINE;
+            hive_name = L"HKEY_LOCAL_MACHINE";
+        }
+        else if (wcscmp(path, L"HKEY_USERS") == 0)
+        {
+            hive = HKEY_USERS;
+            hive_name = L"HKEY_USERS";
+        }
+        else
+        {
+            fprintf(stderr, "%S: Invalid Registry hive %S.\n", argv[0], path);
+            exit(1);
+        }
+
         DWORD type;
         wchar_t result[1000];
         DWORD count = sizeof(result);
 
-        wchar_t* last_backslash = wcsrchr(path, L'\\');
+        wchar_t* last_backslash = wcsrchr(key_path, L'\\');
         if (last_backslash == NULL)
         {
-            fprintf(stderr, "%S: Invalid path to value in the Registry.\n", argv[0]);
+            fprintf(stderr, "%S: Invalid path %S\\%S to value in the Registry.\n", argv[0],
+                    hive_name, key_path);
             exit(1);
         }
 
@@ -109,23 +153,23 @@ int wmain(int argc, wchar_t** argv)
         wchar_t* value = last_backslash + 1;
 
         HKEY key;
-        if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, path, 0, KEY_QUERY_VALUE | sam, &key)
-            != ERROR_SUCCESS)
+        if (RegOpenKeyExW(hive, key_path, 0, KEY_QUERY_VALUE | sam, &key) != ERROR_SUCCESS)
         {
-            fprintf(stderr, "%S: Opening key %S in %S-bit Registry failed.\n", argv[0], path,
-                    argv[2]);
+            fprintf(stderr, "%S: Opening key %S\\%S in %S-bit Registry failed.\n", argv[0],
+                    hive_name, key_path, argv[2]);
             exit(1);
         }
 
         if (RegQueryValueExW(key, value, NULL, &type, (LPBYTE)result, &count) != ERROR_SUCCESS)
         {
-            fprintf(stderr, "%S: Reading value %S\\%S from %S-bit Registry failed.\n", argv[0],
-                    path, value, argv[2]);
+            fprintf(stderr, "%S: Reading value %S\\%S\\%S from %S-bit Registry failed.\n", argv[0],
+                    hive_name, key_path, value, argv[2]);
             exit(1);
         }
         if (type != REG_SZ)
         {
-            fprintf(stderr, "%S: Value %S\\%S is not a string.\n", argv[0], path, value);
+            fprintf(stderr, "%S: Value %S\\%S\\%S is not a string.\n", argv[0], hive_name, key_path,
+                    value);
             exit(1);
         }
         print_result(argv[0], result);


More information about the Libreoffice-commits mailing list