public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
* sscanf doesn't handle hexadecimal floating-point input
@ 2021-04-19  4:09 Keith Thompson
  2021-04-19 15:07 ` sscanf doesn't handle hexadecimal float but strtod does Brian Inglis
  0 siblings, 1 reply; 5+ messages in thread
From: Keith Thompson @ 2021-04-19  4:09 UTC (permalink / raw)
  To: cygwin; +Cc: Keith Thompson

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.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-04-19 20:12 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-19  4:09 sscanf doesn't handle hexadecimal floating-point input Keith Thompson
2021-04-19 15:07 ` sscanf doesn't handle hexadecimal float but strtod does Brian Inglis
2021-04-19 15:17   ` should scanf be getting built supporting hexadecimal float Brian Inglis
2021-04-19 17:53     ` Corinna Vinschen
2021-04-19 20:12       ` Corinna Vinschen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).