]> sigrok.org Git - libsigrokdecode.git/blobdiff - decoder.c
Only load and use PDs of API version 2.
[libsigrokdecode.git] / decoder.c
index a44a86a094ddfc6fa8b615aa3724e3b404e1bd13..71e9122181324fad0325314ddbf78eb75f2fc1a6 100644 (file)
--- a/decoder.c
+++ b/decoder.c
 static GSList *pd_list = NULL;
 
 /* srd.c */
-extern GSList *searchpaths;
+extern SRD_PRIV GSList *searchpaths;
 
 /* session.c */
-extern GSList *sessions;
-extern int max_session_id;
+extern SRD_PRIV GSList *sessions;
+extern SRD_PRIV int max_session_id;
 
 /* module_sigrokdecode.c */
 extern SRD_PRIV PyObject *mod_sigrokdecode;
@@ -366,6 +366,17 @@ SRD_API int srd_decoder_load(const char *module_name)
        }
        Py_CLEAR(py_basedec);
 
+       /*
+        * Check that thіs decoder has the correct PD API version.
+        * PDs of different API versions are incompatible and cannot work.
+        */
+       py_long = PyObject_GetAttrString(d->py_dec, "api_version");
+       if (PyLong_AsLong(py_long) != 2) {
+               srd_err("Only PDs of API version 2 are supported.");
+               goto err_out;
+       }
+       Py_CLEAR(py_long);
+
        /* Check for a proper start() method. */
        if (!PyObject_HasAttrString(d->py_dec, "start")) {
                srd_err("Protocol decoder %s has no start() method Decoder "