X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=blobdiff_plain;f=controller.c;h=9267ded40e653a14423c9446b23f8994e5366542;hp=e023b7151dddd07d15f29a42efd10abde0b72ffb;hb=2994587f98f205bb8847554bd28483532b277f2c;hpb=8c664ca2d7b4faffa7b3dbeb3b9e491976c24eee diff --git a/controller.c b/controller.c index e023b71..9267ded 100644 --- a/controller.c +++ b/controller.c @@ -18,8 +18,8 @@ * along with this program. If not, see . */ -#include "sigrokdecode.h" /* First, so we avoid a _POSIX_C_SOURCE warning. */ -#include "sigrokdecode-internal.h" +#include "libsigrokdecode.h" /* First, so we avoid a _POSIX_C_SOURCE warning. */ +#include "libsigrokdecode-internal.h" #include "config.h" #include #include @@ -112,10 +112,10 @@ extern SRD_PRIV PyTypeObject srd_logic_type; * This initializes the Python interpreter, and creates and initializes * a "sigrokdecode" Python module. * - * Then, it searches for sigrok protocol decoder files (*.py) in the - * "decoders" subdirectory of the the sigrok installation directory. + * Then, it searches for sigrok protocol decoders in the "decoders" + * subdirectory of the the libsigrokdecode installation directory. * All decoders that are found are loaded into memory and added to an - * internal list of decoders, which can be queried via srd_decoders_list(). + * internal list of decoders, which can be queried via srd_decoder_list(). * * The caller is responsible for calling the clean-up function srd_exit(), * which will properly shut down libsigrokdecode and free its allocated memory. @@ -124,12 +124,12 @@ extern SRD_PRIV PyTypeObject srd_logic_type; * are not allowed. * * @param path Path to an extra directory containing protocol decoders - * which will be added to the Python sys.path, or NULL. + * which will be added to the Python sys.path. May be NULL. * * @return SRD_OK upon success, a (negative) error code otherwise. - * Upon Python errors, return SRD_ERR_PYTHON. If the sigrok decoders - * directory cannot be accessed, return SRD_ERR_DECODERS_DIR. - * If not enough memory could be allocated, return SRD_ERR_MALLOC. + * Upon Python errors, SRD_ERR_PYTHON is returned. If the decoders + * directory cannot be accessed, SRD_ERR_DECODERS_DIR is returned. + * If not enough memory could be allocated, SRD_ERR_MALLOC is returned. * * @since 0.1.0 */ @@ -229,10 +229,10 @@ SRD_PRIV int srd_decoder_searchpath_add(const char *path) srd_dbg("Adding '%s' to module path.", path); new_path = g_string_sized_new(256); - g_string_assign(new_path, g_strdup(path)); + g_string_assign(new_path, path); py_cur_path = PySys_GetObject("path"); for (i = 0; i < PyList_Size(py_cur_path); i++) { - g_string_append(new_path, g_strdup(G_SEARCHPATH_SEPARATOR_S)); + g_string_append(new_path, G_SEARCHPATH_SEPARATOR_S); py_item = PyList_GetItem(py_cur_path, i); if (!PyUnicode_Check(py_item)) /* Shouldn't happen. */ @@ -240,6 +240,7 @@ SRD_PRIV int srd_decoder_searchpath_add(const char *path) if (py_str_as_str(py_item, &item) != SRD_OK) continue; g_string_append(new_path, item); + g_free(item); } /* Convert to wide chars. */ @@ -401,6 +402,8 @@ SRD_API int srd_inst_option_set(struct srd_decoder_inst *di, */ if (PyDict_SetItemString(py_di_options, key, py_optval) == -1) goto err_out; + g_free(key); + key = NULL; } ret = SRD_OK; @@ -816,6 +819,7 @@ SRD_PRIV void srd_inst_free(struct srd_decoder_inst *di) g_free(pdo); } g_slist_free(di->pd_output); + g_free(di); } /** @private */ @@ -961,22 +965,21 @@ SRD_API int srd_pd_output_callback_add(int output_type, } /** @private */ -SRD_PRIV void *srd_pd_output_callback_find(int output_type) +SRD_PRIV struct srd_pd_callback *srd_pd_output_callback_find(int output_type) { GSList *l; - struct srd_pd_callback *pd_cb; - void *(cb); + struct srd_pd_callback *tmp, *pd_cb; - cb = NULL; + pd_cb = NULL; for (l = callbacks; l; l = l->next) { - pd_cb = l->data; - if (pd_cb->output_type == output_type) { - cb = pd_cb->cb; + tmp = l->data; + if (tmp->output_type == output_type) { + pd_cb = tmp; break; } } - return cb; + return pd_cb; } /* This is the backend function to Python sigrokdecode.add() call. */