Piotr Caban : msvcr90: Implement _encode_pointer and _decode_pointer.

Alexandre Julliard julliard at winehq.org
Thu Mar 25 11:44:46 CDT 2010


Module: wine
Branch: master
Commit: c452249e0050a6297ff0ed87c550044d341c014b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c452249e0050a6297ff0ed87c550044d341c014b

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Thu Mar 25 11:06:29 2010 +0100

msvcr90: Implement _encode_pointer and _decode_pointer.

---

 configure                    |    4 ++--
 configure.ac                 |    4 ++--
 dlls/msvcr80/Makefile.in     |    3 +--
 dlls/msvcr80/msvcr80.spec    |    4 ++--
 dlls/msvcr90/Makefile.in     |    1 -
 dlls/msvcr90/msvcr90.c       |   21 +++++++++++++++++++++
 dlls/msvcr90/msvcr90.spec    |    4 ++--
 dlls/msvcr90/tests/msvcr90.c |   26 +++++++++++++++++++++++++-
 8 files changed, 55 insertions(+), 12 deletions(-)

diff --git a/configure b/configure
index ed41bb5..60dc4ab 100755
--- a/configure
+++ b/configure
@@ -14377,8 +14377,8 @@ wine_fn_config_test dlls/mstask/tests mstask_test
 wine_fn_config_dll msvcirt enable_msvcirt
 wine_fn_config_dll msvcr70 enable_msvcr70 msvcr70
 wine_fn_config_dll msvcr71 enable_msvcr71 msvcr71
-wine_fn_config_dll msvcr80 enable_msvcr80 msvcr80
-wine_fn_config_dll msvcr90 enable_msvcr90 msvcr90
+wine_fn_config_dll msvcr80 enable_msvcr80
+wine_fn_config_dll msvcr90 enable_msvcr90
 wine_fn_config_test dlls/msvcr90/tests msvcr90_test
 wine_fn_config_dll msvcrt enable_msvcrt msvcrt
 wine_fn_config_test dlls/msvcrt/tests msvcrt_test
diff --git a/configure.ac b/configure.ac
index 31c7170..fe11a04 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2398,8 +2398,8 @@ WINE_CONFIG_TEST(dlls/mstask/tests)
 WINE_CONFIG_DLL(msvcirt)
 WINE_CONFIG_DLL(msvcr70,,[msvcr70])
 WINE_CONFIG_DLL(msvcr71,,[msvcr71])
-WINE_CONFIG_DLL(msvcr80,,[msvcr80])
-WINE_CONFIG_DLL(msvcr90,,[msvcr90])
+WINE_CONFIG_DLL(msvcr80)
+WINE_CONFIG_DLL(msvcr90)
 WINE_CONFIG_TEST(dlls/msvcr90/tests)
 WINE_CONFIG_DLL(msvcrt,,[msvcrt])
 WINE_CONFIG_TEST(dlls/msvcrt/tests)
diff --git a/dlls/msvcr80/Makefile.in b/dlls/msvcr80/Makefile.in
index 31dae6a..a448e41 100644
--- a/dlls/msvcr80/Makefile.in
+++ b/dlls/msvcr80/Makefile.in
@@ -3,8 +3,7 @@ TOPOBJDIR = ../..
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = msvcr80.dll
-IMPORTLIB = msvcr80
-IMPORTS   = msvcrt msvcr90 kernel32
+IMPORTS   = msvcrt kernel32
 
 C_SRCS = \
 	msvcr80.c
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index 7c1e100..13a7fa1 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -360,7 +360,7 @@
 @ stub _cwscanf_s
 @ stub _cwscanf_s_l
 @ extern _daylight msvcrt._daylight
-@ stub _decode_pointer
+@ cdecl _decode_pointer(ptr) msvcr90._decode_pointer
 @ cdecl _difftime32(long long) msvcrt._difftime32
 @ cdecl _difftime64(long long) msvcrt._difftime64
 @ stub _dosmaperr
@@ -370,7 +370,7 @@
 @ stub _dupenv_s
 @ cdecl _ecvt(double long ptr ptr) msvcrt._ecvt
 @ stub _ecvt_s
-@ stub _encode_pointer
+@ cdecl _encode_pointer(ptr) msvcr90._encode_pointer
 @ stub _encoded_null
 @ cdecl _endthread() msvcrt._endthread
 @ cdecl _endthreadex(long) msvcrt._endthreadex
