]> sigrok.org Git - libsigrok.git/commitdiff
strutil: support tera/peta/exa suffixes in symbolic size specs
authorGerhard Sittig <redacted>
Sun, 4 Feb 2018 18:50:25 +0000 (19:50 +0100)
committerUwe Hermann <redacted>
Fri, 9 Feb 2018 21:40:50 +0000 (22:40 +0100)
Synchronize sr_parse_sizestring() with sr_si_string_u64() capabilities.
Add support for the T/P/E suffixes. Since this conversion helper deals
with integer values exclusively, there is no issue with case insensitive
matches. The value cannot be pico. Neither is there an ambiguity with
the 10e6 notation.

This addresses bug #763.

Fix a style nit while we are here. Put braces around both arms of a
complex conditional.

src/strutil.c

index 30e992b815468e5a86c1210652b3a19aece2720b..3fe59551bbf06776402b78071b1acdb4b24c6ab7 100644 (file)
@@ -477,7 +477,8 @@ SR_API char *sr_voltage_string(uint64_t v_p, uint64_t v_q)
  */
 SR_API int sr_parse_sizestring(const char *sizestring, uint64_t *size)
 {
-       int multiplier, done;
+       uint64_t multiplier;
+       int done;
        double frac_part;
        char *s;
 
@@ -504,6 +505,18 @@ SR_API int sr_parse_sizestring(const char *sizestring, uint64_t *size)
                case 'G':
                        multiplier = SR_GHZ(1);
                        break;
+               case 't':
+               case 'T':
+                       multiplier = SR_GHZ(1000);
+                       break;
+               case 'p':
+               case 'P':
+                       multiplier = SR_GHZ(1000 * 1000);
+                       break;
+               case 'e':
+               case 'E':
+                       multiplier = SR_GHZ(1000 * 1000 * 1000);
+                       break;
                default:
                        done = TRUE;
                        s--;
@@ -513,8 +526,9 @@ SR_API int sr_parse_sizestring(const char *sizestring, uint64_t *size)
        if (multiplier > 0) {
                *size *= multiplier;
                *size += frac_part * multiplier;
-       } else
+       } else {
                *size += frac_part;
+       }
 
        if (s && *s && g_ascii_strcasecmp(s, "Hz"))
                return SR_ERR;