Hugh McMaster : reg: Use a helper function to allocate memory and die on failure.

Alexandre Julliard julliard at winehq.org
Tue Aug 1 16:43:15 CDT 2017


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

Author: Hugh McMaster <hugh.mcmaster at outlook.com>
Date:   Tue Aug  1 12:30:51 2017 +0000

reg: Use a helper function to allocate memory and die on failure.

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

---

 programs/reg/reg.c | 86 +++++++++++++++++++++---------------------------------
 1 file changed, 33 insertions(+), 53 deletions(-)

diff --git a/programs/reg/reg.c b/programs/reg/reg.c
index 573c750..07cb678 100644
--- a/programs/reg/reg.c
+++ b/programs/reg/reg.c
@@ -17,9 +17,10 @@
  */
 
 #include <windows.h>
+#include <errno.h>
+#include <stdlib.h>
 #include <wine/unicode.h>
 #include <wine/debug.h>
-#include <errno.h>
 #include "reg.h"
 
 #define ARRAY_SIZE(A) (sizeof(A)/sizeof(*A))
@@ -78,6 +79,17 @@ type_rels[] =
     {REG_MULTI_SZ, type_multi_sz},
 };
 
+static void *heap_xalloc(size_t size)
+{
+    void *buf = HeapAlloc(GetProcessHeap(), 0, size);
+    if (!buf)
+    {
+        ERR("Out of memory!\n");
+        exit(1);
+    }
+    return buf;
+}
+
 static void output_writeconsole(const WCHAR *str, DWORD wlen)
 {
     DWORD count, ret;
@@ -93,8 +105,7 @@ static void output_writeconsole(const WCHAR *str, DWORD wlen)
          * one in that case.
          */
         len = WideCharToMultiByte(GetConsoleOutputCP(), 0, str, wlen, NULL, 0, NULL, NULL);
-        msgA = HeapAlloc(GetProcessHeap(), 0, len * sizeof(char));
-        if (!msgA) return;
+        msgA = heap_xalloc(len);
 
         WideCharToMultiByte(GetConsoleOutputCP(), 0, str, wlen, msgA, len, NULL, NULL);
         WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), msgA, len, &count, FALSE);
@@ -240,7 +251,7 @@ static LPBYTE get_regdata(const WCHAR *data, DWORD reg_type, WCHAR separator, DW
         case REG_EXPAND_SZ:
         {
             *reg_count = (lstrlenW(data) + 1) * sizeof(WCHAR);
-            out_data = HeapAlloc(GetProcessHeap(),0,*reg_count);
+            out_data = heap_xalloc(*reg_count);
             lstrcpyW((LPWSTR)out_data,data);
             break;
         }
@@ -256,7 +267,7 @@ static LPBYTE get_regdata(const WCHAR *data, DWORD reg_type, WCHAR separator, DW
                 break;
             }
             *reg_count = sizeof(DWORD);
-            out_data = HeapAlloc(GetProcessHeap(),0,*reg_count);
+            out_data = heap_xalloc(*reg_count);
             ((LPDWORD)out_data)[0] = val;
             break;
         }