diff --git a/dlls/msvcr90/Makefile.in b/dlls/msvcr90/Makefile.in
index 029e2c0..613edab 100644
--- a/dlls/msvcr90/Makefile.in
+++ b/dlls/msvcr90/Makefile.in
@@ -3,7 +3,6 @@ TOPOBJDIR = ../..
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = msvcr90.dll
-IMPORTLIB = msvcr90
 IMPORTS   = msvcrt kernel32
 
 C_SRCS = \
diff --git a/dlls/msvcr90/msvcr90.c b/dlls/msvcr90/msvcr90.c
index e7baa6f..97d0921 100644
--- a/dlls/msvcr90/msvcr90.c
+++ b/dlls/msvcr90/msvcr90.c
@@ -44,6 +44,27 @@ BOOL WINAPI DllMain(HINSTANCE hdll, DWORD reason, LPVOID reserved)
     return TRUE;
 }
 
+/*********************************************************************
+ *  _decode_pointer (MSVCR90.@)
+ *
+ * cdecl version of DecodePointer
+ *
+ */
+void * CDECL MSVCR90_decode_pointer(void * ptr)
+{
+    return DecodePointer(ptr);
+}
+
+/*********************************************************************
+ *  _encode_pointer (MSVCR90.@)
+ *
+ * cdecl version of EncodePointer
+ *
+ */
+void * CDECL MSVCR90_encode_pointer(void * ptr)
+{
+    return EncodePointer(ptr);
+}
 
 /*********************************************************************
  *  _initterm_e (MSVCR90.@)
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index f95f92b..8c3138b 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -352,7 +352,7 @@
 @ stub _cwscanf_s
 @ stub _cwscanf_s_l
 @ extern _daylight msvcrt._daylight
-@ stub _decode_pointer
+@ cdecl _decode_pointer(ptr) MSVCR90_decode_pointer
 @ cdecl _difftime32(long long) msvcrt._difftime32
 @ cdecl _difftime64(long long) msvcrt._difftime64
 @ stub _dosmaperr
@@ -362,7 +362,7 @@
 @ stub _dupenv_s
 @ cdecl _ecvt(double long ptr ptr) msvcrt._ecvt
 @ stub _ecvt_s
-@ stub _encode_pointer
+@ cdecl _encode_pointer(ptr) MSVCR90_encode_pointer
 @ stub _encoded_null
 @ cdecl _endthread() msvcrt._endthread
 @ cdecl _endthreadex(long) msvcrt._endthreadex
diff --git a/dlls/msvcr90/tests/msvcr90.c b/dlls/msvcr90/tests/msvcr90.c
index ddfd781..d8b8407 100644
--- a/dlls/msvcr90/tests/msvcr90.c
+++ b/dlls/msvcr90/tests/msvcr90.c
@@ -27,6 +27,8 @@
 
 typedef int (__cdecl *_INITTERM_E_FN)(void);
 static int (__cdecl *p_initterm_e)(_INITTERM_E_FN *table, _INITTERM_E_FN *end);
+static void* (__cdecl *p_encode_pointer)(void *);
+static void* (__cdecl *p_decode_pointer)(void *);
 int cb_called[4];
 
 /* ########## */
@@ -130,6 +132,26 @@ static void test__initterm_e(void)
 
 }
 
+static void test__encode_pointer(void)
+{
+    void *ptr, *res;
+
+    if(!p_encode_pointer || !p_decode_pointer) {
+        win_skip("_encode_pointer or _decode_pointer not found\n");
+        return;
+    }
+
+    ptr = (void*)0xdeadbeef;
+    res = p_encode_pointer(ptr);
+    res = p_decode_pointer(res);
+    ok(res == ptr, "Pointers are different after encoding and decoding\n");
+
+    ptr = p_encode_pointer(p_encode_pointer);
+    res = EncodePointer(p_encode_pointer);
+    ok(ptr == res, "_encode_pointer produced different result than EncodePointer\n");
+    ok(p_decode_pointer(ptr) == p_encode_pointer, "Error decoding pointer\n");
+}
+
 /* ########## */
 
 START_TEST(msvcr90)
@@ -144,7 +166,9 @@ START_TEST(msvcr90)
     }
 
     p_initterm_e = (void *) GetProcAddress(hcrt, "_initterm_e");
+    p_encode_pointer = (void *) GetProcAddress(hcrt, "_encode_pointer");
+    p_decode_pointer = (void *) GetProcAddress(hcrt, "_decode_pointer");
 
     test__initterm_e();
-
+    test__encode_pointer();
 }




More information about the wine-cvs mailing list