* PDs of different API versions are incompatible and cannot work.
*/
apiver = srd_decoder_apiver(d);
- if (apiver != 2) {
- srd_exception_catch("Only PD API version 2 is supported, "
+ if (apiver != 2 && apiver != 3) {
+ srd_exception_catch("Only PD API version 2/3 is supported, "
"decoder %s has version %ld", module_name, apiver);
fail_txt = "API version mismatch";
goto err_out;
return SRD_OK;
except_out:
- if (fail_txt) {
+ /* Don't show a message for the "common" directory, it's not a PD. */
+ if (strcmp(module_name, "common")) {
srd_exception_catch("Failed to load decoder %s: %s",
module_name, fail_txt);
- fail_txt = NULL;
- } else {
- srd_exception_catch("Failed to load decoder %s", module_name);
}
+ fail_txt = NULL;
err_out:
if (fail_txt)
srd_err("Failed to load decoder %s: %s", module_name, fail_txt);
*/
for (l = sessions; l; l = l->next) {
sess = l->data;
- srd_inst_free_all(sess, NULL);
+ srd_inst_free_all(sess);
}
/* Remove the PD from the list of loaded decoders. */
*/
SRD_API int srd_decoder_unload_all(void)
{
- GSList *l;
- struct srd_decoder *dec;
-
- for (l = pd_list; l; l = l->next) {
- dec = l->data;
- srd_decoder_unload(dec);
- }
+ g_slist_foreach(pd_list, (GFunc)srd_decoder_unload, NULL);
g_slist_free(pd_list);
pd_list = NULL;