@@ -265,7 +276,7 @@ static LPBYTE get_regdata(const WCHAR *data, DWORD reg_type, WCHAR separator, DW
             BYTE hex0, hex1;
             int i = 0, destByteIndex = 0, datalen = lstrlenW(data);
             *reg_count = ((datalen + datalen % 2) / 2) * sizeof(BYTE);
-            out_data = HeapAlloc(GetProcessHeap(), 0, *reg_count);
+            out_data = heap_xalloc(*reg_count);
             if(datalen % 2)
             {
                 hex1 = hexchar_to_byte(data[i++]);
@@ -292,7 +303,7 @@ static LPBYTE get_regdata(const WCHAR *data, DWORD reg_type, WCHAR separator, DW
         case REG_MULTI_SZ:
         {
             int i, destindex, len = strlenW(data);
-            WCHAR *buffer = HeapAlloc(GetProcessHeap(), 0, (len + 2) * sizeof(WCHAR));
+            WCHAR *buffer = heap_xalloc((len + 2) * sizeof(WCHAR));
 
             for (i = 0, destindex = 0; i < len; i++, destindex++)
             {
@@ -462,7 +473,7 @@ static int reg_delete(HKEY root, WCHAR *path, WCHAR *key_name, WCHAR *value_name
             return 1;
         }
         maxValue++;
-        szValue = HeapAlloc(GetProcessHeap(),0,maxValue*sizeof(WCHAR));
+        szValue = heap_xalloc(maxValue * sizeof(WCHAR));
 
         while (1)
         {
@@ -507,7 +518,7 @@ static WCHAR *reg_data_to_wchar(DWORD type, const BYTE *src, DWORD size_bytes)
     {
         case REG_SZ:
         case REG_EXPAND_SZ:
-            buffer = HeapAlloc(GetProcessHeap(), 0, size_bytes);
+            buffer = heap_xalloc(size_bytes);
             strcpyW(buffer, (WCHAR *)src);
             break;
         case REG_NONE:
@@ -516,7 +527,7 @@ static WCHAR *reg_data_to_wchar(DWORD type, const BYTE *src, DWORD size_bytes)
             WCHAR *ptr;
             WCHAR fmt[] = {'%','0','2','X',0};
 
-            buffer = HeapAlloc(GetProcessHeap(), 0, (size_bytes * 2 + 1) * sizeof(WCHAR));
+            buffer = heap_xalloc((size_bytes * 2 + 1) * sizeof(WCHAR));
             ptr = buffer;
             for (i = 0; i < size_bytes; i++)
                 ptr += sprintfW(ptr, fmt, src[i]);
@@ -529,7 +540,7 @@ static WCHAR *reg_data_to_wchar(DWORD type, const BYTE *src, DWORD size_bytes)
             const int zero_x_dword = 10;
             WCHAR fmt[] = {'0','x','%','x',0};
 
-            buffer = HeapAlloc(GetProcessHeap(), 0, (zero_x_dword + 1) * sizeof(WCHAR));
+            buffer = heap_xalloc((zero_x_dword + 1) * sizeof(WCHAR));
             sprintfW(buffer, fmt, *(DWORD *)src);
             break;
         }
@@ -542,13 +553,13 @@ static WCHAR *reg_data_to_wchar(DWORD type, const BYTE *src, DWORD size_bytes)
 
             if (size_bytes <= two_wchars)
             {
-                buffer = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR));
+                buffer = heap_xalloc(sizeof(WCHAR));
                 *buffer = 0;
                 return buffer;
             }
 
             tmp_size = size_bytes - two_wchars; /* exclude both null terminators */
-            buffer = HeapAlloc(GetProcessHeap(), 0, tmp_size * 2 + sizeof(WCHAR));
+            buffer = heap_xalloc(tmp_size * 2 + sizeof(WCHAR));
             len = tmp_size / sizeof(WCHAR);
 
             for (i = 0, destindex = 0; i < len; i++, destindex++)
@@ -615,13 +626,9 @@ static WCHAR *build_subkey_path(WCHAR *path, DWORD path_len, WCHAR *subkey_name,
     WCHAR *subkey_path;
     WCHAR fmt[] = {'%','s','\\','%','s',0};
 
-    subkey_path = HeapAlloc(GetProcessHeap(), 0, (path_len + subkey_len + 2) * sizeof(WCHAR));
-    if (!subkey_path)
-    {
-        ERR("Failed to allocate memory for subkey_path\n");
-        return NULL;
-    }
+    subkey_path = heap_xalloc((path_len + subkey_len + 2) * sizeof(WCHAR));
     sprintfW(subkey_path, fmt, path, subkey_name);
+
     return subkey_path;
 }
 
@@ -641,12 +648,7 @@ static int query_value(HKEY key, WCHAR *value_name, WCHAR *path, BOOL recurse)
     WCHAR *subkey_name, *subkey_path;
     HKEY subkey;
 
-    data = HeapAlloc(GetProcessHeap(), 0, max_data_bytes);
-    if (!data)
-    {
-        ERR("Failed to allocate memory for data\n");
-        return 1;
-    }
+    data = heap_xalloc(max_data_bytes);
 
     for (;;)
     {
@@ -685,12 +687,7 @@ static int query_value(HKEY key, WCHAR *value_name, WCHAR *path, BOOL recurse)
         return 0;
     }
 
-    subkey_name = HeapAlloc(GetProcessHeap(), 0, MAX_SUBKEY_LEN * sizeof(WCHAR));
-    if (!subkey_name)
-    {
-        ERR("Failed to allocate memory for subkey_name\n");
-        return 1;
-    }
+    subkey_name = heap_xalloc(MAX_SUBKEY_LEN * sizeof(WCHAR));
 
     path_len = strlenW(path);
 
@@ -733,20 +730,8 @@ static int query_all(HKEY key, WCHAR *path, BOOL recurse)
 
     output_string(fmt, path);
 
-    value_name = HeapAlloc(GetProcessHeap(), 0, max_value_len * sizeof(WCHAR));
-    if (!value_name)
-    {
-        ERR("Failed to allocate memory for value_name\n");
-        return 1;
-    }
-
-    data = HeapAlloc(GetProcessHeap(), 0, max_data_bytes);
-    if (!data)
-    {
-        HeapFree(GetProcessHeap(), 0, value_name);
-        ERR("Failed to allocate memory for data\n");
-        return 1;
-    }
+    value_name = heap_xalloc(max_value_len * sizeof(WCHAR));
+    data = heap_xalloc(max_data_bytes);
 
     i = 0;
     for (;;)
@@ -781,12 +766,7 @@ static int query_all(HKEY key, WCHAR *path, BOOL recurse)
     if (i || recurse)
         output_string(newlineW);
 
-    subkey_name = HeapAlloc(GetProcessHeap(), 0, MAX_SUBKEY_LEN * sizeof(WCHAR));
-    if (!subkey_name)
-    {
-        ERR("Failed to allocate memory for subkey_name\n");
-        return 1;
-    }
+    subkey_name = heap_xalloc(MAX_SUBKEY_LEN * sizeof(WCHAR));
 
     path_len = strlenW(path);
 
@@ -866,13 +846,13 @@ static WCHAR *get_long_key(HKEY root, WCHAR *path)
 
     if (!path)
     {
-        long_key = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR));
+        long_key = heap_xalloc((len + 1) * sizeof(WCHAR));
         strcpyW(long_key, root_rels[i].long_name);
         return long_key;
     }
 
     len += strlenW(path) + 1; /* add one for the backslash */
-    long_key = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR));
+    long_key = heap_xalloc((len + 1) * sizeof(WCHAR));
     sprintfW(long_key, fmt, root_rels[i].long_name, path);
     return long_key;
 }




More information about the wine-cvs mailing list