]> sigrok.org Git - libsigrok.git/blobdiff - src/strutil.c
scpi-pps: Add a missing "break" in config_get().
[libsigrok.git] / src / strutil.c
index 07ed7b4491ed8b8a6ebd787b6a6ebe25ee7717b9..73c9fc6af4a85459b75c659ede5421c2ac3f6688 100644 (file)
@@ -33,7 +33,6 @@
 #include <string.h>
 #include <strings.h>
 #include <errno.h>
-#include <stdbool.h>
 #include <libsigrok/libsigrok.h>
 #include "libsigrok-internal.h"
 
@@ -614,7 +613,8 @@ SR_API int sr_parse_rational(const char *str, struct sr_rational *ret)
        int64_t denominator = 1;
        int32_t fractional_len = 0;
        int32_t exponent = 0;
-       bool is_negative = false;
+       gboolean is_negative = FALSE;
+       gboolean no_integer, no_fractional;
 
        while (isspace(*str))
                str++;
@@ -622,19 +622,23 @@ SR_API int sr_parse_rational(const char *str, struct sr_rational *ret)
        errno = 0;
        integral = g_ascii_strtoll(str, &endptr, 10);
 
-       if (str == endptr && (str[0] == '-' || str[0] == '+') && str[1] == '.')
+       if (str == endptr && (str[0] == '-' || str[0] == '+') && str[1] == '.') {
                endptr += 1;
-       else if (str == endptr && str[0] == '.')
-               /* EMPTY */;
-       else if (errno)
+               no_integer = TRUE;
+       } else if (str == endptr && str[0] == '.') {
+               no_integer = TRUE;
+       } else if (errno) {
                return SR_ERR;
+       } else {
+               no_integer = FALSE;
+       }
 
        if (integral < 0 || str[0] == '-')
-               is_negative = true;
+               is_negative = TRUE;
 
        errno = 0;
        if (*endptr == '.') {
-               bool is_exp, is_eos;
+               gboolean is_exp, is_eos;
                const char *start = endptr + 1;
                fractional = g_ascii_strtoll(start, &endptr, 10);
                is_exp = *endptr == 'E' || *endptr == 'e';
@@ -645,6 +649,9 @@ SR_API int sr_parse_rational(const char *str, struct sr_rational *ret)
                }
                if (errno)
                        return SR_ERR;
+               no_fractional = endptr == start;
+               if (no_integer && no_fractional)
+                       return SR_ERR;
                fractional_len = endptr - start;
        }