X-Git-Url: https://sigrok.org/gitweb/?p=sigrok-cli.git;a=blobdiff_plain;f=decode.c;h=1ba5ef20ec80781de8ba3f3c0fa46a730ea6a7e3;hp=2b95f2346fb2d22d3fd8b5bf4199aa980ba0bd88;hb=b5c8f3a14ae5df5988f7491e4b65a1b3f60c089a;hpb=aa001713933f50a2082a5cd0f8bde5e7fd490b39 diff --git a/decode.c b/decode.c index 2b95f23..1ba5ef2 100644 --- a/decode.c +++ b/decode.c @@ -38,6 +38,7 @@ static int opts_to_gvar(struct srd_decoder *dec, GHashTable *hash, GSList *optl; GVariant *gvar; gint64 val_int; + double val_dbl; int ret; char *val_str, *conv; @@ -53,14 +54,25 @@ static int opts_to_gvar(struct srd_decoder *dec, GHashTable *hash, if (g_variant_is_of_type(o->def, G_VARIANT_TYPE_STRING)) { gvar = g_variant_new_string(val_str); } else if (g_variant_is_of_type(o->def, G_VARIANT_TYPE_INT64)) { + conv = NULL; val_int = strtoll(val_str, &conv, 0); - if (!conv || conv == val_str) { + if (!conv || conv == val_str || *conv) { g_critical("Protocol decoder '%s' option '%s' " "requires a number.", dec->name, o->id); ret = FALSE; break; } gvar = g_variant_new_int64(val_int); + } else if (g_variant_is_of_type(o->def, G_VARIANT_TYPE_DOUBLE)) { + conv = NULL; + val_dbl = strtod(val_str, &conv); + if (!conv || conv == val_str || *conv) { + g_critical("Protocol decoder '%s' option '%s' requires a float number.", + dec->name, o->id); + ret = FALSE; + break; + } + gvar = g_variant_new_double(val_dbl); } else { g_critical("Unsupported type for option '%s' (%s)", o->id, g_variant_get_type_string(o->def));