X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=lib%2Fbase%2Fconsole.cpp;h=43f9f61e863160dd2ad679cad98b152ea4ddc55e;hb=485ad5f92eb769b058a8e0c2cc0b60256fbca80b;hp=25318cc9e388550a7fb715e20dc329a7ea08799d;hpb=728c78384a71b0231cfe0047292e34b8ec860522;p=vuplus_dvbapp diff --git a/lib/base/console.cpp b/lib/base/console.cpp index 25318cc..43f9f61 100644 --- a/lib/base/console.cpp +++ b/lib/base/console.cpp @@ -109,6 +109,7 @@ int eConsoleAppContainer::execute(const char *cmdline, const char * const argv[] // eDebug("pipe in = %d, out = %d, err = %d", fd[0], fd[1], fd[2]); + ::fcntl(fd[0], F_SETFL, O_NONBLOCK); ::fcntl(fd[1], F_SETFL, O_NONBLOCK); ::fcntl(fd[2], F_SETFL, O_NONBLOCK); in = eSocketNotifier::create(eApp, fd[0], eSocketNotifier::Read|eSocketNotifier::Priority|eSocketNotifier::Hungup ); @@ -497,7 +498,7 @@ eConsolePy_execute(eConsolePy* self, PyObject *argt) argv[argpos++] = PyString_AsString(arg); } argv[argpos] = 0; - return PyInt_FromLong(self->cont->execute(argv[0], argv)); + return PyInt_FromLong(self->cont->execute(argv[0], argv+1)); } else { @@ -515,18 +516,15 @@ eConsolePy_write(eConsolePy* self, PyObject *args) { int len; char *data; - if (PyArg_ParseTuple(args, "si", &data, &len)) - ; - else + int ret = -1; + Py_ssize_t argc = PyTuple_Size(args); + if (argc > 1) + ret = PyArg_ParseTuple(args, "si", &data, &len); + else if (argc == 1) { PyObject *ob; - if (!PyArg_ParseTuple(args, "O", &ob) || !PyString_Check(ob)) - { - PyErr_SetString(PyExc_TypeError, - "1st arg must be a string, optionaly 2nd arg can be the string length"); - return NULL; - } - else + ret = !PyArg_ParseTuple(args, "O", &ob) || !PyString_Check(ob); + if (!ret) { Py_ssize_t length; if (!PyString_AsStringAndSize(ob, &data, &length)) @@ -535,6 +533,12 @@ eConsolePy_write(eConsolePy* self, PyObject *args) len = 0; } } + if (ret) + { + PyErr_SetString(PyExc_TypeError, + "1st arg must be a string, optionaly 2nd arg can be the string length"); + return NULL; + } self->cont->write(data, len); Py_RETURN_NONE; }