X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fstrutil.c;h=28f202c9801547e2716d332cf56f7f67c75396c2;hb=42408643f9dcb80d1744aaa4d08e0170594daad1;hp=1f558f15ffe4c38f81818a5ef5bb1509403b71b9;hpb=51bf39a1633ca5817bc91aff19259e0a9b8fbc13;p=libsigrok.git diff --git a/src/strutil.c b/src/strutil.c index 1f558f15..28f202c9 100644 --- a/src/strutil.c +++ b/src/strutil.c @@ -621,8 +621,8 @@ SR_API int sr_parse_rational(const char *str, struct sr_rational *ret) if (str == endptr && (str[0] == '-' || str[0] == '+') && str[1] == '.') endptr += 1; - else if ((str == endptr && str[0] == '.' )) - ; + else if (str == endptr && str[0] == '.') + /* EMPTY */; else if (errno) return SR_ERR; @@ -631,8 +631,15 @@ SR_API int sr_parse_rational(const char *str, struct sr_rational *ret) errno = 0; if (*endptr == '.') { - const char* start = endptr + 1; + 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;