[PATCH] wusa: Use CRT allocation functions.

Hans Leidekker hans at codeweavers.com
Tue Mar 1 04:42:59 CST 2022


Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
 programs/wusa/main.c     | 72 ++++++++++++++++++++--------------------
 programs/wusa/manifest.c | 52 ++++++++++++++---------------
 programs/wusa/wusa.h     | 35 +++----------------
 3 files changed, 66 insertions(+), 93 deletions(-)

diff --git a/programs/wusa/main.c b/programs/wusa/main.c
index b3ab6ac523c..74dfeb68d5f 100644
--- a/programs/wusa/main.c
+++ b/programs/wusa/main.c
@@ -54,12 +54,12 @@ struct installer_state
 
 static void * CDECL cabinet_alloc(ULONG cb)
 {
-    return heap_alloc(cb);
+    return malloc(cb);
 }
 
 static void CDECL cabinet_free(void *pv)
 {
-    heap_free(pv);
+    free(pv);
 }
 
 static INT_PTR CDECL cabinet_open(char *pszFile, int oflag, int pmode)
@@ -134,7 +134,7 @@ static WCHAR *path_combine(const WCHAR *path, const WCHAR *filename)
 
     if (!path || !filename) return NULL;
     length = lstrlenW(path) + lstrlenW(filename) + 2;
-    if (!(result = heap_alloc(length * sizeof(WCHAR)))) return NULL;
+    if (!(result = malloc(length * sizeof(WCHAR)))) return NULL;
 
     lstrcpyW(result, path);
     if (result[0] && result[lstrlenW(result) - 1] != '\\') lstrcatW(result, L"\\");
@@ -146,7 +146,7 @@ static WCHAR *get_uncompressed_path(PFDINOTIFICATION pfdin)
 {
     WCHAR *file = strdupAtoW(pfdin->psz1);
     WCHAR *path = path_combine(pfdin->pv, file);
-    heap_free(file);
+    free(file);
     return path;
 }
 
@@ -187,7 +187,7 @@ static BOOL create_parent_directory(const WCHAR *filename)
     ret = create_directory(path);
 
 done:
-    heap_free(path);
+    free(path);
     return ret;
 }
 
@@ -209,7 +209,7 @@ static INT_PTR cabinet_copy_file(FDINOTIFICATIONTYPE fdint, PFDINOTIFICATION pfd
         handle = CreateFileW(file, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, attrs, NULL);
     }
 
-    heap_free(file);
+    free(file);
     return (handle != INVALID_HANDLE_VALUE) ? (INT_PTR)handle : -1;
 }
 
@@ -257,7 +257,7 @@ static BOOL extract_cabinet(const WCHAR *filename, const WCHAR *destination)
     if ((filenameA = strdupWtoA(filename)))
     {
         ret = FDICopy(hfdi, filenameA, NULL, 0, cabinet_notify, NULL, (void *)destination);
-        heap_free(filenameA);
+        free(filenameA);
     }
 
     FDIDestroy(hfdi);
@@ -271,18 +271,18 @@ static const WCHAR *create_temp_directory(struct installer_state *state)
     WCHAR tmp[MAX_PATH];
 
     if (!GetTempPathW(ARRAY_SIZE(tmp), tmp)) return NULL;
