X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=blobdiff_plain;f=controller.c;h=f5e272edea49b8c1d5b17bee1502456ec7f9e61a;hp=6bb7748ef05eee8b9890a665289f867a08833389;hb=639c56898e88aae99a7b91a5c6d2b7870956d648;hpb=0bdadba205a6d7688a2bb8d98ab342abe22acd6e diff --git a/controller.c b/controller.c index 6bb7748..f5e272e 100644 --- a/controller.c +++ b/controller.c @@ -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; } @@ -146,13 +169,17 @@ int srd_instance_set_options(struct srd_decoder_instance *di, int num_optkeys, ret, size, i; char *key, *value; - if (g_hash_table_size(options) == 0) - /* No options provided. */ - return SRD_OK; - - if(!PyObject_HasAttrString(di->decoder->py_dec, "options")) + if(!PyObject_HasAttrString(di->decoder->py_dec, "options")) { /* Decoder has no options. */ + if (g_hash_table_size(options) == 0) { + /* No options provided. */ + return SRD_OK; + } else { + srd_err("Protocol decoder has no options."); + return SRD_ERR_ARG; + } return SRD_OK; + } ret = SRD_ERR_PYTHON; key = NULL;