From c5c64928681a8216c0dae19937d54a7e0d88a36c Mon Sep 17 00:00:00 2001 From: Olaf Barthel Date: Thu, 12 May 2005 14:00:54 +0000 Subject: [PATCH] - fflush() no longer calls flockfile()/funlockfile() with a NULL parameter. - Removed the old isinf() and isnan() functions. git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14944 87f5fb63-7c3d-0410-a384-fd976d0f7a62 --- library/math_isinf.c | 111 ----------------------------------------- library/math_isnan.c | 98 ------------------------------------ library/stdio_fflush.c | 20 ++------ 3 files changed, 5 insertions(+), 224 deletions(-) delete mode 100755 library/math_isinf.c delete mode 100755 library/math_isnan.c diff --git a/library/math_isinf.c b/library/math_isinf.c deleted file mode 100755 index 60ce973..0000000 --- a/library/math_isinf.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * $Id: math_isinf.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $ - * - * :ts=4 - * - * Portable ISO 'C' (1994) runtime library for the Amiga computer - * Copyright (c) 2002-2005 by Olaf Barthel - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Neither the name of Olaf Barthel nor the names of contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _STDIO_HEADERS_H -#include "stdio_headers.h" -#endif /* _STDIO_HEADERS_H */ - -/****************************************************************************/ - -#if defined (FLOATING_POINT_SUPPORT) - -/****************************************************************************/ - -/* The following is not part of the ISO 'C' (1994) standard. */ - -/****************************************************************************/ - -int -isinf(double number) -{ - int is_infinity; - int result; - - ENTER(); - - /* This assumes that a) 'number' is stored in big endian format - and b) it is stored in IEEE 754 format. */ - if (sizeof(number) == 4) /* single precision */ - { - union ieee_single x; - - x.value = number; - - /* Exponent = 255 and fraction = 0.0 */ - is_infinity = ((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 */ - is_infinity = (((x.raw[0] & 0x7FFFFFFF) == 0x7FF00000) && (x.raw[1] == 0)); - } -#if defined(USE_LONG_DOUBLE) - else if (sizeof(number) == 12) /* extended precision */ - { - union ieee_long_double x; - - x.value = number; - - /* Exponent = 32767 and fraction = 0.0 */ - is_infinity = (((x.raw[0] & 0x7FFF0000) == 0x7FFF0000) && (x.raw[1] & 0x7FFFFFFF) == 0 && (x.raw[2] == 0)); - } -#endif /* USE_LONG_DOUBLE */ - else - { - /* Can't happen */ - is_infinity = 0; - } - - if(is_infinity) - { - if(number < 0) - result = -1; - else - result = 1; - } - else - { - result = 0; - } - - RETURN(result); - return(result); -} - -/****************************************************************************/ - -#endif /* FLOATING_POINT_SUPPORT */ diff --git a/library/math_isnan.c b/library/math_isnan.c deleted file mode 100755 index 5a2c620..0000000 --- a/library/math_isnan.c +++ /dev/null @@ -1,98 +0,0 @@ -/* - * $Id: math_isnan.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $ - * - * :ts=4 - * - * Portable ISO 'C' (1994) runtime library for the Amiga computer - * Copyright (c) 2002-2005 by Olaf Barthel - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Neither the name of Olaf Barthel nor the names of contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _STDIO_HEADERS_H -#include "stdio_headers.h" -#endif /* _STDIO_HEADERS_H */ - -/****************************************************************************/ - -#if defined (FLOATING_POINT_SUPPORT) - -/****************************************************************************/ - -/* The following is not part of the ISO 'C' (1994) standard. */ - -/****************************************************************************/ - -int -isnan(double number) -{ - int result; - - ENTER(); - - /* This assumes that a) 'number' is stored in big endian format - and b) it is stored in IEEE 754 format. */ - if (sizeof(number) == 4) /* single precision */ - { - union ieee_single x; - - x.value = number; - - /* Exponent = 255 and fraction != 0.0 */ - 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 */ - result = (((x.raw[0] & 0x7FF00000) == 0x7FF00000) && ((x.raw[0] & 0x000FFFFF) != 0 || (x.raw[1] != 0))); - } -#if defined(USE_LONG_DOUBLE) - else if (sizeof(number) == 12) /* extended precision */ - { - union ieee_long_double x; - - x.value = number; - - /* Exponent = 32766 and fraction != 0.0 */ - result = (((x.raw[0] & 0x7FFF0000) == 0x7FFF0000) && ((x.raw[1] & 0x7FFFFFFF) != 0 || x.raw[2] != 0)); - } -#endif /* USE_LONG_DOUBLE */ - else - { - /* Can't happen */ - result = 0; - } - - RETURN(result); - return(result); -} - -/****************************************************************************/ - -#endif /* FLOATING_POINT_SUPPORT */ diff --git a/library/stdio_fflush.c b/library/stdio_fflush.c index 92abba8..fb0c0af 100644 --- a/library/stdio_fflush.c +++ b/library/stdio_fflush.c @@ -1,5 +1,5 @@ /* - * $Id: stdio_fflush.c,v 1.9 2005-05-12 13:21:43 obarthel Exp $ + * $Id: stdio_fflush.c,v 1.10 2005-05-12 14:00:54 obarthel Exp $ * * :ts=4 * @@ -55,19 +55,6 @@ fflush(FILE *stream) if(__check_abort_enabled) __check_abort(); - /* Subtlety alert: the thread-safe library needs to obtain locks for - stdio, buffered files and file descriptors in a very particular - order in order to steer clear of deadlocks. The order is as given - above: stdio, buffered files, file descriptor table entries. Which - normally means that if code has any business locking stdio or the - file descriptor table entries, it should lock stdio first. This - function, at least in the UNIX_PATH_SEMANTICS variant, does not do - this. Here's why: if the 'stream' variable is NULL to start with, - no per-stream locking is performed anyway, and the stdio lock can - be obtained without running the risk of having obtain semaphores - in the wrong order. */ - flockfile(stream); - /* Flush a particular stream? */ if(stream != NULL) { @@ -75,6 +62,8 @@ fflush(FILE *stream) assert( __is_valid_iob(file) ); + flockfile(stream); + if(__iob_write_buffer_is_valid(file) && __flush_iob_write_buffer(file) < 0) goto out; } @@ -111,7 +100,8 @@ fflush(FILE *stream) out: - funlockfile(stream); + if(stream != NULL) + funlockfile(stream); RETURN(result); return(result);