-    if (!(entry = heap_alloc(sizeof(*entry)))) return NULL;
-    if (!(entry->path = heap_alloc((MAX_PATH + 20) * sizeof(WCHAR))))
+    if (!(entry = malloc(sizeof(*entry)))) return NULL;
+    if (!(entry->path = malloc((MAX_PATH + 20) * sizeof(WCHAR))))
     {
-        heap_free(entry);
+        free(entry);
         return NULL;
     }
     for (;;)
     {
         if (!GetTempFileNameW(tmp, L"msu", ++id, entry->path))
         {
-            heap_free(entry->path);
-            heap_free(entry);
+            free(entry->path);
+            free(entry);
             return NULL;
         }
         if (CreateDirectoryW(entry->path, NULL)) break;
@@ -300,7 +300,7 @@ static BOOL delete_directory(const WCHAR *path)
 
     if (!(full_path = path_combine(path, L"*"))) return FALSE;
     search = FindFirstFileW(full_path, &data);
-    heap_free(full_path);
+    free(full_path);
 
     if (search != INVALID_HANDLE_VALUE)
     {
@@ -313,7 +313,7 @@ static BOOL delete_directory(const WCHAR *path)
                 delete_directory(full_path);
             else
                 DeleteFileW(full_path);
-            heap_free(full_path);
+            free(full_path);
         }
         while (FindNextFileW(search, &data));
         FindClose(search);
@@ -332,8 +332,8 @@ static void installer_cleanup(struct installer_state *state)
     {
         list_remove(&tempdir->entry);
         delete_directory(tempdir->path);
-        heap_free(tempdir->path);
-        heap_free(tempdir);
+        free(tempdir->path);
+        free(tempdir);
     }
     LIST_FOR_EACH_ENTRY_SAFE(assembly, assembly2, &state->assemblies, struct assembly_entry, entry)
     {
@@ -377,11 +377,11 @@ static BOOL load_assemblies_from_cab(const WCHAR *filename, struct installer_sta
         FIXME("Cabinet uses proprietary msdelta file compression which is not (yet) supported\n");
         FIXME("Installation of msu file will most likely fail\n");
     }
-    heap_free(path);
+    free(path);
 
     if (!(path = path_combine(temp_path, L"*"))) return FALSE;
     search = FindFirstFileW(path, &data);
-    heap_free(path);
+    free(path);
 
     if (search != INVALID_HANDLE_VALUE)
     {
@@ -393,7 +393,7 @@ static BOOL load_assemblies_from_cab(const WCHAR *filename, struct installer_sta
             if (!(path = path_combine(temp_path, data.cFileName))) continue;
             if ((assembly = load_manifest(path)))
                 list_add_tail(&state->assemblies, &assembly->entry);
-            heap_free(path);
+            free(path);
         }
         while (FindNextFileW(search, &data));
         FindClose(search);
@@ -439,13 +439,13 @@ static BOOL strbuf_init(struct strbuf *buf)
 {
     buf->pos = 0;
     buf->len = 64;
-    buf->buf = heap_alloc(buf->len * sizeof(WCHAR));
+    buf->buf = malloc(buf->len * sizeof(WCHAR));
     return buf->buf != NULL;
 }
 
 static void strbuf_free(struct strbuf *buf)
 {
-    heap_free(buf->buf);
+    free(buf->buf);
     buf->buf = NULL;
 }
 
@@ -461,7 +461,7 @@ static BOOL strbuf_append(struct strbuf *buf, const WCHAR *str, DWORD len)
     if (buf->pos + len + 1 > buf->len)
     {
         new_len = max(buf->pos + len + 1, buf->len * 2);
-        new_buf = heap_realloc(buf->buf, new_len * sizeof(WCHAR));
+        new_buf = realloc(buf->buf, new_len * sizeof(WCHAR));
         if (!new_buf)
         {
             strbuf_free(buf);
@@ -548,10 +548,10 @@ static WCHAR *expand_expression(struct assembly_entry *assembly, const WCHAR *ex
 
         if (!(key = strdupWn(pos, next - pos))) goto error;
         value = lookup_expression(assembly, key);
-        heap_free(key);
+        free(key);
         if (!value) goto error;
         strbuf_append(&buf, value, ~0U);
-        heap_free(value);
+        free(value);
     }
 
     strbuf_append(&buf, pos, ~0U);
@@ -597,9 +597,9 @@ static BOOL install_files_copy(struct assembly_entry *assembly, const WCHAR *sou
     }
 
 error:
-    heap_free(target_path);
-    heap_free(target);
-    heap_free(source);
+    free(target_path);
+    free(target);
+    free(source);
     return ret;
 }
 
@@ -620,7 +620,7 @@ static BOOL install_files(struct assembly_entry *assembly, BOOL dryrun)
         if (!(ret = install_files_copy(assembly, source_path, fileop, dryrun))) break;
     }
 
-    heap_free(source_path);
+    free(source_path);
     return ret;
 }
 
@@ -667,7 +667,7 @@ static BOOL install_registry_string(struct assembly_entry *assembly, HKEY key, s
         ret = FALSE;
     }
 
-    heap_free(value);
+    free(value);
     return ret;
 }
 
@@ -725,7 +725,7 @@ static BOOL install_registry_multisz(struct assembly_entry *assembly, HKEY key,
         ret = FALSE;
     }
 
-    heap_free(value);
+    free(value);
     return ret;
 }
 
