Jörg Höhle : msvcrt/tests: sizeof(long double) is 12 with MS.
Alexandre Julliard
julliard at winehq.org
Thu Feb 17 13:06:36 CST 2011
Module: wine
Branch: master
Commit: d9d43231371171ba128d391cfb37cc167e7651cc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d9d43231371171ba128d391cfb37cc167e7651cc
Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date: Tue Dec 28 23:02:12 2010 +0100
msvcrt/tests: sizeof(long double) is 12 with MS.
---
dlls/msvcrt/tests/misc.c | 15 +++++++++++++--
1 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/dlls/msvcrt/tests/misc.c b/dlls/msvcrt/tests/misc.c
index a4a1bd3..d93dccf 100644
--- a/dlls/msvcrt/tests/misc.c
+++ b/dlls/msvcrt/tests/misc.c
@@ -170,17 +170,28 @@ static const I10_OUTPUT_test I10_OUTPUT_tests[] = {
static void test_I10_OUTPUT(void)
{
I10_OUTPUT_data out;
- int i, j, ret;
+ int i, j = sizeof(long double), ret;
if(!pI10_OUTPUT) {
win_skip("I10_OUTPUT not available\n");
return;
}
+ if (j != 12)
+ trace("sizeof(long double) = %d on this machine\n", j);
for(i=0; i<sizeof(I10_OUTPUT_tests)/sizeof(I10_OUTPUT_test); i++) {
memset(out.str, '#', sizeof(out.str));
- ret = pI10_OUTPUT(I10_OUTPUT_tests[i].d, I10_OUTPUT_tests[i].size, I10_OUTPUT_tests[i].flags, &out);
+ if (sizeof(long double) == 12)
+ ret = pI10_OUTPUT(I10_OUTPUT_tests[i].d, I10_OUTPUT_tests[i].size, I10_OUTPUT_tests[i].flags, &out);
+ else {
+ /* MS' "long double" is an 80 bit FP that takes 12 bytes*/
+ typedef struct { ULONG x80[3]; } uld; /* same calling convention */
+ union { long double ld; uld ld12; } fp80;
+ int (__cdecl *pI10_OUTPUT12)(uld, int, int, void*) = (void*)pI10_OUTPUT;
+ fp80.ld = I10_OUTPUT_tests[i].d;
+ ret = pI10_OUTPUT12(fp80.ld12, I10_OUTPUT_tests[i].size, I10_OUTPUT_tests[i].flags, &out);
+ }
ok(ret == I10_OUTPUT_tests[i].ret, "%d: ret = %d\n", i, ret);
ok(out.pos == I10_OUTPUT_tests[i].out.pos, "%d: out.pos = %hd\n", i, out.pos);
ok(out.sign == I10_OUTPUT_tests[i].out.sign, "%d: out.size = %c\n", i, out.sign);
More information about the wine-cvs
mailing list