delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2021/04/19/11:07:28

X-Recipient: archive-cygwin AT delorie DOT com
X-Original-To: cygwin AT cygwin DOT com
Delivered-To: cygwin AT cygwin DOT com
DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 381EF3945C2B
Authentication-Results: sourceware.org; dmarc=none (p=none dis=none)
header.from=SystematicSw.ab.ca
Authentication-Results: sourceware.org;
spf=none smtp.mailfrom=brian DOT inglis AT systematicsw DOT ab DOT ca
X-Authority-Analysis: v=2.4 cv=MaypB7zf c=1 sm=1 tr=0 ts=607d9ca3
a=T+ovY1NZ+FAi/xYICV7Bgg==:117 a=T+ovY1NZ+FAi/xYICV7Bgg==:17
a=r77TgQKjGQsHNAKrUKIA:9 a=CCpqsmhAAAAA:8 a=94nOnFI1EgyDtX4ev68A:9
a=QEXdDO2ut3YA:10 a=tYCupaBcXunEOwvviW4A:9 a=JMNH9X61SiQA:10
a=ul9cdbp4aOFLsgKbc677:22
Subject: Re: sscanf doesn't handle hexadecimal float but strtod does
To: cygwin AT cygwin DOT com
References: <CAAHpriMYTdJo5qFkN1y97wZVdx-ZkuggNrxHijiZdROwY_OEFg AT mail DOT gmail DOT com>
From: Brian Inglis <Brian DOT Inglis AT SystematicSw DOT ab DOT ca>
Organization: Systematic Software
Message-ID: <189e0004-0cee-0e1d-2c2f-0acd7d8ca2fb@SystematicSw.ab.ca>
Date: Mon, 19 Apr 2021 09:07:13 -0600
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
Thunderbird/78.9.1
MIME-Version: 1.0
In-Reply-To: <CAAHpriMYTdJo5qFkN1y97wZVdx-ZkuggNrxHijiZdROwY_OEFg@mail.gmail.com>
X-CMAE-Envelope: MS4xfJ2vRnnyKSsNHlcaZhEbccAIBLEwfMFanGBFbd7oP0+3jRRst3kcksV/Y88c5kH0OqSjGFE2YAYkUK8euTH0/cPSXjTwN0/e5nRk1pkw0GbDB8FFF1/H
eV6WsQQARhrYJ4aYhgHTMj+xoqND1Sugbh9gS6rks70wOWYgFjO59dZt0om/m/1PbRWWky46LSsiTeIPsQKyR3YSFQJZmmc7XV4=
X-Spam-Status: No, score=0.3 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS,
KAM_LAZY_DOMAIN_SECURITY, NICE_REPLY_A, RCVD_IN_BARRACUDACENTRAL,
RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE,
SPF_NONE, TXREP autolearn=no autolearn_force=no version=3.4.2
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on
server2.sourceware.org
X-BeenThere: cygwin AT cygwin DOT com
X-Mailman-Version: 2.1.29
List-Id: General Cygwin discussions and problem reports <cygwin.cygwin.com>
List-Unsubscribe: <https://cygwin.com/mailman/options/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=unsubscribe>
List-Archive: <https://cygwin.com/pipermail/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-request AT cygwin DOT com?subject=help>
List-Subscribe: <https://cygwin.com/mailman/listinfo/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=subscribe>
Reply-To: cygwin AT cygwin DOT com
Errors-To: cygwin-bounces AT cygwin DOT com
Sender: "Cygwin" <cygwin-bounces AT cygwin DOT com>

This is a multi-part message in MIME format.
--------------47FED7409A8BFD92EAEE4BEE
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

