Remove kernel32 dependency on user32

Dmitry Timoshkov dmitry at baikal.ru
Wed May 23 10:10:11 CDT 2001


Hello.

Changelog:
    Dmitry Timoshkov <dmitry at codeweavers.com>
    Remove kernel32 dependency on user32 by implementing family
    of k32 functions as callouts to user32.

diff -u cvs/hq/wine/dlls/kernel/kernel32.spec wine/dlls/kernel/kernel32.spec
--- cvs/hq/wine/dlls/kernel/kernel32.spec	Sat Apr 14 17:18:41 2001
+++ wine/dlls/kernel/kernel32.spec	Wed May 23 20:56:37 2001
@@ -26,13 +26,13 @@
   7 register -i386 VxDCall6(long) VxDCall
   8 register -i386 VxDCall7(long) VxDCall
   9 register -i386 VxDCall8(long) VxDCall
- 10 forward k32CharToOemA user32.CharToOemA
- 11 forward k32CharToOemBuffA user32.CharToOemBuffA
- 12 forward k32OemToCharA user32.OemToCharA
- 13 forward k32OemToCharBuffA user32.OemToCharBuffA
- 14 forward k32LoadStringA user32.LoadStringA
- 15 forward k32wsprintfA user32.wsprintfA
- 16 forward k32wvsprintfA user32.wvsprintfA
+ 10 stdcall k32CharToOemA(str ptr) k32CharToOemA
+ 11 stdcall k32CharToOemBuffA(str ptr long) k32CharToOemBuffA
+ 12 stdcall k32OemToCharA(ptr ptr) k32OemToCharA
+ 13 stdcall k32OemToCharBuffA(ptr ptr long) k32OemToCharBuffA
+ 14 stdcall k32LoadStringA(long long ptr long) k32LoadStringA
+ 15 varargs k32wsprintfA(str str) k32wsprintfA
+ 16 stdcall k32wvsprintfA(ptr str ptr) k32wvsprintfA
  17 register -i386 CommonUnimpStub() CommonUnimpStub
  18 stdcall GetProcessDword(long long) GetProcessDword
  19 stub ThunkTheTemplateHandle
diff -u cvs/hq/wine/dlls/kernel/kernel_main.c wine/dlls/kernel/kernel_main.c
--- cvs/hq/wine/dlls/kernel/kernel_main.c	Sun Mar  4 13:31:24 2001
+++ wine/dlls/kernel/kernel_main.c	Wed May 23 21:02:12 2001
@@ -179,3 +179,95 @@
 {
     return (INT16)strcmp( str1, str2 );
 }
+
+/***********************************************************************
+ * Helper for k32 family functions
+ */
+static void *user32_proc_address(const char *proc_name)
+{
+    static HMODULE hUser32 = 0;
+
+    if(!hUser32) hUser32 = LoadLibraryA("user32.dll");
+    return GetProcAddress(hUser32, proc_name);
+}
+
+/***********************************************************************
+ *		k32CharToOemBuffA   (KERNEL32.@)
+ */
+BOOL WINAPI k32CharToOemBuffA(LPCSTR s, LPSTR d, DWORD len)
+{
+    static BOOL WINAPI (*pCharToOemBuffA)(LPCSTR, LPSTR, DWORD);
+
+    if(!pCharToOemBuffA) pCharToOemBuffA = user32_proc_address("CharToOemBuffA");
+    return (*pCharToOemBuffA)(s, d, len);
+}
+
+/***********************************************************************
+ *		k32CharToOemA   (KERNEL32.@)
+ */
+BOOL WINAPI k32CharToOemA(LPCSTR s, LPSTR d)
+{
+    static BOOL WINAPI (*pCharToOemA)(LPCSTR, LPSTR);
+
+    if(!pCharToOemA) pCharToOemA = user32_proc_address("CharToOemA");
+    return (*pCharToOemA)(s, d);
+}
+
+/***********************************************************************
+ *		k32OemToCharBuffA   (KERNEL32.@)
+ */
+BOOL WINAPI k32OemToCharBuffA(LPCSTR s, LPSTR d, DWORD len)
+{
+    static BOOL WINAPI (*pOemToCharBuffA)(LPCSTR, LPSTR, DWORD);
+
+    if(!pOemToCharBuffA) pOemToCharBuffA = user32_proc_address("OemToCharBuffA");
+    return (*pOemToCharBuffA)(s, d, len);
+}
+
+/***********************************************************************
+ *		k32OemToCharA   (KERNEL32.@)
+ */
+BOOL WINAPI k32OemToCharA(LPCSTR s, LPSTR d)
+{
+    static BOOL WINAPI (*pOemToCharA)(LPCSTR, LPSTR);
+
+    if(!pOemToCharA) pOemToCharA = user32_proc_address("OemToCharA");
+    return (*pOemToCharA)(s, d);
+}
+
+/**********************************************************************
+ *		k32LoadStringA   (KERNEL32.@)
+ */
+INT WINAPI k32LoadStringA(HINSTANCE instance, UINT resource_id,
+                          LPSTR buffer, INT buflen)
+{
+    static INT WINAPI (*pLoadStringA)(HINSTANCE, UINT, LPSTR, INT);
+
+    if(!pLoadStringA) pLoadStringA = user32_proc_address("LoadStringA");
+    return pLoadStringA(instance, resource_id, buffer, buflen);
+}
+
+/***********************************************************************
+ *		k32wvsprintfA   (KERNEL32.@)
+ */
+INT WINAPI k32wvsprintfA(LPSTR buffer, LPCSTR spec, va_list args)
+{
+    static INT WINAPI (*pwvsprintfA)(LPSTR, LPCSTR, va_list);
+
+    if(!pwvsprintfA) pwvsprintfA = user32_proc_address("wvsprintfA");
+    return (*pwvsprintfA)(buffer, spec, args);
+}
+
+/***********************************************************************
+ *		k32wsprintfA   (KERNEL32.@)
+ */
+INT WINAPIV k32wsprintfA(LPSTR buffer, LPCSTR spec, ...)
+{
+    va_list args;
+    INT res;
+
+    va_start(args, spec);
+    res = k32wvsprintfA(buffer, spec, args);
+    va_end(args);
+    return res;
+}






More information about the wine-patches mailing list