From d67bd45537856a097d807e2b781fcaf60c68b89f Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 6 Nov 2013 22:36:40 +0100 Subject: [PATCH] Issue #19512: Add _PySys_GetObjectId() and _PySys_SetObjectId() functions --- Include/sysmodule.h | 3 +++ Python/sysmodule.c | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/Include/sysmodule.h b/Include/sysmodule.h index 0cabf6fee7f..925c2a34f47 100644 --- a/Include/sysmodule.h +++ b/Include/sysmodule.h @@ -8,7 +8,10 @@ extern "C" { #endif PyAPI_FUNC(PyObject *) PySys_GetObject(const char *); +PyAPI_FUNC(PyObject *) _PySys_GetObjectId(_Py_Identifier *key); PyAPI_FUNC(int) PySys_SetObject(const char *, PyObject *); +PyAPI_FUNC(int) _PySys_SetObjectId(_Py_Identifier *key, PyObject *); + PyAPI_FUNC(void) PySys_SetArgv(int, wchar_t **); PyAPI_FUNC(void) PySys_SetArgvEx(int, wchar_t **, int); PyAPI_FUNC(void) PySys_SetPath(const wchar_t *); diff --git a/Python/sysmodule.c b/Python/sysmodule.c index b8cf31d4351..32136e844f4 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -41,6 +41,16 @@ extern const char *PyWin_DLLVersionString; #include #endif +PyObject * +_PySys_GetObjectId(_Py_Identifier *key) +{ + PyThreadState *tstate = PyThreadState_GET(); + PyObject *sd = tstate->interp->sysdict; + if (sd == NULL) + return NULL; + return _PyDict_GetItemId(sd, key); +} + PyObject * PySys_GetObject(const char *name) { @@ -51,6 +61,21 @@ PySys_GetObject(const char *name) return PyDict_GetItemString(sd, name); } +int +_PySys_SetObjectId(_Py_Identifier *key, PyObject *v) +{ + PyThreadState *tstate = PyThreadState_GET(); + PyObject *sd = tstate->interp->sysdict; + if (v == NULL) { + if (_PyDict_GetItemId(sd, key) == NULL) + return 0; + else + return _PyDict_DelItemId(sd, key); + } + else + return _PyDict_SetItemId(sd, key, v); +} + int PySys_SetObject(const char *name, PyObject *v) {