]> sigrok.org Git - libsigrokdecode.git/commitdiff
init: Simplify srd_decoder_searchpath_add()
authorDaniel Elstner <redacted>
Sat, 3 Oct 2015 09:40:33 +0000 (11:40 +0200)
committerDaniel Elstner <redacted>
Sat, 3 Oct 2015 09:40:33 +0000 (11:40 +0200)
Don't mess with colon-separated search path strings -- instead,
simply prepend items to the sys.path list object. Also keep the
internal decoder path list in the same order as the items added
to sys.path.

srd.c

diff --git a/srd.c b/srd.c
index ae1c7738b5920378bcc7d8a4ddbedeff025aca41..b152e0c1637a82388821bad512d83d80200b637b 100644 (file)
--- a/srd.c
+++ b/srd.c
@@ -224,36 +224,26 @@ SRD_API int srd_exit(void)
 SRD_PRIV int srd_decoder_searchpath_add(const char *path)
 {
        PyObject *py_cur_path, *py_item;
-       GString *new_path;
-       int wc_len, i;
-       wchar_t *wc_new_path;
-       char *item;
 
        srd_dbg("Adding '%s' to module path.", path);
 
-       new_path = g_string_sized_new(256);
-       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_SEARCHPATH_SEPARATOR_S);
-               py_item = PyList_GetItem(py_cur_path, i);
-               if (!PyUnicode_Check(py_item))
-                       /* Shouldn't happen. */
-                       continue;
-               if (py_str_as_str(py_item, &item) != SRD_OK)
-                       continue;
-               g_string_append(new_path, item);
-               g_free(item);
+       if (!py_cur_path)
+               return SRD_ERR_PYTHON;
+
+       py_item = PyUnicode_FromString(path);
+       if (!py_item) {
+               srd_exception_catch("Failed to create Unicode object");
+               return SRD_ERR_PYTHON;
+       }
+       if (PyList_Insert(py_cur_path, 0, py_item) < 0) {
+               srd_exception_catch("Failed to insert path element");
+               Py_DECREF(py_item);
+               return SRD_ERR_PYTHON;
        }
+       Py_DECREF(py_item);
 
-       /* Convert to wide chars. */
-       wc_len = sizeof(wchar_t) * (new_path->len + 1);
-       wc_new_path = g_malloc(wc_len);
-       mbstowcs(wc_new_path, new_path->str, wc_len);
-       PySys_SetPath(wc_new_path);
-       g_string_free(new_path, TRUE);
-       g_free(wc_new_path);
-       searchpaths = g_slist_append(searchpaths, g_strdup(path));
+       searchpaths = g_slist_prepend(searchpaths, g_strdup(path));
 
        return SRD_OK;
 }