diff options
author | Bram Moolenaar <Bram@vim.org> | 2014-07-23 16:57:00 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2014-07-23 16:57:00 +0200 |
commit | 12a28d4b29f1b8a42d9fb994f1d2c9cb717564ab (patch) | |
tree | f54eac4b354924ed4b79c405033ec6503e5c8503 /src/if_python.c | |
parent | 158a1b074828341767ad4ce912b346bf14189605 (diff) | |
download | vim-12a28d4b29f1b8a42d9fb994f1d2c9cb717564ab.zip |
updated for version 7.4.380
Problem: Loading python may cause Vim to exit.
Solution: Avoid loading the "site" module. (Taro Muraoka)
Diffstat (limited to 'src/if_python.c')
-rw-r--r-- | src/if_python.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/if_python.c b/src/if_python.c index c95cb5d0e..b7bfa785c 100644 --- a/src/if_python.c +++ b/src/if_python.c @@ -295,6 +295,9 @@ struct PyMethodDef { Py_ssize_t a; }; # define PyCObject_FromVoidPtr dll_PyCObject_FromVoidPtr # define PyCObject_AsVoidPtr dll_PyCObject_AsVoidPtr # endif +# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 +# define Py_NoSiteFlag (*dll_Py_NoSiteFlag) +# endif /* * Pointers for dynamic link @@ -440,6 +443,9 @@ static void* (*dll_PyCapsule_GetPointer)(PyObject *, char *); static PyObject* (*dll_PyCObject_FromVoidPtr)(void *cobj, void (*destr)(void *)); static void* (*dll_PyCObject_AsVoidPtr)(PyObject *); # endif +# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 +static int* dll_Py_NoSiteFlag; +# endif static HINSTANCE hinstPython = 0; /* Instance of python.dll */ @@ -633,6 +639,9 @@ static struct {"PyCObject_FromVoidPtr", (PYTHON_PROC*)&dll_PyCObject_FromVoidPtr}, {"PyCObject_AsVoidPtr", (PYTHON_PROC*)&dll_PyCObject_AsVoidPtr}, # endif +# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 + {"Py_NoSiteFlag", (PYTHON_PROC*)&dll_Py_NoSiteFlag}, +# endif {"", NULL}, }; @@ -901,6 +910,10 @@ Python_Init(void) { if (!initialised) { +#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 + PyObject *site; +#endif + #ifdef DYNAMIC_PYTHON if (!python_enabled(TRUE)) { @@ -915,11 +928,29 @@ Python_Init(void) init_structs(); +#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 + /* Disable implicit 'import site', because it may cause Vim to exit + * when it can't be found. */ + Py_NoSiteFlag++; +#endif + #if !defined(MACOS) || defined(MACOS_X_UNIX) Py_Initialize(); #else PyMac_Initialize(); #endif + +#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 + /* 'import site' explicitly. */ + site = PyImport_ImportModule("site"); + if (site == NULL) + { + EMSG(_("E887: Sorry, this command is disabled, the Python's site module could not be loaded.")); + goto fail; + } + Py_DECREF(site); +#endif + /* Initialise threads, and below save the state using * PyEval_SaveThread. Without the call to PyEval_SaveThread, thread * specific state (such as the system trace hook), will be lost |