]> sigrok.org Git - libsigrok.git/blobdiff - strutil.c
Changed SR_T_NULL to SR_T_BOOL and adjusted RLE option.
[libsigrok.git] / strutil.c
index 1c3d023f014cae475df73389afcb029dfdb2737f..380d78f59efdbb0bf72009c903484a85d9f87a06 100644 (file)
--- a/strutil.c
+++ b/strutil.c
@@ -22,6 +22,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sigrok.h>
+#include <sigrok-internal.h>
 
 /**
  * Convert a numeric samplerate value to its "natural" string representation.
@@ -41,11 +42,11 @@ char *sr_samplerate_string(uint64_t samplerate)
        if (!o)
                return NULL;
 
-       if (samplerate >= GHZ(1))
+       if (samplerate >= SR_GHZ(1))
                r = snprintf(o, 30, "%" PRIu64 " GHz", samplerate / 1000000000);
-       else if (samplerate >= MHZ(1))
+       else if (samplerate >= SR_MHZ(1))
                r = snprintf(o, 30, "%" PRIu64 " MHz", samplerate / 1000000);
-       else if (samplerate >= KHZ(1))
+       else if (samplerate >= SR_KHZ(1))
                r = snprintf(o, 30, "%" PRIu64 " kHz", samplerate / 1000);
        else
                r = snprintf(o, 30, "%" PRIu64 " Hz", samplerate);
@@ -78,11 +79,11 @@ char *sr_period_string(uint64_t frequency)
        if (!o)
                return NULL;
 
-       if (frequency >= GHZ(1))
+       if (frequency >= SR_GHZ(1))
                r = snprintf(o, 30, "%" PRIu64 " ns", frequency / 1000000000);
-       else if (frequency >= MHZ(1))
+       else if (frequency >= SR_MHZ(1))
                r = snprintf(o, 30, "%" PRIu64 " us", frequency / 1000000);
-       else if (frequency >= KHZ(1))
+       else if (frequency >= SR_KHZ(1))
                r = snprintf(o, 30, "%" PRIu64 " ms", frequency / 1000);
        else
                r = snprintf(o, 30, "%" PRIu64 " s", frequency);
@@ -114,7 +115,12 @@ char **sr_parse_triggerstring(struct sr_device *device,
 
        max_probes = g_slist_length(device->probes);
        error = FALSE;
-       triggerlist = g_malloc0(max_probes * sizeof(char *));
+
+       if (!(triggerlist = g_try_malloc0(max_probes * sizeof(char *)))) {
+               sr_err("session file: %s: metafile malloc failed", __func__);
+               return NULL;
+       }
+
        tokens = g_strsplit(triggerstring, ",", max_probes);
        trigger_types = device->plugin->get_device_info(0, SR_DI_TRIGGER_TYPES);
        if (trigger_types == NULL)
@@ -138,7 +144,7 @@ char **sr_parse_triggerstring(struct sr_device *device,
                }
 
                if (probenum < 1 || probenum > max_probes) {
-                       printf("Invalid probe.\n");
+                       sr_err("Invalid probe.\n");
                        error = TRUE;
                        break;
                }
@@ -146,7 +152,7 @@ char **sr_parse_triggerstring(struct sr_device *device,
                if ((trigger = strchr(tokens[i], '='))) {
                        for (tc = ++trigger; *tc; tc++) {
                                if (strchr(trigger_types, *tc) == NULL) {
-                                       printf("Unsupported trigger type "
+                                       sr_err("Unsupported trigger type "
                                               "'%c'\n", *tc);
                                        error = TRUE;
                                        break;
@@ -198,15 +204,15 @@ uint64_t sr_parse_sizestring(const char *sizestring)
                        break;
                case 'k':
                case 'K':
-                       multiplier = KHZ(1);
+                       multiplier = SR_KHZ(1);
                        break;
                case 'm':
                case 'M':
-                       multiplier = MHZ(1);
+                       multiplier = SR_MHZ(1);
                        break;
                case 'g':
                case 'G':
-                       multiplier = GHZ(1);
+                       multiplier = SR_GHZ(1);
                        break;
                default:
                        val = 0;
@@ -261,3 +267,18 @@ uint64_t sr_parse_timestring(const char *timestring)
 
        return time_msec;
 }
+
+gboolean sr_parse_boolstring(const char *boolstr)
+{
+       if (!boolstr)
+               return FALSE;
+
+       if (!g_strcasecmp(boolstr, "true") || 
+           !g_strcasecmp(boolstr, "yes") ||
+           !g_strcasecmp(boolstr, "on") ||
+           !g_strcasecmp(boolstr, "1")) 
+               return TRUE;
+
+       return FALSE;
+}
+