diff --git a/library/amiga.lib_rev.h b/library/amiga.lib_rev.h index ef035ea..cb02492 100644 --- a/library/amiga.lib_rev.h +++ b/library/amiga.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 166 -#define DATE "28.7.2004" -#define VERS "amiga.lib 1.166" -#define VSTRING "amiga.lib 1.166 (28.7.2004)\r\n" -#define VERSTAG "\0$VER: amiga.lib 1.166 (28.7.2004)" +#define REVISION 167 +#define DATE "29.7.2004" +#define VERS "amiga.lib 1.167" +#define VSTRING "amiga.lib 1.167 (29.7.2004)\r\n" +#define VERSTAG "\0$VER: amiga.lib 1.167 (29.7.2004)" diff --git a/library/amiga.lib_rev.rev b/library/amiga.lib_rev.rev index cdffbbc..f2c1eee 100644 --- a/library/amiga.lib_rev.rev +++ b/library/amiga.lib_rev.rev @@ -1 +1 @@ -166 +167 diff --git a/library/c.lib_rev.h b/library/c.lib_rev.h index 8083102..de588b4 100644 --- a/library/c.lib_rev.h +++ b/library/c.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 166 -#define DATE "28.7.2004" -#define VERS "c.lib 1.166" -#define VSTRING "c.lib 1.166 (28.7.2004)\r\n" -#define VERSTAG "\0$VER: c.lib 1.166 (28.7.2004)" +#define REVISION 167 +#define DATE "29.7.2004" +#define VERS "c.lib 1.167" +#define VSTRING "c.lib 1.167 (29.7.2004)\r\n" +#define VERSTAG "\0$VER: c.lib 1.167 (29.7.2004)" diff --git a/library/c.lib_rev.rev b/library/c.lib_rev.rev index cdffbbc..f2c1eee 100644 --- a/library/c.lib_rev.rev +++ b/library/c.lib_rev.rev @@ -1 +1 @@ -166 +167 diff --git a/library/debug.lib_rev.h b/library/debug.lib_rev.h index 0b2d798..fc1258b 100644 --- a/library/debug.lib_rev.h +++ b/library/debug.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 166 -#define DATE "28.7.2004" -#define VERS "debug.lib 1.166" -#define VSTRING "debug.lib 1.166 (28.7.2004)\r\n" -#define VERSTAG "\0$VER: debug.lib 1.166 (28.7.2004)" +#define REVISION 167 +#define DATE "29.7.2004" +#define VERS "debug.lib 1.167" +#define VSTRING "debug.lib 1.167 (29.7.2004)\r\n" +#define VERSTAG "\0$VER: debug.lib 1.167 (29.7.2004)" diff --git a/library/debug.lib_rev.rev b/library/debug.lib_rev.rev index cdffbbc..f2c1eee 100644 --- a/library/debug.lib_rev.rev +++ b/library/debug.lib_rev.rev @@ -1 +1 @@ -166 +167 diff --git a/library/m.lib_rev.h b/library/m.lib_rev.h index 48f2d94..c46cf04 100644 --- a/library/m.lib_rev.h +++ b/library/m.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 166 -#define DATE "28.7.2004" -#define VERS "m.lib 1.166" -#define VSTRING "m.lib 1.166 (28.7.2004)\r\n" -#define VERSTAG "\0$VER: m.lib 1.166 (28.7.2004)" +#define REVISION 167 +#define DATE "29.7.2004" +#define VERS "m.lib 1.167" +#define VSTRING "m.lib 1.167 (29.7.2004)\r\n" +#define VERSTAG "\0$VER: m.lib 1.167 (29.7.2004)" diff --git a/library/m.lib_rev.rev b/library/m.lib_rev.rev index cdffbbc..f2c1eee 100644 --- a/library/m.lib_rev.rev +++ b/library/m.lib_rev.rev @@ -1 +1 @@ -166 +167 diff --git a/library/m881.lib_rev.h b/library/m881.lib_rev.h index 5fd1ac7..3bf1e48 100644 --- a/library/m881.lib_rev.h +++ b/library/m881.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 166 -#define DATE "28.7.2004" -#define VERS "m881.lib 1.166" -#define VSTRING "m881.lib 1.166 (28.7.2004)\r\n" -#define VERSTAG "\0$VER: m881.lib 1.166 (28.7.2004)" +#define REVISION 167 +#define DATE "29.7.2004" +#define VERS "m881.lib 1.167" +#define VSTRING "m881.lib 1.167 (29.7.2004)\r\n" +#define VERSTAG "\0$VER: m881.lib 1.167 (29.7.2004)" diff --git a/library/m881.lib_rev.rev b/library/m881.lib_rev.rev index cdffbbc..f2c1eee 100644 --- a/library/m881.lib_rev.rev +++ b/library/m881.lib_rev.rev @@ -1 +1 @@ -166 +167 diff --git a/library/net.lib_rev.h b/library/net.lib_rev.h index c7cf8ed..d2fd62d 100644 --- a/library/net.lib_rev.h +++ b/library/net.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 166 -#define DATE "28.7.2004" -#define VERS "net.lib 1.166" -#define VSTRING "net.lib 1.166 (28.7.2004)\r\n" -#define VERSTAG "\0$VER: net.lib 1.166 (28.7.2004)" +#define REVISION 167 +#define DATE "29.7.2004" +#define VERS "net.lib 1.167" +#define VSTRING "net.lib 1.167 (29.7.2004)\r\n" +#define VERSTAG "\0$VER: net.lib 1.167 (29.7.2004)" diff --git a/library/net.lib_rev.rev b/library/net.lib_rev.rev index cdffbbc..f2c1eee 100644 --- a/library/net.lib_rev.rev +++ b/library/net.lib_rev.rev @@ -1 +1 @@ -166 +167 diff --git a/library/releasenotes b/library/releasenotes index 48363e5..e143818 100644 --- a/library/releasenotes +++ b/library/releasenotes @@ -1,3 +1,10 @@ +c.lib 1.167 (29.7.2004) + +- Modified __is_infinity() and __is_not_a_number() to use more portable + methods for accessing the low level representation of the IEEE 754 + numbers they work on. + + c.lib 1.166 (28.7.2004) - Added h_strerror() function to libnet.a; there's a global 'h_errno' diff --git a/library/stack.lib_rev.h b/library/stack.lib_rev.h index 579d7a8..25133a3 100644 --- a/library/stack.lib_rev.h +++ b/library/stack.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 166 -#define DATE "28.7.2004" -#define VERS "stack.lib 1.166" -#define VSTRING "stack.lib 1.166 (28.7.2004)\r\n" -#define VERSTAG "\0$VER: stack.lib 1.166 (28.7.2004)" +#define REVISION 167 +#define DATE "29.7.2004" +#define VERS "stack.lib 1.167" +#define VSTRING "stack.lib 1.167 (29.7.2004)\r\n" +#define VERSTAG "\0$VER: stack.lib 1.167 (29.7.2004)" diff --git a/library/stack.lib_rev.rev b/library/stack.lib_rev.rev index cdffbbc..f2c1eee 100644 --- a/library/stack.lib_rev.rev +++ b/library/stack.lib_rev.rev @@ -1 +1 @@ -166 +167 diff --git a/library/stdio_isinfinity.c b/library/stdio_isinfinity.c index 800c008..69f82c7 100644 --- a/library/stdio_isinfinity.c +++ b/library/stdio_isinfinity.c @@ -1,5 +1,5 @@ /* - * $Id: stdio_isinfinity.c,v 1.1.1.1 2004-07-26 16:31:37 obarthel Exp $ + * $Id: stdio_isinfinity.c,v 1.2 2004-07-29 08:14:49 obarthel Exp $ * * :ts=4 * @@ -39,11 +39,32 @@ #if defined (FLOATING_POINT_SUPPORT) +/****************************************************************************/ + +union ieee_long_double +{ + long double value; + unsigned long raw[3]; +}; + +union ieee_double +{ + double value; + unsigned long raw[2]; +}; + +union ieee_single +{ + float value; + unsigned long raw[1]; +}; + +/****************************************************************************/ + int __is_infinity(long double number) { - const unsigned long * const raw = (const unsigned long * const)&number; - int result = 0; + int result; ENTER(); @@ -52,26 +73,35 @@ __is_infinity(long double number) */ if(sizeof(number) == 4) /* single precision */ { + union ieee_single x; + + x.value = number; + /* Exponent = 255 and fraction = 0.0 */ - if((raw[0] & 0x7FFFFFFF) == 0x7F800000) - result = 1; + result = ((x.raw[0] & 0x7FFFFFFF) == 0x7F800000); } else if (sizeof(number) == 8) /* double precision */ { + union ieee_double x; + + x.value = number; + /* Exponent = 2047 and fraction = 0.0 */ - if(((raw[0] & 0x7FFFFFFF) == 0x7FF00000) && (raw[1] == 0)) - { - result = 1; - } + result = (((x.raw[0] & 0x7FFFFFFF) == 0x7FF00000) && (x.raw[1] == 0)); } else if (sizeof(number) == 12) /* extended precision */ { + union ieee_long_double x; + + x.value = number; + /* Exponent = 32767 and fraction = 0.0 */ - if(((raw[0] & 0x7FFF0000) == 0x7FFF0000) && - (raw[1] & 0x7FFFFFFF) == 0 && (raw[2] == 0)) - { - result = 1; - } + result = (((x.raw[0] & 0x7FFF0000) == 0x7FFF0000) && (x.raw[1] & 0x7FFFFFFF) == 0 && (x.raw[2] == 0)); + } + else + { + /* Can't happen */ + result = 0; } RETURN(result); diff --git a/library/stdio_isnotanumber.c b/library/stdio_isnotanumber.c index b0f3222..0773e8c 100644 --- a/library/stdio_isnotanumber.c +++ b/library/stdio_isnotanumber.c @@ -1,5 +1,5 @@ /* - * $Id: stdio_isnotanumber.c,v 1.1.1.1 2004-07-26 16:31:37 obarthel Exp $ + * $Id: stdio_isnotanumber.c,v 1.2 2004-07-29 08:14:49 obarthel Exp $ * * :ts=4 * @@ -39,11 +39,32 @@ #if defined (FLOATING_POINT_SUPPORT) +/****************************************************************************/ + +union ieee_long_double +{ + long double value; + unsigned long raw[3]; +}; + +union ieee_double +{ + double value; + unsigned long raw[2]; +}; + +union ieee_single +{ + float value; + unsigned long raw[1]; +}; + +/****************************************************************************/ + int __is_not_a_number(long double number) { - const unsigned long * const raw = (const unsigned long * const)&number; - int result = 0; + int result; ENTER(); @@ -52,30 +73,35 @@ __is_not_a_number(long double number) */ if(sizeof(number) == 4) /* single precision */ { + union ieee_single x; + + x.value = number; + /* Exponent = 255 and fraction != 0.0 */ - if((raw[0] & 0x7F800000) == 0x7F800000 && - (raw[0] & 0x007FFFFF) != 0) - { - result = 1; - } + result = ((x.raw[0] & 0x7F800000) == 0x7F800000 && (x.raw[0] & 0x007FFFFF) != 0); } else if (sizeof(number) == 8) /* double precision */ { + union ieee_double x; + + x.value = number; + /* Exponent = 2047 and fraction != 0.0 */ - if(((raw[0] & 0x7FF00000) == 0x7FF00000) && - ((raw[0] & 0x000FFFFF) != 0 || (raw[1] != 0))) - { - result = 1; - } + result = (((x.raw[0] & 0x7FF00000) == 0x7FF00000) && ((x.raw[0] & 0x000FFFFF) != 0 || (x.raw[1] != 0))); } else if (sizeof(number) == 12) /* extended precision */ { + union ieee_long_double x; + + x.value = number; + /* Exponent = 32767 and fraction != 0.0 */ - if(((raw[0] & 0x7FFF0000) == 0x7FFF0000) && - ((raw[1] & 0x7FFFFFFF) != 0 || raw[2] != 0)) - { - result = 1; - } + result = (((x.raw[0] & 0x7FFF0000) == 0x7FFF0000) && ((x.raw[1] & 0x7FFFFFFF) != 0 || x.raw[2] != 0)); + } + else + { + /* Can't happen */ + result = 0; } RETURN(result); diff --git a/library/unix.lib_rev.h b/library/unix.lib_rev.h index 934eeca..c85b6c9 100644 --- a/library/unix.lib_rev.h +++ b/library/unix.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 166 -#define DATE "28.7.2004" -#define VERS "unix.lib 1.166" -#define VSTRING "unix.lib 1.166 (28.7.2004)\r\n" -#define VERSTAG "\0$VER: unix.lib 1.166 (28.7.2004)" +#define REVISION 167 +#define DATE "29.7.2004" +#define VERS "unix.lib 1.167" +#define VSTRING "unix.lib 1.167 (29.7.2004)\r\n" +#define VERSTAG "\0$VER: unix.lib 1.167 (29.7.2004)" diff --git a/library/unix.lib_rev.rev b/library/unix.lib_rev.rev index cdffbbc..f2c1eee 100644 --- a/library/unix.lib_rev.rev +++ b/library/unix.lib_rev.rev @@ -1 +1 @@ -166 +167