[PATCH 2/3] PATCHv1: Implementing the function to retrieve HKEY string representation.

Piyush Raj piyushraj.4680 at gmail.com
Tue Jan 2 08:13:38 CST 2018


---
 programs/reg/reg.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 68 insertions(+)

diff --git a/programs/reg/reg.c b/programs/reg/reg.c
index 405cc2a8be..d50740b389 100644
--- a/programs/reg/reg.c
+++ b/programs/reg/reg.c
@@ -883,6 +883,74 @@ static LONG hkey_to_wstring(HKEY hkey, WCHAR *buf, DWORD buf_sz)
     return -2;
 }
 
+typedef struct {
+    WCHAR *s;
+    DWORD sz;
+    DWORD base_sz;
+} DisplayString; 
+
+static int create_base_string(DisplayString *display,
+        HKEY root, WCHAR *remain,
+        WCHAR *value)
+{
+    WCHAR *ret, *pret;
+    WCHAR root_str[255];
+    LONG st;
+    DWORD ret_sz;
+
+    st = hkey_to_wstring(root, root_str, sizeof(root_str));
+    if (st) {
+        return -1;
+    }
+
+    display->base_sz = strlenW(root_str) + 1 + strlenW(remain) + 1;
+
+    ret_sz = display->base_sz + strlenW(value) + 1;
+    ret = malloc(ret_sz * sizeof(*ret));
+    if (ret == NULL) {
+        return -1;
+    }
+    display->s = ret;
+    display->sz = ret_sz;
+
+    pret = ret;
+    memcpy(ret, root_str,
+           sizeof(*ret) * strlenW(root_str));
+    pret += strlenW(root_str);
+
+    pret[0] = '\\';
+    pret += 1;
+    memcpy(pret, remain, strlenW(remain) * sizeof(*remain));
+    pret += strlenW(remain);
+
+    pret[0] = '\\';
+    pret += 1;
+    memcpy(pret, value, strlenW(value) * sizeof(*value));
+    pret += strlenW(value);
+    pret[0] = '\0';
+
+    return 0;
+}
+
+static int resize_display(DisplayString *display, WCHAR* skey)
+{
+    DWORD skey_sz = strlenW(skey);
+    WCHAR *pdisplay;
+
+    if(display->sz < (display->base_sz + skey_sz)) {
+        display->sz = display->base_sz + skey_sz;
+        display->s = realloc(display->s, sizeof(*display->s) * display->sz);
+        if(display->s == NULL) {
+            return -1;
+        }
+    }
+    pdisplay = display->s + display->base_sz;
+    memcpy(pdisplay, skey, skey_sz * sizeof(*skey));
+    pdisplay[skey_sz] = '\0';
+
+    return 0;
+}
+
 static int reg_query(HKEY root, WCHAR *path, WCHAR *key_name, WCHAR *value_name,
                      BOOL value_empty, BOOL recurse)
 {
-- 
2.11.0.windows.1




More information about the wine-devel mailing list