/*
* This file is part of the sigrok project.
*
- * Copyright (C) 2010-2012 Bert Vermeulen <bert@biot.com>
+ * Copyright (C) 2013 Bert Vermeulen <bert@biot.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* If the device's 'driver' field is NULL (virtual device), this
* function will always return FALSE (virtual devices don't have
* a hardware capabilities list).
- * @param option The option that should be checked for support on the
+ * @param key The option that should be checked for support on the
* specified device.
*
* @return TRUE if the device has the specified option, FALSE otherwise.
*/
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 */