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