@@ -755,7 +755,7 @@ static BYTE *parse_hex(const WCHAR *input, DWORD *size)
     if (length & 1) return NULL;
     length >>= 1;
 
-    if (!(output = heap_alloc(length))) return NULL;
+    if (!(output = malloc(length))) return NULL;
     for (p = output; *input; input += 2)
     {
         number[0] = input[0];
@@ -781,7 +781,7 @@ static BOOL install_registry_binary(struct assembly_entry *assembly, HKEY key, s
         ret = FALSE;
     }
 
-    heap_free(value);
+    free(value);
     return ret;
 }
 
@@ -954,7 +954,7 @@ static BOOL install_msu(const WCHAR *filename, struct installer_state *state)
     /* load all manifests from contained cabinet archives */
     if (!(path = path_combine(temp_path, L"*.cab"))) goto done;
     search = FindFirstFileW(path, &data);
-    heap_free(path);
+    free(path);
 
     if (search != INVALID_HANDLE_VALUE)
     {
@@ -965,7 +965,7 @@ static BOOL install_msu(const WCHAR *filename, struct installer_state *state)
             if (!(path = path_combine(temp_path, data.cFileName))) continue;
             if (!load_assemblies_from_cab(path, state))
                 ERR("Failed to load all manifests from %s, ignoring\n", debugstr_w(path));
-            heap_free(path);
+            free(path);
         }
         while (FindNextFileW(search, &data));
         FindClose(search);
@@ -974,7 +974,7 @@ static BOOL install_msu(const WCHAR *filename, struct installer_state *state)
     /* load all update descriptions */
     if (!(path = path_combine(temp_path, L"*.xml"))) goto done;
     search = FindFirstFileW(path, &data);
-    heap_free(path);
+    free(path);
 
     if (search != INVALID_HANDLE_VALUE)
     {
@@ -984,7 +984,7 @@ static BOOL install_msu(const WCHAR *filename, struct installer_state *state)
             if (!(path = path_combine(temp_path, data.cFileName))) continue;
             if (!load_update(path, &state->updates))
                 ERR("Failed to load all updates from %s, ignoring\n", debugstr_w(path));
-            heap_free(path);
+            free(path);
         }
         while (FindNextFileW(search, &data));
         FindClose(search);
