+ for (l = g_hash_table_get_keys(new_probes); l; l = l->next) {
+ probe_id = l->data;
+ probenum_str = g_hash_table_lookup(new_probes, probe_id);
+ if (!probenum_str) {
+ /* Probe name was specified without a value. */
+ srd_err("No probe number was specified for %s.", probe_id);
+ g_free(new_probemap);
+ return SRD_ERR_ARG;
+ }
+ new_probenum = strtol(probenum_str, NULL, 10);
+ if (!(sl = g_slist_find_custom(di->decoder->probes, probe_id,
+ (GCompareFunc)compare_probe_id))) {
+ /* Fall back on optional probes. */
+ if (!(sl = g_slist_find_custom(di->decoder->extra_probes,
+ probe_id, (GCompareFunc)compare_probe_id))) {
+ srd_err("Protocol decoder %s has no probe '%s'.",
+ di->decoder->name, probe_id);
+ g_free(new_probemap);
+ return SRD_ERR_ARG;
+ }
+ }
+ p = sl->data;
+ new_probemap[p->order] = new_probenum;
+ }
+ g_free(di->dec_probemap);
+ di->dec_probemap = new_probemap;