From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 102354 invoked by alias); 17 Aug 2018 09:37:22 -0000 Mailing-List: contact newlib-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: newlib-cvs-owner@sourceware.org Received: (qmail 102036 invoked by uid 9078); 17 Aug 2018 09:37:21 -0000 Date: Fri, 17 Aug 2018 09:37:00 -0000 Message-ID: <20180817093721.102029.qmail@sourceware.org> Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Corinna Vinschen To: newlib-cvs@sourceware.org Subject: [newlib-cygwin] Fix strtof ("-nan") returns positive NaN X-Act-Checkin: newlib-cygwin X-Git-Author: Masamichi Hosoda X-Git-Refname: refs/heads/master X-Git-Oldrev: 4c8fa88e4da3afdcb48236a4317beb303c4bd955 X-Git-Newrev: c8d4c99ecd84efb9f47d2af7ce52d5996d17d4a4 X-SW-Source: 2018-q3/txt/msg00048.txt.bz2 https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=c8d4c99ecd84efb9f47d2af7ce52d5996d17d4a4 commit c8d4c99ecd84efb9f47d2af7ce52d5996d17d4a4 Author: Masamichi Hosoda Date: Wed Aug 15 08:39:22 2018 +0900 Fix strtof ("-nan") returns positive NaN strtof ("-nan") returned positive NaN instead of negative NaN. strtod ("-nan") and strtold ("-nan") return negative NaN. Linux glibc has been fixed that strto{f|d|ld} ("-nan") returns negative NaN. https://sourceware.org/bugzilla/show_bug.cgi?id=23007 This commit makes strtof preserves the negative sign bit when parsing "-nan" like glibc. Diff: --- newlib/libc/stdlib/strtod.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/newlib/libc/stdlib/strtod.c b/newlib/libc/stdlib/strtod.c index 3164e30..431d3ab 100644 --- a/newlib/libc/stdlib/strtod.c +++ b/newlib/libc/stdlib/strtod.c @@ -1289,7 +1289,7 @@ strtof_l (const char *__restrict s00, char **__restrict se, locale_t loc) { double val = _strtod_l (_REENT, s00, se, loc); if (isnan (val)) - return nanf (NULL); + return signbit (val) ? -nanf (NULL) : nanf (NULL); float retval = (float) val; #ifndef NO_ERRNO if (isinf (retval) && !isinf (val)) @@ -1304,7 +1304,7 @@ strtof (const char *__restrict s00, { double val = _strtod_l (_REENT, s00, se, __get_current_locale ()); if (isnan (val)) - return nanf (NULL); + return signbit (val) ? -nanf (NULL) : nanf (NULL); float retval = (float) val; #ifndef NO_ERRNO if (isinf (retval) && !isinf (val))