]> sigrok.org Git - libsigrok.git/commitdiff
strutil: handle empty fractional in parse rational
authorGerhard Sittig <redacted>
Thu, 19 Jul 2018 19:05:54 +0000 (21:05 +0200)
committerUwe Hermann <redacted>
Sun, 22 Jul 2018 14:36:15 +0000 (16:36 +0200)
Accept numbers like "123." where the period (dot) is present yet the
fractional part is empty. Adding a period but no additional digits is a
popular method of turning an otherwise integer literal into a float.
Compilers and strtod() routines accept this notation, too, so we have to
expect seeing such input.

src/strutil.c

index 99e711d97b367d472bb8635f3a1dacb2ec9d3c16..28f202c9801547e2716d332cf56f7f67c75396c2 100644 (file)
@@ -631,8 +631,15 @@ SR_API int sr_parse_rational(const char *str, struct sr_rational *ret)
 
        errno = 0;
        if (*endptr == '.') {
+               bool is_exp, is_eos;
                const char *start = endptr + 1;
                fractional = g_ascii_strtoll(start, &endptr, 10);
+               is_exp = *endptr == 'E' || *endptr == 'e';
+               is_eos = *endptr == '\0';
+               if (endptr == start && (is_exp || is_eos)) {
+                       fractional = 0;
+                       errno = 0;
+               }
                if (errno)
                        return SR_ERR;
                fractional_len = endptr - start;