]> git.proxmox.com Git - mirror_edk2.git/blobdiff - AppPkg/Applications/Python/Python-2.7.10/Python/modsupport.c
edk2: Remove AppPkg, StdLib, StdLibPrivateInternalFiles
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.10 / Python / modsupport.c
diff --git a/AppPkg/Applications/Python/Python-2.7.10/Python/modsupport.c b/AppPkg/Applications/Python/Python-2.7.10/Python/modsupport.c
deleted file mode 100644 (file)
index e383bdf..0000000
+++ /dev/null
@@ -1,644 +0,0 @@
-\r
-/* Module support implementation */\r
-\r
-#include "Python.h"\r
-\r
-#define FLAG_SIZE_T 1\r
-typedef double va_double;\r
-\r
-static PyObject *va_build_value(const char *, va_list, int);\r
-\r
-/* Package context -- the full module name for package imports */\r
-char *_Py_PackageContext = NULL;\r
-\r
-/* Py_InitModule4() parameters:\r
-   - name is the module name\r
-   - methods is the list of top-level functions\r
-   - doc is the documentation string\r
-   - passthrough is passed as self to functions defined in the module\r
-   - api_version is the value of PYTHON_API_VERSION at the time the\r
-     module was compiled\r
-\r
-   Return value is a borrowed reference to the module object; or NULL\r
-   if an error occurred (in Python 1.4 and before, errors were fatal).\r
-   Errors may still leak memory.\r
-*/\r
-\r
-static char api_version_warning[] =\r
-"Python C API version mismatch for module %.100s:\\r
- This Python has API version %d, module %.100s has version %d.";\r
-\r
-PyObject *\r
-Py_InitModule4(const char *name, PyMethodDef *methods, const char *doc,\r
-               PyObject *passthrough, int module_api_version)\r
-{\r
-    PyObject *m, *d, *v, *n;\r
-    PyMethodDef *ml;\r
-    PyInterpreterState *interp = PyThreadState_Get()->interp;\r
-    if (interp->modules == NULL)\r
-        Py_FatalError("Python import machinery not initialized");\r
-    if (module_api_version != PYTHON_API_VERSION) {\r
-        char message[512];\r
-        PyOS_snprintf(message, sizeof(message),\r
-                      api_version_warning, name,\r
-                      PYTHON_API_VERSION, name,\r
-                      module_api_version);\r
-        if (PyErr_Warn(PyExc_RuntimeWarning, message))\r
-            return NULL;\r
-    }\r
-    /* Make sure name is fully qualified.\r
-\r
-       This is a bit of a hack: when the shared library is loaded,\r
-       the module name is "package.module", but the module calls\r
-       Py_InitModule*() with just "module" for the name.  The shared\r
-       library loader squirrels away the true name of the module in\r
-       _Py_PackageContext, and Py_InitModule*() will substitute this\r
-       (if the name actually matches).\r
-    */\r
-    if (_Py_PackageContext != NULL) {\r
-        char *p = strrchr(_Py_PackageContext, '.');\r
-        if (p != NULL && strcmp(name, p+1) == 0) {\r
-            name = _Py_PackageContext;\r
-            _Py_PackageContext = NULL;\r
-        }\r
-    }\r
-    if ((m = PyImport_AddModule(name)) == NULL)\r
-        return NULL;\r
-    d = PyModule_GetDict(m);\r
-    if (methods != NULL) {\r
-        n = PyString_FromString(name);\r
-        if (n == NULL)\r
-            return NULL;\r
-        for (ml = methods; ml->ml_name != NULL; ml++) {\r
-            if ((ml->ml_flags & METH_CLASS) ||\r
-                (ml->ml_flags & METH_STATIC)) {\r
-                PyErr_SetString(PyExc_ValueError,\r
-                                "module functions cannot set"\r
-                                " METH_CLASS or METH_STATIC");\r
-                Py_DECREF(n);\r
-                return NULL;\r
-            }\r
-            v = PyCFunction_NewEx(ml, passthrough, n);\r
-            if (v == NULL) {\r
-                Py_DECREF(n);\r
-                return NULL;\r
-            }\r
-            if (PyDict_SetItemString(d, ml->ml_name, v) != 0) {\r
-                Py_DECREF(v);\r
-                Py_DECREF(n);\r
-                return NULL;\r
-            }\r
-            Py_DECREF(v);\r
-        }\r
-        Py_DECREF(n);\r
-    }\r
-    if (doc != NULL) {\r
-        v = PyString_FromString(doc);\r
-        if (v == NULL || PyDict_SetItemString(d, "__doc__", v) != 0) {\r
-            Py_XDECREF(v);\r
-            return NULL;\r
-        }\r
-        Py_DECREF(v);\r
-    }\r
-    return m;\r
-}\r
-\r
-\r
-/* Helper for mkvalue() to scan the length of a format */\r
-\r
-static int\r
-countformat(const char *format, int endchar)\r
-{\r
-    int count = 0;\r
-    int level = 0;\r
-    while (level > 0 || *format != endchar) {\r
-        switch (*format) {\r
-        case '\0':\r
-            /* Premature end */\r
-            PyErr_SetString(PyExc_SystemError,\r
-                            "unmatched paren in format");\r
-            return -1;\r
-        case '(':\r
-        case '[':\r
-        case '{':\r
-            if (level == 0)\r
-                count++;\r
-            level++;\r
-            break;\r
-        case ')':\r
-        case ']':\r
-        case '}':\r
-            level--;\r
-            break;\r
-        case '#':\r
-        case '&':\r
-        case ',':\r
-        case ':':\r
-        case ' ':\r
-        case '\t':\r
-            break;\r
-        default:\r
-            if (level == 0)\r
-                count++;\r
-        }\r
-        format++;\r
-    }\r
-    return count;\r
-}\r
-\r
-\r
-/* Generic function to create a value -- the inverse of getargs() */\r
-/* After an original idea and first implementation by Steven Miale */\r
-\r
-static PyObject *do_mktuple(const char**, va_list *, int, int, int);\r
-static PyObject *do_mklist(const char**, va_list *, int, int, int);\r
-static PyObject *do_mkdict(const char**, va_list *, int, int, int);\r
-static PyObject *do_mkvalue(const char**, va_list *, int);\r
-\r
-\r
-static PyObject *\r
-do_mkdict(const char **p_format, va_list *p_va, int endchar, int n, int flags)\r
-{\r
-    PyObject *d;\r
-    int i;\r
-    int itemfailed = 0;\r
-    if (n < 0)\r
-        return NULL;\r
-    if ((d = PyDict_New()) == NULL)\r
-        return NULL;\r
-    /* Note that we can't bail immediately on error as this will leak\r
-       refcounts on any 'N' arguments. */\r
-    for (i = 0; i < n; i+= 2) {\r
-        PyObject *k, *v;\r
-        int err;\r
-        k = do_mkvalue(p_format, p_va, flags);\r
-        if (k == NULL) {\r
-            itemfailed = 1;\r
-            Py_INCREF(Py_None);\r
-            k = Py_None;\r
-        }\r
-        v = do_mkvalue(p_format, p_va, flags);\r
-        if (v == NULL) {\r
-            itemfailed = 1;\r
-            Py_INCREF(Py_None);\r
-            v = Py_None;\r
-        }\r
-        err = PyDict_SetItem(d, k, v);\r
-        Py_DECREF(k);\r
-        Py_DECREF(v);\r
-        if (err < 0 || itemfailed) {\r
-            Py_DECREF(d);\r
-            return NULL;\r
-        }\r
-    }\r
-    if (d != NULL && **p_format != endchar) {\r
-        Py_DECREF(d);\r
-        d = NULL;\r
-        PyErr_SetString(PyExc_SystemError,\r
-                        "Unmatched paren in format");\r
-    }\r
-    else if (endchar)\r
-        ++*p_format;\r
-    return d;\r
-}\r
-\r
-static PyObject *\r
-do_mklist(const char **p_format, va_list *p_va, int endchar, int n, int flags)\r
-{\r
-    PyObject *v;\r
-    int i;\r
-    int itemfailed = 0;\r
-    if (n < 0)\r
-        return NULL;\r
-    v = PyList_New(n);\r
-    if (v == NULL)\r
-        return NULL;\r
-    /* Note that we can't bail immediately on error as this will leak\r
-       refcounts on any 'N' arguments. */\r
-    for (i = 0; i < n; i++) {\r
-        PyObject *w = do_mkvalue(p_format, p_va, flags);\r
-        if (w == NULL) {\r
-            itemfailed = 1;\r
-            Py_INCREF(Py_None);\r
-            w = Py_None;\r
-        }\r
-        PyList_SET_ITEM(v, i, w);\r
-    }\r
-\r
-    if (itemfailed) {\r
-        /* do_mkvalue() should have already set an error */\r
-        Py_DECREF(v);\r
-        return NULL;\r
-    }\r
-    if (**p_format != endchar) {\r
-        Py_DECREF(v);\r
-        PyErr_SetString(PyExc_SystemError,\r
-                        "Unmatched paren in format");\r
-        return NULL;\r
-    }\r
-    if (endchar)\r
-        ++*p_format;\r
-    return v;\r
-}\r
-\r
-#ifdef Py_USING_UNICODE\r
-static int\r
-_ustrlen(Py_UNICODE *u)\r
-{\r
-    int i = 0;\r
-    Py_UNICODE *v = u;\r
-    while (*v != 0) { i++; v++; }\r
-    return i;\r
-}\r
-#endif\r
-\r
-static PyObject *\r
-do_mktuple(const char **p_format, va_list *p_va, int endchar, int n, int flags)\r
-{\r
-    PyObject *v;\r
-    int i;\r
-    int itemfailed = 0;\r
-    if (n < 0)\r
-        return NULL;\r
-    if ((v = PyTuple_New(n)) == NULL)\r
-        return NULL;\r
-    /* Note that we can't bail immediately on error as this will leak\r
-       refcounts on any 'N' arguments. */\r
-    for (i = 0; i < n; i++) {\r
-        PyObject *w = do_mkvalue(p_format, p_va, flags);\r
-        if (w == NULL) {\r
-            itemfailed = 1;\r
-            Py_INCREF(Py_None);\r
-            w = Py_None;\r
-        }\r
-        PyTuple_SET_ITEM(v, i, w);\r
-    }\r
-    if (itemfailed) {\r
-        /* do_mkvalue() should have already set an error */\r
-        Py_DECREF(v);\r
-        return NULL;\r
-    }\r
-    if (**p_format != endchar) {\r
-        Py_DECREF(v);\r
-        PyErr_SetString(PyExc_SystemError,\r
-                        "Unmatched paren in format");\r
-        return NULL;\r
-    }\r
-    if (endchar)\r
-        ++*p_format;\r
-    return v;\r
-}\r
-\r
-static PyObject *\r
-do_mkvalue(const char **p_format, va_list *p_va, int flags)\r
-{\r
-    for (;;) {\r
-        switch (*(*p_format)++) {\r
-        case '(':\r
-            return do_mktuple(p_format, p_va, ')',\r
-                              countformat(*p_format, ')'), flags);\r
-\r
-        case '[':\r
-            return do_mklist(p_format, p_va, ']',\r
-                             countformat(*p_format, ']'), flags);\r
-\r
-        case '{':\r
-            return do_mkdict(p_format, p_va, '}',\r
-                             countformat(*p_format, '}'), flags);\r
-\r
-        case 'b':\r
-        case 'B':\r
-        case 'h':\r
-        case 'i':\r
-            return PyInt_FromLong((long)va_arg(*p_va, int));\r
-\r
-        case 'H':\r
-            return PyInt_FromLong((long)va_arg(*p_va, unsigned int));\r
-\r
-        case 'I':\r
-        {\r
-            unsigned int n;\r
-            n = va_arg(*p_va, unsigned int);\r
-            if (n > (unsigned long)PyInt_GetMax())\r
-                return PyLong_FromUnsignedLong((unsigned long)n);\r
-            else\r
-                return PyInt_FromLong(n);\r
-        }\r
-\r
-        case 'n':\r
-#if SIZEOF_SIZE_T!=SIZEOF_LONG\r
-            return PyInt_FromSsize_t(va_arg(*p_va, Py_ssize_t));\r
-#endif\r
-            /* Fall through from 'n' to 'l' if Py_ssize_t is long */\r
-        case 'l':\r
-            return PyInt_FromLong(va_arg(*p_va, long));\r
-\r
-        case 'k':\r
-        {\r
-            unsigned long n;\r
-            n = va_arg(*p_va, unsigned long);\r
-            if (n > (unsigned long)PyInt_GetMax())\r
-                return PyLong_FromUnsignedLong(n);\r
-            else\r
-                return PyInt_FromLong(n);\r
-        }\r
-\r
-#ifdef HAVE_LONG_LONG\r
-        case 'L':\r
-            return PyLong_FromLongLong((PY_LONG_LONG)va_arg(*p_va, PY_LONG_LONG));\r
-\r
-        case 'K':\r
-            return PyLong_FromUnsignedLongLong((PY_LONG_LONG)va_arg(*p_va, unsigned PY_LONG_LONG));\r
-#endif\r
-#ifdef Py_USING_UNICODE\r
-        case 'u':\r
-        {\r
-            PyObject *v;\r
-            Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *);\r
-            Py_ssize_t n;\r
-            if (**p_format == '#') {\r
-                ++*p_format;\r
-                if (flags & FLAG_SIZE_T)\r
-                    n = va_arg(*p_va, Py_ssize_t);\r
-                else\r
-                    n = va_arg(*p_va, int);\r
-            }\r
-            else\r
-                n = -1;\r
-            if (u == NULL) {\r
-                v = Py_None;\r
-                Py_INCREF(v);\r
-            }\r
-            else {\r
-                if (n < 0)\r
-                    n = _ustrlen(u);\r
-                v = PyUnicode_FromUnicode(u, n);\r
-            }\r
-            return v;\r
-        }\r
-#endif\r
-        case 'f':\r
-        case 'd':\r
-            return PyFloat_FromDouble(\r
-                (double)va_arg(*p_va, va_double));\r
-\r
-#ifndef WITHOUT_COMPLEX\r
-        case 'D':\r
-            return PyComplex_FromCComplex(\r
-                *((Py_complex *)va_arg(*p_va, Py_complex *)));\r
-#endif /* WITHOUT_COMPLEX */\r
-\r
-        case 'c':\r
-        {\r
-            char p[1];\r
-            p[0] = (char)va_arg(*p_va, int);\r
-            return PyString_FromStringAndSize(p, 1);\r
-        }\r
-\r
-        case 's':\r
-        case 'z':\r
-        {\r
-            PyObject *v;\r
-            char *str = va_arg(*p_va, char *);\r
-            Py_ssize_t n;\r
-            if (**p_format == '#') {\r
-                ++*p_format;\r
-                if (flags & FLAG_SIZE_T)\r
-                    n = va_arg(*p_va, Py_ssize_t);\r
-                else\r
-                    n = va_arg(*p_va, int);\r
-            }\r
-            else\r
-                n = -1;\r
-            if (str == NULL) {\r
-                v = Py_None;\r
-                Py_INCREF(v);\r
-            }\r
-            else {\r
-                if (n < 0) {\r
-                    size_t m = strlen(str);\r
-                    if (m > PY_SSIZE_T_MAX) {\r
-                        PyErr_SetString(PyExc_OverflowError,\r
-                            "string too long for Python string");\r
-                        return NULL;\r
-                    }\r
-                    n = (Py_ssize_t)m;\r
-                }\r
-                v = PyString_FromStringAndSize(str, n);\r
-            }\r
-            return v;\r
-        }\r
-\r
-        case 'N':\r
-        case 'S':\r
-        case 'O':\r
-        if (**p_format == '&') {\r
-            typedef PyObject *(*converter)(void *);\r
-            converter func = va_arg(*p_va, converter);\r
-            void *arg = va_arg(*p_va, void *);\r
-            ++*p_format;\r
-            return (*func)(arg);\r
-        }\r
-        else {\r
-            PyObject *v;\r
-            v = va_arg(*p_va, PyObject *);\r
-            if (v != NULL) {\r
-                if (*(*p_format - 1) != 'N')\r
-                    Py_INCREF(v);\r
-            }\r
-            else if (!PyErr_Occurred())\r
-                /* If a NULL was passed\r
-                 * because a call that should\r
-                 * have constructed a value\r
-                 * failed, that's OK, and we\r
-                 * pass the error on; but if\r
-                 * no error occurred it's not\r
-                 * clear that the caller knew\r
-                 * what she was doing. */\r
-                PyErr_SetString(PyExc_SystemError,\r
-                    "NULL object passed to Py_BuildValue");\r
-            return v;\r
-        }\r
-\r
-        case ':':\r
-        case ',':\r
-        case ' ':\r
-        case '\t':\r
-            break;\r
-\r
-        default:\r
-            PyErr_SetString(PyExc_SystemError,\r
-                "bad format char passed to Py_BuildValue");\r
-            return NULL;\r
-\r
-        }\r
-    }\r
-}\r
-\r
-\r
-PyObject *\r
-Py_BuildValue(const char *format, ...)\r
-{\r
-    va_list va;\r
-    PyObject* retval;\r
-    va_start(va, format);\r
-    retval = va_build_value(format, va, 0);\r
-    va_end(va);\r
-    return retval;\r
-}\r
-\r
-PyObject *\r
-_Py_BuildValue_SizeT(const char *format, ...)\r
-{\r
-    va_list va;\r
-    PyObject* retval;\r
-    va_start(va, format);\r
-    retval = va_build_value(format, va, FLAG_SIZE_T);\r
-    va_end(va);\r
-    return retval;\r
-}\r
-\r
-PyObject *\r
-Py_VaBuildValue(const char *format, va_list va)\r
-{\r
-    return va_build_value(format, va, 0);\r
-}\r
-\r
-PyObject *\r
-_Py_VaBuildValue_SizeT(const char *format, va_list va)\r
-{\r
-    return va_build_value(format, va, FLAG_SIZE_T);\r
-}\r
-\r
-static PyObject *\r
-va_build_value(const char *format, va_list va, int flags)\r
-{\r
-    const char *f = format;\r
-    int n = countformat(f, '\0');\r
-    va_list lva;\r
-\r
-#ifdef VA_LIST_IS_ARRAY\r
-    memcpy(lva, va, sizeof(va_list));\r
-#else\r
-#ifdef __va_copy\r
-    __va_copy(lva, va);\r
-#else\r
-    lva = va;\r
-#endif\r
-#endif\r
-\r
-    if (n < 0)\r
-        return NULL;\r
-    if (n == 0) {\r
-        Py_INCREF(Py_None);\r
-        return Py_None;\r
-    }\r
-    if (n == 1)\r
-        return do_mkvalue(&f, &lva, flags);\r
-    return do_mktuple(&f, &lva, '\0', n, flags);\r
-}\r
-\r
-\r
-PyObject *\r
-PyEval_CallFunction(PyObject *obj, const char *format, ...)\r
-{\r
-    va_list vargs;\r
-    PyObject *args;\r
-    PyObject *res;\r
-\r
-    va_start(vargs, format);\r
-\r
-    args = Py_VaBuildValue(format, vargs);\r
-    va_end(vargs);\r
-\r
-    if (args == NULL)\r
-        return NULL;\r
-\r
-    res = PyEval_CallObject(obj, args);\r
-    Py_DECREF(args);\r
-\r
-    return res;\r
-}\r
-\r
-\r
-PyObject *\r
-PyEval_CallMethod(PyObject *obj, const char *methodname, const char *format, ...)\r
-{\r
-    va_list vargs;\r
-    PyObject *meth;\r
-    PyObject *args;\r
-    PyObject *res;\r
-\r
-    meth = PyObject_GetAttrString(obj, methodname);\r
-    if (meth == NULL)\r
-        return NULL;\r
-\r
-    va_start(vargs, format);\r
-\r
-    args = Py_VaBuildValue(format, vargs);\r
-    va_end(vargs);\r
-\r
-    if (args == NULL) {\r
-        Py_DECREF(meth);\r
-        return NULL;\r
-    }\r
-\r
-    res = PyEval_CallObject(meth, args);\r
-    Py_DECREF(meth);\r
-    Py_DECREF(args);\r
-\r
-    return res;\r
-}\r
-\r
-int\r
-PyModule_AddObject(PyObject *m, const char *name, PyObject *o)\r
-{\r
-    PyObject *dict;\r
-    if (!PyModule_Check(m)) {\r
-        PyErr_SetString(PyExc_TypeError,\r
-                    "PyModule_AddObject() needs module as first arg");\r
-        return -1;\r
-    }\r
-    if (!o) {\r
-        if (!PyErr_Occurred())\r
-            PyErr_SetString(PyExc_TypeError,\r
-                            "PyModule_AddObject() needs non-NULL value");\r
-        return -1;\r
-    }\r
-\r
-    dict = PyModule_GetDict(m);\r
-    if (dict == NULL) {\r
-        /* Internal error -- modules must have a dict! */\r
-        PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",\r
-                     PyModule_GetName(m));\r
-        return -1;\r
-    }\r
-    if (PyDict_SetItemString(dict, name, o))\r
-        return -1;\r
-    Py_DECREF(o);\r
-    return 0;\r
-}\r
-\r
-int\r
-PyModule_AddIntConstant(PyObject *m, const char *name, long value)\r
-{\r
-    PyObject *o = PyInt_FromLong(value);\r
-    if (!o)\r
-        return -1;\r
-    if (PyModule_AddObject(m, name, o) == 0)\r
-        return 0;\r
-    Py_DECREF(o);\r
-    return -1;\r
-}\r
-\r
-int\r
-PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)\r
-{\r
-    PyObject *o = PyString_FromString(value);\r
-    if (!o)\r
-        return -1;\r
-    if (PyModule_AddObject(m, name, o) == 0)\r
-        return 0;\r
-    Py_DECREF(o);\r
-    return -1;\r
-}\r