X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=parsers.c;h=2aacefb089f184eeb18dfb8d5be8855dc5623811;hb=refs%2Fheads%2Fmaster;hp=d92218f8664ed5a8858e32a6b631b8d4c68633aa;hpb=c9c30f53c4c639d73cadc7c58c28a69090b41261;p=sigrok-cli.git diff --git a/parsers.c b/parsers.c index d92218f..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; @@ -444,11 +451,11 @@ GHashTable *generic_arg_to_opt(const struct sr_option **opts, GHashTable *genarg g_hash_table_insert(hash, g_strdup(opts[i]->id), g_variant_ref_sink(gvar)); } else if (g_variant_is_of_type(opts[i]->def, G_VARIANT_TYPE_INT32)) { - gvar = g_variant_new_int32(strtoul(s, NULL, 10)); + gvar = g_variant_new_int32(strtol(s, NULL, 10)); g_hash_table_insert(hash, g_strdup(opts[i]->id), g_variant_ref_sink(gvar)); } else if (g_variant_is_of_type(opts[i]->def, G_VARIANT_TYPE_UINT64)) { - gvar = g_variant_new_uint64(strtoul(s, NULL, 10)); + gvar = g_variant_new_uint64(strtoull(s, NULL, 10)); g_hash_table_insert(hash, g_strdup(opts[i]->id), g_variant_ref_sink(gvar)); } else if (g_variant_is_of_type(opts[i]->def, G_VARIANT_TYPE_DOUBLE)) {