bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#722: More Visual Studio 6.0 compiler errors on Windows XP


From: Francis Litterio
Subject: bug#722: More Visual Studio 6.0 compiler errors on Windows XP
Date: Fri, 15 Aug 2008 09:35:11 -0400
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.1.50 (windows-nt)

Andreas Schwab wrote:

> Francis Litterio writes:
>
>> --- dired.c~ 2008-08-14 17:09:53.759788900 -0400
>> +++ dired.c  2008-08-14 17:13:16.585787100 -0400
>> @@ -961,7 +961,7 @@
>>    values[7] = make_number (s.st_size);
>>    /* If the size is out of range for an integer, return a float.  */
>>    if (XINT (values[7]) != s.st_size)
>> -    values[7] = make_float ((double)s.st_size);
>> +    values[7] = make_float ((signed __int64)s.st_size);
>
> Tell Microsoft to fix their compiler, you are changeing perfectly valid
> C into unportable junk.

You are preaching to the choir. :) I just want a clean build on Windows.
Emacs has always compiled using VC++ 6.0 in the past, so some change
must have introduced this problem.

I forgot that dired.c is not Windows-only code, so this patch is more
correct:

--- dired.c~    31 Jul 2008 05:33:51 -0000      1.153
+++ dired.c     15 Aug 2008 14:04:04 -0000
@@ -961,7 +961,11 @@
   values[7] = make_number (s.st_size);
   /* If the size is out of range for an integer, return a float.  */
   if (XINT (values[7]) != s.st_size)
+#if defined(WINDOWSNT)
+    values[7] = make_float ((signed __int64)s.st_size);
+#else
     values[7] = make_float ((double)s.st_size);
+#endif
   /* If the size is negative, and its type is long, convert it back to
      positive.  */
   if (s.st_size < 0 && sizeof (s.st_size) == sizeof (long))

Also, a 64-bit integer (signed or unsigned) cannot safely be cast to
double without loss of data.  An IEEE 754 64-bit floating value only has
52-bits of mantissa.  So the non-Windows implementation is not 100%
correct either.
--
Fran






reply via email to

[Prev in Thread] Current Thread [Next in Thread]