Piotr Caban : msvcr100: Added _aligned_msize implementation.
Alexandre Julliard
julliard at winehq.org
Fri Dec 21 11:05:21 CST 2012
Module: wine
Branch: master
Commit: 6e38d5beef8fe9787004c014baec6a2f78102a58
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6e38d5beef8fe9787004c014baec6a2f78102a58
Author: Piotr Caban <piotr at codeweavers.com>
Date: Fri Dec 21 13:38:34 2012 +0100
msvcr100: Added _aligned_msize implementation.
---
dlls/msvcr100/msvcr100.c | 20 ++++++++++++++++++++
dlls/msvcr100/msvcr100.spec | 2 +-
dlls/msvcr100/tests/msvcr100.c | 33 +++++++++++++++++++++++++++++++++
dlls/msvcr80/msvcr80.spec | 2 +-
dlls/msvcr90/msvcr90.spec | 2 +-
5 files changed, 56 insertions(+), 3 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.c b/dlls/msvcr100/msvcr100.c
index f571aee..aeab2ad 100644
--- a/dlls/msvcr100/msvcr100.c
+++ b/dlls/msvcr100/msvcr100.c
@@ -483,6 +483,26 @@ int CDECL _get_timezone(LONG *timezone)
return 0;
}
+/* copied from dlls/msvcrt/heap.c */
+#define SAVED_PTR(x) ((void *)((DWORD_PTR)((char *)x - sizeof(void *)) & \
+ ~(sizeof(void *) - 1)))
+
+/*********************************************************************
+ * _aligned_msize (MSVCR100.@)
+ */
+size_t CDECL _aligned_msize(void *p, size_t alignment, size_t offset)
+{
+ void **alloc_ptr;
+
+ if(!CHECK_PMT(p)) return -1;
+
+ if(alignment < sizeof(void*))
+ alignment = sizeof(void*);
+
+ alloc_ptr = SAVED_PTR(p);
+ return _msize(*alloc_ptr)-alignment-sizeof(void*);
+}
+
/*********************************************************************
* DllMain (MSVCR100.@)
*/
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 38ae28a..a09b142 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -678,7 +678,7 @@
@ extern _acmdln msvcrt._acmdln
@ cdecl _aligned_free(ptr) msvcrt._aligned_free
@ cdecl _aligned_malloc(long long) msvcrt._aligned_malloc
-@ stub _aligned_msize
+@ cdecl _aligned_msize(ptr long long)
@ cdecl _aligned_offset_malloc(long long long) msvcrt._aligned_offset_malloc
@ cdecl _aligned_offset_realloc(ptr long long long) msvcrt._aligned_offset_realloc
@ stub _aligned_offset_recalloc
diff --git a/dlls/msvcr100/tests/msvcr100.c b/dlls/msvcr100/tests/msvcr100.c
index 143979d..99834dd 100644
--- a/dlls/msvcr100/tests/msvcr100.c
+++ b/dlls/msvcr100/tests/msvcr100.c
@@ -72,6 +72,9 @@ static int (__cdecl *p_wmemmove_s)(wchar_t *dest, size_t numberOfElements, const
static FILE* (__cdecl *p_fopen)(const char*,const char*);
static int (__cdecl *p_fclose)(FILE*);
static size_t (__cdecl *p_fread_s)(void*,size_t,size_t,size_t,FILE*);
+static void* (__cdecl *p__aligned_offset_malloc)(size_t, size_t, size_t);
+static void (__cdecl *p__aligned_free)(void*);
+static size_t (__cdecl *p__aligned_msize)(void*, size_t, size_t);
/* make sure we use the correct errno */
#undef errno
@@ -98,6 +101,9 @@ static BOOL init(void)
SET(p_fopen, "fopen");
SET(p_fclose, "fclose");
SET(p_fread_s, "fread_s");
+ SET(p__aligned_offset_malloc, "_aligned_offset_malloc");
+ SET(p__aligned_free, "_aligned_free");
+ SET(p__aligned_msize, "_aligned_msize");
return TRUE;
}
@@ -326,6 +332,32 @@ static void test_fread_s(void)
unlink(test_file);
}
+static void test__aligned_msize(void)
+{
+ void *mem;
+ int ret;
+
+ mem = p__aligned_offset_malloc(23, 16, 7);
+ ret = p__aligned_msize(mem, 16, 7);
+ ok(ret == 23, "_aligned_msize returned %d\n", ret);
+ ret = p__aligned_msize(mem, 15, 7);
+ ok(ret == 24, "_aligned_msize returned %d\n", ret);
+ ret = p__aligned_msize(mem, 11, 7);
+ ok(ret == 28, "_aligned_msize returned %d\n", ret);
+ ret = p__aligned_msize(mem, 1, 7);
+ ok(ret == 39-sizeof(void*), "_aligned_msize returned %d\n", ret);
+ ret = p__aligned_msize(mem, 8, 0);
+ todo_wine ok(ret == 32, "_aligned_msize returned %d\n", ret);
+ p__aligned_free(mem);
+
+ mem = p__aligned_offset_malloc(3, 16, 0);
+ ret = p__aligned_msize(mem, 16, 0);
+ ok(ret == 3, "_aligned_msize returned %d\n", ret);
+ ret = p__aligned_msize(mem, 11, 0);
+ ok(ret == 8, "_aligned_msize returned %d\n", ret);
+ p__aligned_free(mem);
+}
+
START_TEST(msvcr100)
{
if (!init())
@@ -334,4 +366,5 @@ START_TEST(msvcr100)
test_wmemcpy_s();
test_wmemmove_s();
test_fread_s();
+ test__aligned_msize();
}
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index c9469e7..4457c2c 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -334,7 +334,7 @@
@ extern _aexit_rtn msvcrt._aexit_rtn
@ cdecl _aligned_free(ptr) msvcrt._aligned_free
@ cdecl _aligned_malloc(long long) msvcrt._aligned_malloc
-@ stub _aligned_msize
+@ cdecl _aligned_msize(ptr long long) msvcr100._aligned_msize
@ cdecl _aligned_offset_malloc(long long long) msvcrt._aligned_offset_malloc
@ cdecl _aligned_offset_realloc(ptr long long long) msvcrt._aligned_offset_realloc
@ stub _aligned_offset_recalloc
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index bf54f0a..c20c5fd 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -326,7 +326,7 @@
@ extern _aexit_rtn msvcrt._aexit_rtn
@ cdecl _aligned_free(ptr) msvcrt._aligned_free
@ cdecl _aligned_malloc(long long) msvcrt._aligned_malloc
-@ stub _aligned_msize
+@ cdecl _aligned_msize(ptr long long) msvcr100._aligned_msize
@ cdecl _aligned_offset_malloc(long long long) msvcrt._aligned_offset_malloc
@ cdecl _aligned_offset_realloc(ptr long long long) msvcrt._aligned_offset_realloc
@ stub _aligned_offset_recalloc
More information about the wine-cvs
mailing list