servicemp3.cpp: more simple/flexible streaming detection
[enigma2.git] / lib / base / console.cpp
index 25318cc9e388550a7fb715e20dc329a7ea08799d..00187683258be0e8348e1d7ad9e07ff074504915 100644 (file)
@@ -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;
 }