From 381d30ac17a8cf68099e8fa3e2d0bb7669327d64 Mon Sep 17 00:00:00 2001
From: Hans Leidekker <hans@codeweavers.com>
Date: Tue, 18 Sep 2012 13:11:59 +0200
Subject: [PATCH] wbemprox: Add helpers to retrieve the system directory and OS
 architecture.

---
 dlls/wbemprox/builtin.c | 42 +++++++++++++++++++++++------------------
 1 file changed, 24 insertions(+), 18 deletions(-)

diff --git a/dlls/wbemprox/builtin.c b/dlls/wbemprox/builtin.c
index 54992b324fc..4b6ff38ad7a 100644
--- a/dlls/wbemprox/builtin.c
+++ b/dlls/wbemprox/builtin.c
@@ -831,31 +831,37 @@ static void fill_processor( struct table *table )
     table->num_rows = count;
 }
 
-static void fill_os( struct table *table )
+static const WCHAR *get_osarchitecture(void)
 {
-    struct record_operatingsystem *rec;
-    WCHAR path[MAX_PATH];
     SYSTEM_INFO info;
+    GetNativeSystemInfo( &info );
+    if (info.u.s.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) return os_64bitW;
+    return os_32bitW;
+}
+static WCHAR *get_systemdirectory(void)
+{
     void *redir;
+    WCHAR *ret;
 
-    if (!(table->data = heap_alloc( sizeof(*rec) ))) return;
-
-    rec = (struct record_operatingsystem *)table->data;
-    rec->caption    = os_captionW;
-    rec->csdversion = os_csdversionW;
+    if (!(ret = heap_alloc( MAX_PATH * sizeof(WCHAR) ))) return NULL;
+    Wow64DisableWow64FsRedirection( &redir );
+    GetSystemDirectoryW( ret, MAX_PATH );
+    Wow64RevertWow64FsRedirection( redir );
+    return ret;
+}
 
-    GetNativeSystemInfo( &info );
-    if (info.u.s.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
-        rec->osarchitecture = os_64bitW;
-    else
-        rec->osarchitecture = os_32bitW;
+static void fill_os( struct table *table )
+{
+    struct record_operatingsystem *rec;
 
-    rec->oslanguage = MAKELANGID( LANG_ENGLISH, SUBLANG_ENGLISH_US );
+    if (!(table->data = heap_alloc( sizeof(*rec) ))) return;
 
-    Wow64DisableWow64FsRedirection( &redir );
-    GetSystemDirectoryW( path, MAX_PATH );
-    Wow64RevertWow64FsRedirection( redir );
-    rec->systemdirectory = heap_strdupW( path );
+    rec = (struct record_operatingsystem *)table->data;
+    rec->caption         = os_captionW;
+    rec->csdversion      = os_csdversionW;
+    rec->osarchitecture  = get_osarchitecture();
+    rec->oslanguage      = MAKELANGID( LANG_ENGLISH, SUBLANG_ENGLISH_US );
+    rec->systemdirectory = get_systemdirectory();
 
     TRACE("created 1 row\n");
     table->num_rows = 1;
-- 
GitLab