On 2021-04-18 22:09, Keith Thompson via Cygwin wrote:
> The *scanf() functions don't handle hexadecimal floating-point input
> (for example "0x1p+0" representing 1.0).
> 
> A test program:
> 
> #include <stdio.h>
> int main(void) {
>      int ok = 1;
>      float x = -1.0;
>      int result = sscanf("0x1p+0", "%f", &x);
>      const float expected_x = 1.0;
>      const int expected_result = 1;
>      printf("sscanf returned %d", result);
>      if (result != expected_result) {
>          ok = 0;
>          printf(" (expected %d)", expected_result);
>      }
>      printf(", x = %g", x);
>      if (x != expected_x) {
>          ok = 0;
>          printf(" (expected %g)", expected_x);
>      }
>      puts(ok ? ", PASSED" : ", FAILED");
> }
> 
> On Cygwin, the output (compiled with gcc or clang) is:
> 
> sscanf returned 1, x = 0 (expected 1), FAILED
> 
> On Ubuntu, the output is:
> 
> sscanf returned 1, x = 1, PASSED
> 
> Looking through the newlib sources (git://sourceware.org/git/newlib-cygwin.git),
> this might be related to the _WANT_IO_C99_FORMATS macro, but I haven't
> looked into
> the details.
> 
> The test case passes on Cygwin when compiled with i686-w64-mingw32-gcc
> or x86_64-w64-mingw32-gcc.

This seems like an oversight as gdtoa-gethex.c was added about 2006 and scanf 
and strtod support it.
See augmented STC with strtod added attached:

$ gcc -o hexfloat-scanf-test{,.c}
$ ./hexfloat-scanf-test
sscanf returned 2, unscanned 'x1p+0', x = 0 (expected 1), FAILED
strtod unscanned '', x = 1, PASSED

-- 
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

This email may be disturbing to some readers as it contains
too much technical detail. Reader discretion is advised.
[Data in binary units and prefixes, physical quantities in SI.]

--------------47FED7409A8BFD92EAEE4BEE
Content-Type: text/plain; charset=UTF-8;
 name="hexfloat-scanf-test.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="hexfloat-scanf-test.c"

LyogaGV4ZmxvYXQtc2NhbmYtdGVzdC5jIC0gdGVzdCAweCNbUHBdIyBzc2NhbmYgYW5kIHN0
cnRvZCBzdXBwb3J0ICovCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5o
PgoKaW50IG1haW4odm9pZCkgewogICAgY29uc3QgZG91YmxlICAgIGV4cGVjdGVkX3gJICAg
ID0gMHgxcCswOwogICAgZG91YmxlCSAgICB4CQkgICAgPSAtMHgxcCswOwogICAgY29uc3Qg
aW50CSAgICBleHBlY3RlZF9yZXN1bHQgPSAyOwogICAgaW50CQkgICAgcmVzdWx0CSAgICA9
IDA7CiAgICBpbnQJCSAgICBvawkJICAgID0gMTsKICAgIGNvbnN0IGNoYXIgKiAgICB0ZXN0
CSAgICA9ICIweDFwKzAiOwogICAgY2hhciAqCSAgICBlbmRwCSAgICA9IE5VTEw7CiAgICBj
aGFyCSAgICBidWZmW0JVRlNJWl0gICAgPSB7IDAgfTsKCgogICAgLyogdGVzdCBzc2NhbmYo
KSAqLwogICAgcmVzdWx0ICA9IHNzY2FuZih0ZXN0LCAiJWxhICVzIiwgJngsIGJ1ZmYpOwog
ICAgcHJpbnRmKCJzc2NhbmYgcmV0dXJuZWQgJWQiLCByZXN1bHQpOwoKICAgIGlmIChyZXN1
bHQgIT0gZXhwZWN0ZWRfcmVzdWx0KSB7CiAgICAgICAgb2sgID0gMDsKICAgICAgICBwcmlu
dGYoIiAoZXhwZWN0ZWQgJWQpIiwgZXhwZWN0ZWRfcmVzdWx0KTsKICAgIH0KCiAgICBwcmlu
dGYoIiwgdW5zY2FubmVkICclcycsIHggPSAlZyIsIGJ1ZmYsIHgpOwoKICAgIGlmICh4ICE9
IGV4cGVjdGVkX3gpIHsKICAgICAgICBvayAgPSAwOwogICAgICAgIHByaW50ZigiIChleHBl
Y3RlZCAlZykiLCBleHBlY3RlZF94KTsKICAgIH0KCiAgICBwcmludGYoIiVzXG4iLCBvayA/
ICIsIFBBU1NFRCIgOiAiLCBGQUlMRUQiKTsKCiAgICAvKiB0ZXN0IHN0cnRvZCgpICovCiAg
ICB4CT0gc3RydG9kKHRlc3QsICZlbmRwKTsKCiAgICBwcmludGYoInN0cnRvZCB1bnNjYW5u
ZWQgJyVzJyIsIGVuZHApOwoKICAgIGlmICghKG9rID0gKE5VTEwgIT0gZW5kcCAmJiAhKmVu
ZHApKSkgewogICAgICAgIHByaW50ZigiIChleHBlY3RlZCAnJykiKTsKICAgIH0KCiAgICBw
cmludGYoIiwgeCA9ICVnIiwgeCk7CgogICAgaWYgKHggIT0gZXhwZWN0ZWRfeCkgewogICAg
ICAgIG9rID0gMDsKICAgICAgICBwcmludGYoIiAoZXhwZWN0ZWQgJWcpIiwgZXhwZWN0ZWRf
eCk7CiAgICB9CgogICAgcHJpbnRmKCIlc1xuIiwgb2sgPyAiLCBQQVNTRUQiIDogIiwgRkFJ
TEVEIik7Cn0KCg==
--------------47FED7409A8BFD92EAEE4BEE
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

--
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

--------------47FED7409A8BFD92EAEE4BEE--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019