From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out-so.shaw.ca (smtp-out-so.shaw.ca [64.59.136.138]) by sourceware.org (Postfix) with ESMTPS id 381EF3945C2B for ; Mon, 19 Apr 2021 15:07:17 +0000 (GMT) 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.inglis@systematicsw.ab.ca Received: from [192.168.1.104] ([68.147.0.90]) by shaw.ca with ESMTP id YVUYlOKB7HmS3YVUZluGH1; Mon, 19 Apr 2021 09:07:15 -0600 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 Reply-To: cygwin@cygwin.com Subject: Re: sscanf doesn't handle hexadecimal float but strtod does To: cygwin@cygwin.com References: From: Brian Inglis 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: Content-Type: multipart/mixed; boundary="------------47FED7409A8BFD92EAEE4BEE" Content-Language: en-CA 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@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Cygwin discussions and problem reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 19 Apr 2021 15:07:22 -0000 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 > 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--