X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=parsers.c;h=d92218f8664ed5a8858e32a6b631b8d4c68633aa;hb=HEAD;hp=c1ab9bdabf5a2bf728c3f4477d5e170e4186605a;hpb=e8e8b5e1a09563b66e9ef6d475b3c735c8fdc910;p=sigrok-cli.git diff --git a/parsers.c b/parsers.c index c1ab9bd..2aacefb 100644 --- a/parsers.c +++ b/parsers.c @@ -25,7 +25,8 @@ #include #include "sigrok-cli.h" -struct sr_channel *find_channel(GSList *channellist, const char *channelname) +struct sr_channel *find_channel(GSList *channellist, const char *channelname, + gboolean exact_case) { struct sr_channel *ch; GSList *l; @@ -33,8 +34,13 @@ struct sr_channel *find_channel(GSList *channellist, const char *channelname) ch = NULL; for (l = channellist; l; l = l->next) { ch = l->data; - if (!strcmp(ch->name, channelname)) - break; + if (exact_case) { + if (strcmp(ch->name, channelname) == 0) + break; + } else { + if (g_ascii_strcasecmp(ch->name, channelname) == 0) + break; + } } ch = l ? l->data : NULL; @@ -105,7 +111,7 @@ GSList *parse_channelstring(struct sr_dev_inst *sdi, const char *channelstring) ret = SR_ERR; break; } - ch = find_channel(channels, str); + ch = find_channel(channels, str, TRUE); if (!ch) { g_critical("unknown channel '%d'.", b); ret = SR_ERR; @@ -130,7 +136,7 @@ range_fail: break; } - ch = find_channel(channels, names[0]); + ch = find_channel(channels, names[0], TRUE); if (!ch) { g_critical("unknown channel '%s'.", names[0]); g_strfreev(names); @@ -139,8 +145,7 @@ range_fail: } if (names[1]) { /* Rename channel. */ - g_free(ch->name); - ch->name = g_strdup(names[1]); + sr_dev_channel_name_set(ch, names[1]); } channellist = g_slist_append(channellist, ch); @@ -365,6 +370,8 @@ GHashTable *parse_generic_arg(const char *arg, i++; } for (; elements[i]; i++) { + if (!elements[i][0]) + continue; split_key_value(elements[i], &k, &v); k = g_strdup(k); v = v ? g_strdup(v) : NULL;