]> sigrok.org Git - libsigrok.git/commitdiff
fix CLI size string specification
authorBert Vermeulen <redacted>
Sun, 27 Nov 2011 18:31:25 +0000 (19:31 +0100)
committerBert Vermeulen <redacted>
Sun, 27 Nov 2011 18:33:07 +0000 (19:33 +0100)
accept "hz" as optional qualifier but nothing else
properly return an error instead of quietly returning zero size

session_file.c
sigrok-proto.h
strutil.c

index 0e3c56bec13be086a4cf7ce10f725c17363773a2..ec98065d2c8f052a89630eb1ddb7ec6344da50a4 100644 (file)
@@ -107,7 +107,7 @@ int sr_session_load(const char *filename)
                                        device->plugin->set_configuration(devcnt, SR_HWCAP_CAPTUREFILE, val);
                                        g_ptr_array_add(capturefiles, val);
                                } else if (!strcmp(keys[j], "samplerate")) {
-                                       tmp_u64 = sr_parse_sizestring(val);
+                                       sr_parse_sizestring(val, &tmp_u64);
                                        device->plugin->set_configuration(devcnt, SR_HWCAP_SAMPLERATE, &tmp_u64);
                                } else if (!strcmp(keys[j], "unitsize")) {
                                        tmp_u64 = strtoull(val, NULL, 10);
index 9a9614c52263e01fa8ac6c05236a5b0d5555192e..728ffc7342bdb033af4db55d9e229564bd949c0d 100644 (file)
@@ -142,7 +142,7 @@ char *sr_samplerate_string(uint64_t samplerate);
 char *sr_period_string(uint64_t frequency);
 char **sr_parse_triggerstring(struct sr_device *device,
                              const char *triggerstring);
-uint64_t sr_parse_sizestring(const char *sizestring);
+int sr_parse_sizestring(const char *sizestring, uint64_t *size);
 uint64_t sr_parse_timestring(const char *timestring);
 gboolean sr_parse_boolstring(const char *boolstring);
 
index 380d78f59efdbb0bf72009c903484a85d9f87a06..6a9d86226a7ac15d59f285bebfb25b8a42c175d4 100644 (file)
--- a/strutil.c
+++ b/strutil.c
@@ -186,19 +186,19 @@ char **sr_parse_triggerstring(struct sr_device *device,
  * Spaces (but not other whitespace) between value and suffix are allowed.
  *
  * @param sizestring A string containing a (decimal) size value.
- * @return The string's size value as uint64_t.
+ * @param size Pointer to uint64_t which will contain the string's size value.
+ * @return SR_OK or error code
  *
- * TODO: Error handling.
  */
-uint64_t sr_parse_sizestring(const char *sizestring)
+int sr_parse_sizestring(const char *sizestring, uint64_t *size)
 {
-       int multiplier;
-       uint64_t val;
+       int multiplier, done;
        char *s;
 
-       val = strtoull(sizestring, &s, 10);
+       *size = strtoull(sizestring, &s, 10);
        multiplier = 0;
-       while (s && *s && multiplier == 0) {
+       done = FALSE;
+       while (s && *s && multiplier == 0 && !done) {
                switch (*s) {
                case ' ':
                        break;
@@ -215,15 +215,18 @@ uint64_t sr_parse_sizestring(const char *sizestring)
                        multiplier = SR_GHZ(1);
                        break;
                default:
-                       val = 0;
-                       multiplier = -1;
+                       done = TRUE;
+                       s--;
                }
                s++;
        }
        if (multiplier > 0)
-               val *= multiplier;
+               *size *= multiplier;
+
+       if (*s && strcasecmp(s, "Hz"))
+               return SR_ERR;
 
-       return val;
+       return SR_OK;
 }
 
 /**