1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
description: sizeof(long double)=8 on arm architectures
author: Michael Gilbert <mgilbert@debian.org>
--- a/dlls/msvcrt/string.c
+++ b/dlls/msvcrt/string.c
@@ -1240,7 +1240,13 @@ int CDECL MSVCRT__atoldbl(MSVCRT__LDOUBL
long double ld;
TRACE("str %s value %p\n",str,value);
ld = strtold(str,0);
+
+#ifdef __arm__
+ memcpy(value, &ld, 8);
+#else
memcpy(value, &ld, 10);
+#endif
+
#else
FIXME("stub, str %s value %p\n",str,value);
#endif
@@ -1256,7 +1262,13 @@ int CDECL __STRINGTOLD( MSVCRT__LDOUBLE
long double ld;
FIXME("%p %p %s %x partial stub\n", value, endptr, str, flags );
ld = strtold(str,0);
+
+#ifdef __arm__
+ memcpy(value, &ld, 8);
+#else
memcpy(value, &ld, 10);
+#endif
+
#else
FIXME("%p %p %s %x stub\n", value, endptr, str, flags );
#endif
@@ -2164,7 +2176,12 @@ int CDECL MSVCRT_I10_OUTPUT(MSVCRT__LDOU
char buf[I10_OUTPUT_MAX_PREC+9]; /* 9 = strlen("0.e+0000") + '\0' */
char *p;
+#ifdef __arm__
+ memcpy(&ld, &ld80, 8);
+#else
memcpy(&ld, &ld80, 10);
+#endif
+
d = ld;
TRACE("(%lf %d %x %p)\n", d, prec, flag, data);
|