diff --git a/programs/wusa/manifest.c b/programs/wusa/manifest.c
index e80c11998ce..efd2845c7e2 100644
--- a/programs/wusa/manifest.c
+++ b/programs/wusa/manifest.c
@@ -32,28 +32,28 @@ WINE_DEFAULT_DEBUG_CHANNEL(wusa);
 
 static struct dependency_entry *alloc_dependency(void)
 {
-    struct dependency_entry *entry = heap_alloc_zero(sizeof(*entry));
+    struct dependency_entry *entry = calloc(1, sizeof(*entry));
     if (!entry) ERR("Failed to allocate memory for dependency\n");
     return entry;
 }
 
 static struct fileop_entry *alloc_fileop(void)
 {
-    struct fileop_entry *entry = heap_alloc_zero(sizeof(*entry));
+    struct fileop_entry *entry = calloc(1, sizeof(*entry));
     if (!entry) ERR("Failed to allocate memory for fileop\n");
     return entry;
 }
 
 static struct registrykv_entry *alloc_registrykv(void)
 {
-    struct registrykv_entry *entry = heap_alloc_zero(sizeof(*entry));
+    struct registrykv_entry *entry = calloc(1, sizeof(*entry));
     if (!entry) ERR("Failed to allocate memory for registrykv\n");
     return entry;
 }
 
 static struct registryop_entry *alloc_registryop(void)
 {
-    struct registryop_entry *entry = heap_alloc_zero(sizeof(*entry));
+    struct registryop_entry *entry = calloc(1, sizeof(*entry));
     if (!entry) ERR("Failed to allocate memory for registryop\n");
     else
     {
@@ -64,7 +64,7 @@ static struct registryop_entry *alloc_registryop(void)
 
 static struct assembly_entry *alloc_assembly(void)
 {
-    struct assembly_entry *entry = heap_alloc_zero(sizeof(*entry));
+    struct assembly_entry *entry = calloc(1, sizeof(*entry));
     if (!entry) ERR("Failed to allocate memory for assembly\n");
     else
     {
@@ -77,39 +77,39 @@ static struct assembly_entry *alloc_assembly(void)
 
 static void clear_identity(struct assembly_identity *entry)
 {
-    heap_free(entry->name);
-    heap_free(entry->version);
-    heap_free(entry->architecture);
-    heap_free(entry->language);
-    heap_free(entry->pubkey_token);
+    free(entry->name);
+    free(entry->version);
+    free(entry->architecture);
+    free(entry->language);
+    free(entry->pubkey_token);
 }
 
 void free_dependency(struct dependency_entry *entry)
 {
     clear_identity(&entry->identity);
-    heap_free(entry);
+    free(entry);
 }
 
 static void free_fileop(struct fileop_entry *entry)
 {
-    heap_free(entry->source);
-    heap_free(entry->target);
-    heap_free(entry);
+    free(entry->source);
+    free(entry->target);
+    free(entry);
 }
 
 static void free_registrykv(struct registrykv_entry *entry)
 {
-    heap_free(entry->name);
-    heap_free(entry->value_type);
-    heap_free(entry->value);
-    heap_free(entry);
+    free(entry->name);
+    free(entry->value_type);
+    free(entry->value);
+    free(entry);
 }
 
 static void free_registryop(struct registryop_entry *entry)
 {
     struct registrykv_entry *keyvalue, *keyvalue2;
 
-    heap_free(entry->key);
+    free(entry->key);
 
     LIST_FOR_EACH_ENTRY_SAFE(keyvalue, keyvalue2, &entry->keyvalues, struct registrykv_entry, entry)
     {
@@ -117,7 +117,7 @@ static void free_registryop(struct registryop_entry *entry)
         free_registrykv(keyvalue);
     }
 
-    heap_free(entry);
+    free(entry);
 }
 
 void free_assembly(struct assembly_entry *entry)
@@ -126,8 +126,8 @@ void free_assembly(struct assembly_entry *entry)
     struct fileop_entry *fileop, *fileop2;
     struct registryop_entry *registryop, *registryop2;
 
-    heap_free(entry->filename);
-    heap_free(entry->displayname);
+    free(entry->filename);
+    free(entry->displayname);
     clear_identity(&entry->identity);
 
     LIST_FOR_EACH_ENTRY_SAFE(dependency, dependency2, &entry->dependencies, struct dependency_entry, entry)
@@ -146,7 +146,7 @@ void free_assembly(struct assembly_entry *entry)
         free_registryop(registryop);
     }
 
-    heap_free(entry);
+    free(entry);
 }
 
 static WCHAR *get_xml_attribute(IXMLDOMElement *root, const WCHAR *name)
@@ -304,7 +304,7 @@ static BOOL read_dependent_assembly(IXMLDOMElement *root, struct assembly_identi
 
 error:
     if (child) IXMLDOMElement_Release(child);
-    heap_free(dependency_type);
+    free(dependency_type);
     return ret;
 }
 
@@ -498,7 +498,7 @@ static BOOL read_registry_keys(IXMLDOMElement *child, WCHAR *tagname, void *cont
         free_registryop(entry);
     }
 
-    heap_free(keyname);
+    free(keyname);
     return FALSE;
 }
 
@@ -622,7 +622,7 @@ static BOOL read_servicing(IXMLDOMElement *child, WCHAR *tagname, void *context)
     else
         FIXME("action %s not supported\n", debugstr_w(action));
 
-    heap_free(action);
+    free(action);
     return ret;
 }
 
