Fix a portability problem on x86.
authorBruno Haible <bruno@clisp.org>
Sat, 17 Mar 2007 20:07:01 +0000 (20:07 +0000)
committerBruno Haible <bruno@clisp.org>
Sat, 17 Mar 2007 20:07:01 +0000 (20:07 +0000)
ChangeLog
lib/vasnprintf.c

index 985a34be514a85e16538bee0c3085480a57b0ae6..9902b251881064b126de56c7fc2c1652e2695323 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-03-17  Bruno Haible  <bruno@clisp.org>
+
+       * lib/vasnprintf.c (VASNPRINTF): Clear out the memory used for arg_mem
+       before comparing it. Needed because on some platforms (e.g. x86) a
+       'long double' occupies less bytes than sizeof (long double).
+
 2007-03-17  Bruno Haible  <bruno@clisp.org>
 
        * tests/test-crc.c (main): Make printf statements 64-bit clean.
index 34d2a4687638ae7fe12fe496a8c289159673bc20..b13dbd5ee1e8af264b05b57b2b0e4db6d7f5ab0b 100644 (file)
@@ -419,7 +419,9 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar
                          {
                            /* Distinguish 0.0L and -0.0L.  */
                            static long double plus_zero = 0.0L;
-                           long double arg_mem = arg;
+                           long double arg_mem;
+                           memset (&arg_mem, 0, sizeof (long double));
+                           arg_mem = arg;
                            if (memcmp (&plus_zero, &arg_mem, sizeof (long double)) != 0)
                              {
                                sign = -1;
@@ -567,7 +569,9 @@ VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list ar
                          {
                            /* Distinguish 0.0 and -0.0.  */
                            static double plus_zero = 0.0;
-                           double arg_mem = arg;
+                           double arg_mem;
+                           memset (&arg_mem, 0, sizeof (double));
+                           arg_mem = arg;
                            if (memcmp (&plus_zero, &arg_mem, sizeof (double)) != 0)
                              {
                                sign = -1;