X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=blobdiff_plain;f=device.c;h=0a78a802e3c7f14f9cf90dda983c358504ac64ac;hp=d489ef3f8cff7d6e1e65d2443e801aaa7cebe069;hb=003595ac375fac61ed9ef45b13119c80e7c1ade3;hpb=bc1c2f001a3b8499052348ec45155313153b2194 diff --git a/device.c b/device.c index d489ef3f..0a78a802 100644 --- a/device.c +++ b/device.c @@ -192,22 +192,28 @@ SR_API int sr_dev_trigger_set(const struct sr_dev_inst *sdi, int probenum, */ SR_API gboolean sr_dev_has_option(const struct sr_dev_inst *sdi, int key) { + GVariant *gvar; const int *devopts; - int i; + gsize num_opts, i; + int ret; - if (!sdi || !sdi->driver) + if (!sdi || !sdi->driver || !sdi->driver->config_list) return FALSE; - if (sdi->driver->config_list(SR_CONF_DEVICE_OPTIONS, - (const void **)&devopts, NULL) != SR_OK) + if (sdi->driver->config_list(SR_CONF_DEVICE_OPTIONS, &gvar, NULL) != SR_OK) return FALSE; - for (i = 0; devopts[i]; i++) { - if (devopts[i] == key) - return TRUE; + ret = FALSE; + devopts = g_variant_get_fixed_array(gvar, &num_opts, sizeof(int32_t)); + for (i = 0; i < num_opts; i++) { + if (devopts[i] == key) { + ret = TRUE; + break; + } } + g_variant_unref(gvar); - return FALSE; + return ret; } /** @private */