]> sigrok.org Git - libsigrokdecode.git/blobdiff - controller.c
srd: simplified error checking, in preparation for more of it
[libsigrokdecode.git] / controller.c
index 4fa729ca81430c100cc809c84ada0e9301a19310..ebda088932ea4885f5b834c81e0b914773ee137e 100644 (file)
@@ -114,13 +114,36 @@ int srd_exit(void)
  * Add search directories for the protocol decoders.
  *
  * TODO: add path from env var SIGROKDECODE_PATH, config etc
+ * TODO: Should take directoryname/path as input.
  */
 int set_modulepath(void)
 {
        int ret;
+       gchar *path, *s;
 
-       PyRun_SimpleString("import sys");
-       ret = PyRun_SimpleString("sys.path.append(r'" DECODERS_DIR "');");
+#ifdef _WIN32
+       gchar **splitted;
+
+       /*
+        * On Windows/MinGW, Python's sys.path needs entries of the form
+        * 'C:\\foo\\bar' instead of '/foo/bar'.
+        */
+
+       splitted = g_strsplit(DECODERS_DIR, "/", 0);
+       path = g_build_pathv("\\\\", splitted);
+       g_strfreev(splitted);
+#else
+       path = g_strdup(DECODERS_DIR);
+#endif
+
+       /* TODO: Prepend instead of appending. */
+       /* TODO: Sanity check on 'path' (length, escape special chars, ...). */
+       s = g_strdup_printf("import sys; sys.path.append(r'%s')", path);
+
+       ret = PyRun_SimpleString(s);
+
+       g_free(path);
+       g_free(s);
 
        return ret;
 }
@@ -181,6 +204,10 @@ int srd_instance_set_options(struct srd_decoder_instance *di,
                        goto err_out;
                if (!(py_classval = PyList_GetItem(py_optlist, 1)))
                        goto err_out;
+               if (!PyUnicode_Check(py_classval) && !PyLong_Check(py_classval)) {
+                       srd_err("Options of type %s are not yet supported.", Py_TYPE(py_classval)->tp_name);
+                       goto err_out;
+               }
 
                if ((value = g_hash_table_lookup(options, key))) {
                        /* An override for this option was provided. */