- found = FALSE;
- for (i = 0; sr_hwcap_options[i].hwcap; i++) {
- if (strcmp(sr_hwcap_options[i].shortname, key))
- continue;
- if ((value == NULL) &&
- (sr_hwcap_options[i].type != SR_T_BOOL)) {
- g_critical("Option '%s' needs a value.", (char *)key);
- return SR_ERR;
- }
- found = TRUE;
- val = NULL;
- switch (sr_hwcap_options[i].type) {
- case SR_T_UINT64:
- ret = sr_parse_sizestring(value, &tmp_u64);
- if (ret != SR_OK)
- break;
- val = &tmp_u64;
- break;
- case SR_T_CHAR:
- val = value;
- break;
- case SR_T_BOOL:
- if (!value)
- tmp_bool = TRUE;
- else
- tmp_bool = sr_parse_boolstring(value);
- val = &tmp_bool;
- break;
- case SR_T_FLOAT:
- tmp_float = strtof(value, NULL);
- val = &tmp_float;
- break;
- case SR_T_RATIONAL_PERIOD:
- if ((ret = sr_parse_period(value, &tmp_rat)) != SR_OK)
- break;
- val = &tmp_rat;
- break;
- case SR_T_RATIONAL_VOLT:
- if ((ret = sr_parse_voltage(value, &tmp_rat)) != SR_OK)
- break;
- val = &tmp_rat;
+ if (!(hwo = sr_devopt_name_get(key))) {
+ g_critical("Unknown device option '%s'.", (char *) key);
+ return SR_ERR;
+ }
+
+ if ((value == NULL) &&
+ (hwo->type != SR_T_BOOL)) {
+ g_critical("Option '%s' needs a value.", (char *)key);
+ return SR_ERR;
+ }
+ val = NULL;
+ switch (hwo->type) {
+ case SR_T_UINT64:
+ ret = sr_parse_sizestring(value, &tmp_u64);
+ if (ret != SR_OK)