Skip to content

Commit

Permalink
Fix generic sr_option enumeration.
Browse files Browse the repository at this point in the history
  • Loading branch information
biot committed Aug 20, 2014
1 parent 7c6a042 commit 87e24fe
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 28 deletions.
36 changes: 36 additions & 0 deletions parsers.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
28 changes: 0 additions & 28 deletions session.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions sigrok-cli.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down

0 comments on commit 87e24fe

Please sign in to comment.