svchost: Added base implementation of svchost (1/27)

Juan Lang juan.lang at gmail.com
Fri Nov 16 19:40:09 CST 2007


Hi Roy,

+#define WIN32_LEAN_AND_MEAN

That's not needed if you're not including windows.h (which you're not.)

+        if (unicode[i] > 129)

You have an off-by-two error here.  7-bit clean means if (unicode[i] >
127).  You can also use something like if (unicode[i] & 0x80).

Stylistic note, use or ignore at your option:
+        HeapFree(GetProcessHeap(), 0, service_param_key);
+        return FALSE;
(snip)
+        HeapFree(GetProcessHeap(), 0, service_param_key);
+        RegCloseKey(service_hkey);
+        return FALSE;
(snip)
+        HeapFree(GetProcessHeap(), 0, service_param_key);
+        HeapFree(GetProcessHeap(), 0, dll_name_short);
+        RegCloseKey(service_hkey);
+        return FALSE;
(snip)

Some judicious use of goto could reduce code for all your error paths.
 Remember that HeapFree of a NULL pointer is allowed.

+    dll_service_main = GetRegValue(service_hkey, service_main);
+    RegCloseKey(service_hkey);
+    if (!dll_service_main)
+    {
+        service_main_a = UnicodeToAscii(service_main);
+    }
+    else
+    {
+        service_main_a = UnicodeToAscii(dll_service_main);
+        HeapFree(GetProcessHeap(), 0, dll_service_main);

Why not just query dll_service_main and service_main from the registry
as an ASCII value to begin with?
--Juan



More information about the wine-devel mailing list