refs bug #587
[enigma2.git] / lib / python / python.cpp
index ad029fb..c5faeed 100644 (file)
@@ -4,7 +4,8 @@
 #define _POSIX_C_SOURCE 200112L
 extern "C" void init_enigma();
 extern "C" void eBaseInit(void);
-extern void bsodFatal();
+extern "C" void eConsoleInit(void);
+extern void bsodFatal(const char *component);
 
 #define SKIP_PART2
 #include <lib/python/python.h>
@@ -43,7 +44,7 @@ ePyObject::operator PyObject*()
                if (m_file)
                        eDebug("last modified in file %s line %d from %d to %d",
                                m_file, m_line, m_from, m_to);
-               bsodFatal();
+               bsodFatal("enigma2, refcnt");
        }
        return 0;
 }
@@ -56,7 +57,7 @@ void ePyObject::incref(const char *file, int line)
                if (m_file)
                        eDebug("last modified in file %s line %d from %d to %d",
                                m_file, m_line, m_from, m_to);
-               bsodFatal();
+               bsodFatal("enigma2, refcnt");
        }
        if (m_erased || m_ob->ob_refcnt <= 0)
        {
@@ -65,7 +66,7 @@ void ePyObject::incref(const char *file, int line)
                if (m_file)
                        eDebug("last modified in file %s line %d from %d to %d",
                                m_file, m_line, m_from, m_to);
-               bsodFatal();
+               bsodFatal("enigma2, refcnt");
        }
        if (m_ob->ob_refcnt == 0x7FFFFFFF)
        {
@@ -74,7 +75,7 @@ void ePyObject::incref(const char *file, int line)
                if (m_file)
                        eDebug("last modified in file %s line %d from %d to %d",
                                m_file, m_line, m_from, m_to);
-               bsodFatal();
+               bsodFatal("enigma2, refcnt");
        }
        m_file = file;
        m_line = line;
@@ -91,7 +92,7 @@ void ePyObject::decref(const char *file, int line)
                if (m_file)
                        eDebug("last modified in file %s line %d from %d to %d",
                                m_file, m_line, m_from, m_to);
-               bsodFatal();
+               bsodFatal("enigma2, refcnt");
        }
        if (m_erased || m_ob->ob_refcnt <= 0)
        {
@@ -100,7 +101,7 @@ void ePyObject::decref(const char *file, int line)
                if (m_file)
                        eDebug("last modified in file %s line %d from %d to %d",
                                m_file, m_line, m_from, m_to);
-               bsodFatal();
+               bsodFatal("enigma2, refcnt");
        }
        m_file = file;
        m_line = line;
@@ -126,6 +127,7 @@ ePython::ePython()
 
        init_enigma();
        eBaseInit();
+       eConsoleInit();
 }
 
 ePython::~ePython()
@@ -133,6 +135,16 @@ ePython::~ePython()
        Py_Finalize();
 }
 
+int ePython::execFile(const char *file)
+{
+       FILE *fp = fopen(file, "r");
+       if (!fp)
+               return -ENOENT;
+       int ret = PyRun_SimpleFile(fp, file);
+       fclose(fp);
+       return ret;
+}
+
 int ePython::execute(const std::string &pythonfile, const std::string &funcname)
 {
        ePyObject pName, pModule, pDict, pFunc, pArgs, pValue;
@@ -195,7 +207,7 @@ int ePython::call(ePyObject pFunc, ePyObject pArgs)
                        eDebug("(PyObject_CallObject(%s,%s) failed)", PyString_AS_STRING(FuncStr), PyString_AS_STRING(ArgStr));
                        Py_DECREF(FuncStr);
                        Py_DECREF(ArgStr);
-                       bsodFatal();
+                       bsodFatal(0);
                }
        }
        return res;