diff --git a/programs/wusa/wusa.h b/programs/wusa/wusa.h
index dcd784e7649..da679a27f07 100644
--- a/programs/wusa/wusa.h
+++ b/programs/wusa/wusa.h
@@ -78,29 +78,6 @@ void free_dependency(struct dependency_entry *entry) DECLSPEC_HIDDEN;
 struct assembly_entry *load_manifest(const WCHAR *filename) DECLSPEC_HIDDEN;
 BOOL load_update(const WCHAR *filename, struct list *update_list) DECLSPEC_HIDDEN;
 
-static void *heap_alloc(size_t len) __WINE_ALLOC_SIZE(1);
-static inline void *heap_alloc(size_t len)
-{
-    return HeapAlloc(GetProcessHeap(), 0, len);
-}
-
-static void *heap_alloc_zero(size_t len) __WINE_ALLOC_SIZE(1);
-static inline void *heap_alloc_zero(size_t len)
-{
-    return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);
-}
-
-static void *heap_realloc(void *mem, size_t len) __WINE_ALLOC_SIZE(2);
-static inline void *heap_realloc(void *mem, size_t len)
-{
-    return HeapReAlloc(GetProcessHeap(), 0, mem, len);
-}
-
-static inline BOOL heap_free(void *mem)
-{
-    return HeapFree(GetProcessHeap(), 0, mem);
-}
-
 static inline char *strdupWtoA(const WCHAR *str)
 {
     char *ret = NULL;
@@ -108,8 +85,7 @@ static inline char *strdupWtoA(const WCHAR *str)
 
     if (!str) return ret;
     len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
-    if ((ret = heap_alloc(len)))
-        WideCharToMultiByte(CP_ACP, 0, str, -1, ret, len, NULL, NULL);
+    if ((ret = malloc(len))) WideCharToMultiByte(CP_ACP, 0, str, -1, ret, len, NULL, NULL);
     return ret;
 }
 
@@ -120,8 +96,7 @@ static inline WCHAR *strdupAtoW(const char *str)
 
     if (!str) return ret;
     len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
-    if ((ret = heap_alloc(len * sizeof(WCHAR))))
-        MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);
+    if ((ret = malloc(len * sizeof(WCHAR)))) MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);
     return ret;
 }
 
@@ -129,8 +104,7 @@ static inline WCHAR *strdupW(const WCHAR *str)
 {
     WCHAR *ret;
     if (!str) return NULL;
-    ret = heap_alloc((lstrlenW(str) + 1) * sizeof(WCHAR));
-    if (ret) lstrcpyW(ret, str);
+    if ((ret = malloc((lstrlenW(str) + 1) * sizeof(WCHAR)))) lstrcpyW(ret, str);
     return ret;
 }
 
@@ -138,8 +112,7 @@ static inline WCHAR *strdupWn(const WCHAR *str, DWORD len)
 {
     WCHAR *ret;
     if (!str) return NULL;
-    ret = heap_alloc((len + 1) * sizeof(WCHAR));
-    if (ret)
+    if ((ret = malloc((len + 1) * sizeof(WCHAR))))
     {
         memcpy(ret, str, len * sizeof(WCHAR));
         ret[len] = 0;
-- 
2.30.2




More information about the wine-devel mailing list