]> sigrok.org Git - libsigrok.git/commitdiff
strutil: accept trailing whitespace after number text
authorGerhard Sittig <redacted>
Sun, 4 Feb 2018 19:17:08 +0000 (20:17 +0100)
committerUwe Hermann <redacted>
Fri, 9 Feb 2018 21:40:58 +0000 (22:40 +0100)
Some SCPI based drivers fail to convert response data, because strutil
conversion helpers sr_atol() and sr_atof() don't like trailing spaces
after the number's text that successfully got converted.

It's yet to get determined whether all call sites of the conversion
routines like their eating adjacent whitespace. But given that the
conversion routine explicitly checks for end of the string after the
number, no call site should expect or even depend on trailing text to
keep its whitespace.

See bug #788 for a discussion and example data.

src/strutil.c

index 3fe59551bbf06776402b78071b1acdb4b24c6ab7..5344ec2903218bef4c7e9baabd3412d10b7929e5 100644 (file)
@@ -18,6 +18,7 @@
  */
 
 #include <config.h>
+#include <ctype.h>
 #include <stdint.h>
 #include <stdlib.h>
 #include <string.h>
@@ -67,6 +68,9 @@ SR_PRIV int sr_atol(const char *str, long *ret)
        errno = 0;
        tmp = strtol(str, &endptr, 10);
 
+       while (endptr && isspace(*endptr))
+               endptr++;
+
        if (!endptr || *endptr || errno) {
                if (!errno)
                        errno = EINVAL;
@@ -129,6 +133,9 @@ SR_PRIV int sr_atod(const char *str, double *ret)
        errno = 0;
        tmp = strtof(str, &endptr);
 
+       while (endptr && isspace(*endptr))
+               endptr++;
+
        if (!endptr || *endptr || errno) {
                if (!errno)
                        errno = EINVAL;