]> sigrok.org Git - libsigrok.git/commitdiff
asyc-ii: Rephrase "exponent" logic when parsing packets
authorGerhard Sittig <redacted>
Sat, 31 Dec 2016 13:25:07 +0000 (14:25 +0100)
committerUwe Hermann <redacted>
Sat, 7 Jan 2017 14:51:47 +0000 (15:51 +0100)
Replace a C library strcspn(3) call with the more portable glib
g_strstr_len(3) routine. This is possible since a single separator
is searched for, no actual "set of characters" is involved.

As a byproduct, this eliminates a "late" reference to 'cnt' at the
bottom of the routine, after the value was assigned in a rather distant
location at the top of the routine. The cost of strlen() should be
acceptable for a buffer with a single digit total length.

src/dmm/asycii.c

index 329f37e9e2964357704aeafa394e68ea671dfb88..54858ffa60b91737191eeb3c90834b0393eb9d34 100644 (file)
@@ -60,7 +60,8 @@ static int parse_value(const char *buf, struct asycii_info *info,
 {
        char valstr[7 + 1];
        const char *valp;
-       int i, cnt, is_ol, dot_pos;
+       int i, cnt, is_ol;
+       const char *dot_pos;
 
        /*
         * Strip all spaces from bytes 0-6. By copying all
@@ -102,12 +103,13 @@ static int parse_value(const char *buf, struct asycii_info *info,
                sr_spew("%s(), cannot convert number", __func__);
                return SR_ERR_DATA;
        }
-       dot_pos = strcspn(valstr, ".");
-       if (dot_pos < cnt)
-               *exponent = -(cnt - dot_pos - 1);
+       dot_pos = g_strstr_len(valstr, -1, ".");
+       if (dot_pos)
+               *exponent = -(valstr + strlen(valstr) - dot_pos - 1);
        else
                *exponent = 0;
-       sr_spew("%s(), display value is %f", __func__, *result);
+       sr_spew("%s(), display value is %f, exponent %d",
+               __func__, *result, *exponent);
        return SR_OK;
 }