]> sigrok.org Git - libsigrokdecode.git/blobdiff - decoder.c
Factor out srd_decoder_apiver().
[libsigrokdecode.git] / decoder.c
index 748280af68b30fd6460e4df32135bf467c27a232..25ca4767c6961c17536717c473204d6e98ce20b0 100644 (file)
--- a/decoder.c
+++ b/decoder.c
@@ -586,6 +586,29 @@ static int check_method(PyObject *py_dec, const char *mod_name,
        return SRD_OK;
 }
 
+/**
+ * Get the API version of the specified decoder.
+ *
+ * @param d The decoder to use. Must not be NULL.
+ *
+ * @return The API version of the decoder, or 0 upon errors.
+ */
+SRD_PRIV long srd_decoder_apiver(const struct srd_decoder *d)
+{
+       PyObject *py_apiver;
+       long apiver;
+
+       if (!d)
+               return 0;
+
+       py_apiver = PyObject_GetAttrString(d->py_dec, "api_version");
+       apiver = (py_apiver && PyLong_Check(py_apiver))
+                       ? PyLong_AsLong(py_apiver) : 0;
+       Py_XDECREF(py_apiver);
+
+       return apiver;
+}
+
 /**
  * Load a protocol decoder module into the embedded Python interpreter.
  *
@@ -597,7 +620,7 @@ static int check_method(PyObject *py_dec, const char *mod_name,
  */
 SRD_API int srd_decoder_load(const char *module_name)
 {
-       PyObject *py_basedec, *py_apiver;
+       PyObject *py_basedec;
        struct srd_decoder *d;
        long apiver;
        int is_subclass;
@@ -648,11 +671,7 @@ SRD_API int srd_decoder_load(const char *module_name)
         * Check that this decoder has the correct PD API version.
         * PDs of different API versions are incompatible and cannot work.
         */
-       py_apiver = PyObject_GetAttrString(d->py_dec, "api_version");
-       apiver = (py_apiver && PyLong_Check(py_apiver))
-                       ? PyLong_AsLong(py_apiver) : 0;
-       Py_XDECREF(py_apiver);
-
+       apiver = srd_decoder_apiver(d);
        if (apiver != 2) {
                srd_exception_catch("Only PDs of API version 2 are supported");
                goto err_out;