diff options
Diffstat (limited to 'sip/tdecore/tdeapplication.sip')
-rw-r--r-- | sip/tdecore/tdeapplication.sip | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/sip/tdecore/tdeapplication.sip b/sip/tdecore/tdeapplication.sip index 1f568a8..4f167b4 100644 --- a/sip/tdecore/tdeapplication.sip +++ b/sip/tdecore/tdeapplication.sip @@ -400,10 +400,9 @@ typedef ulong Atom; // Convert a Python argv list to a conventional C argc count and argv array. char **pyArgvToC(PyObject *argvlist,int *argcp) { - int argc; char **argv; - argc = PyList_Size(argvlist); + int argc = PyList_Size(argvlist); // Allocate space for two copies of the argument pointers, plus the // terminating NULL. @@ -413,22 +412,30 @@ char **pyArgvToC(PyObject *argvlist,int *argcp) // Convert the list. for (int a = 0; a < argc; ++a) { - char *arg; - - // Get the argument and allocate memory for it. - if ((arg = PyString_AsString(PyList_GetItem(argvlist,a))) == NULL || - (argv[a] = (char *)sipMalloc(strlen(arg) + 1)) == NULL) - return NULL; + PyObject *argObject = PyList_GET_ITEM(argvlist, a); + char *arg; + + if (PyUnicode_Check(argObject)) + { + arg = tqstrdup(sipString_AsUTF8String(&argObject)); + } + else if (SIPBytes_Check(argObject)) + { + arg = tqstrdup(SIPBytes_AS_STRING(argObject)); + } + else + { + return NULL; + } - // Copy the argument and save a pointer to it. - strcpy(argv[a],arg); - argv[a + argc + 1] = argv[a]; + argv[a] = argv[a + argc + 1] = arg; } - argv[argc + argc + 1] = argv[argc] = NULL; - - *argcp = argc; - + argv[argc] = argv[argc + argc + 1] = NULL; + if (argcp) + { + *argcp = argc; + } return argv; } |