summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2013-11-06 22:36:40 +0100
committerVictor Stinner <victor.stinner@gmail.com>2013-11-06 22:36:40 +0100
commitb056c912da3f1933c658aa31ad246ec4b54beec5 (patch)
treeecbfeb741eff2c31d6d5368d5444c513d87b3bb0
parent248af321d0a3954ba4c8bd3de5c0327c46a2920b (diff)
downloadcpython-b056c912da3f1933c658aa31ad246ec4b54beec5.tar.gz
Issue #19512: Add _PySys_GetObjectId() and _PySys_SetObjectId() functions
-rw-r--r--Include/sysmodule.h3
-rw-r--r--Python/sysmodule.c25
2 files changed, 28 insertions, 0 deletions
diff --git a/Include/sysmodule.h b/Include/sysmodule.h
index 0cabf6fee7..925c2a34f4 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 b8cf31d435..32136e844f 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -42,6 +42,16 @@ extern const char *PyWin_DLLVersionString;
#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)
{
PyThreadState *tstate = PyThreadState_GET();
@@ -52,6 +62,21 @@ PySys_GetObject(const char *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)
{
PyThreadState *tstate = PyThreadState_GET();