From 87e24fedeb35cb7d5b1c593150ac1a92cf10cf4d Mon Sep 17 00:00:00 2001 From: Bert Vermeulen Date: Wed, 20 Aug 2014 17:31:17 +0200 Subject: [PATCH] Fix generic sr_option enumeration. --- parsers.c | 36 ++++++++++++++++++++++++++++++++++++ session.c | 28 ---------------------------- sigrok-cli.h | 1 + 3 files changed, 37 insertions(+), 28 deletions(-) diff --git a/parsers.c b/parsers.c index 7f0d227..c2a7c26 100644 --- a/parsers.c +++ b/parsers.c @@ -288,6 +288,42 @@ GHashTable *parse_generic_arg(const char *arg, gboolean sep_first) return hash; } +GHashTable *generic_arg_to_opt(const struct sr_option **opts, GHashTable *genargs) +{ + GHashTable *hash; + GVariant *gvar; + int i; + char *s; + + hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, + (GDestroyNotify)g_variant_unref); + for (i = 0; opts[i]; i++) { + if (!(s = g_hash_table_lookup(genargs, opts[i]->id))) + continue; + if (g_variant_is_of_type(opts[i]->def, G_VARIANT_TYPE_UINT32)) { + gvar = g_variant_new_uint32(strtoul(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_INT32)) { + gvar = g_variant_new_int32(strtoul(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)) { + gvar = g_variant_new_double(strtod(s, NULL)); + 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_STRING)) { + gvar = g_variant_new_string(s); + g_hash_table_insert(hash, g_strdup(opts[i]->id), + g_variant_ref_sink(gvar)); + } else { + g_critical("Don't know GVariant type for option '%s'!", opts[i]->id); + } + } + + return hash; +} + static char *strcanon(const char *str) { int p0, p1; diff --git a/session.c b/session.c index d201492..d7bdf8a 100644 --- a/session.c +++ b/session.c @@ -71,34 +71,6 @@ static int set_limit_time(const struct sr_dev_inst *sdi) return SR_OK; } -GHashTable *generic_arg_to_opt(const struct sr_option **opts, GHashTable *genargs) -{ - GHashTable *hash; - GVariant *gvar; - const struct sr_option *opt; - char *s; - - hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, - (GDestroyNotify)g_variant_unref); - for (opt = opts[0]; opt; opt++) { - if (!(s = g_hash_table_lookup(genargs, opt->id))) - continue; - if (g_variant_is_of_type(opt->def, G_VARIANT_TYPE_UINT32)) { - gvar = g_variant_new_uint32(strtoul(s, NULL, 10)); - g_hash_table_insert(hash, g_strdup(opt->id), - g_variant_ref_sink(gvar)); - } else if (g_variant_is_of_type(opt->def, G_VARIANT_TYPE_DOUBLE)) { - gvar = g_variant_new_double(strtod(s, NULL)); - g_hash_table_insert(hash, g_strdup(opt->id), - g_variant_ref_sink(gvar)); - } else { - g_critical("Don't know GVariant type for option '%s'!", opt->id); - } - } - - return hash; -} - const struct sr_output *setup_output_format(const struct sr_dev_inst *sdi) { const struct sr_output_module *omod; diff --git a/sigrok-cli.h b/sigrok-cli.h index ac946a0..a3ff81e 100644 --- a/sigrok-cli.h +++ b/sigrok-cli.h @@ -75,6 +75,7 @@ GSList *parse_channelstring(struct sr_dev_inst *sdi, const char *channelstring); int parse_triggerstring(const struct sr_dev_inst *sdi, const char *s, struct sr_trigger **trigger); GHashTable *parse_generic_arg(const char *arg, gboolean sep_first); +GHashTable *generic_arg_to_opt(const struct sr_option **opts, GHashTable *genargs); int canon_cmp(const char *str1, const char *str2); /* anykey.c */ -- 2.30.2