- if ((value = g_hash_table_lookup(options, key))) {
- dbg = g_variant_print(value, TRUE);
- srd_dbg("got option '%s' = %s", key, dbg);
- g_free(dbg);
- /* An override for this option was provided. */
- if (PyUnicode_Check(py_classval)) {
- if (!g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) {
- srd_err("Option '%s' requires a string value.", key);
- goto err_out;
- }
- val_str = g_variant_get_string(value, NULL);
- if (!(py_optval = PyUnicode_FromString(val_str))) {
- /* Some UTF-8 encoding error. */
- PyErr_Clear();
- srd_err("Option '%s' requires a UTF-8 string value.", key);
- goto err_out;
- }
- } else if (PyLong_Check(py_classval)) {
- if (!g_variant_is_of_type(value, G_VARIANT_TYPE_INT64)) {
- srd_err("Option '%s' requires an integer value.", key);
- goto err_out;
- }
- val_int = g_variant_get_int64(value);
- if (!(py_optval = PyLong_FromLong(val_int))) {
- /* ValueError Exception */
- PyErr_Clear();
- srd_err("Option '%s' has invalid integer value.", key);
- goto err_out;
- }
+ for (l = di->decoder->options; l; l = l->next) {
+ sdo = l->data;
+ if ((value = g_hash_table_lookup(options, sdo->id))) {
+ /* A value was supplied for this option. */
+ if (!g_variant_type_equal(g_variant_get_type(value),
+ g_variant_get_type(sdo->def))) {
+ srd_err("Option '%s' should have the same type "
+ "as the default value.", sdo->id);
+ goto err_out;