diff options
author | Christian Heimes <christian@cheimes.de> | 2008-01-30 17:21:22 (GMT) |
---|---|---|
committer | Christian Heimes <christian@cheimes.de> | 2008-01-30 17:21:22 (GMT) |
commit | 0d9244332b4c9dad8722f7ed651fb922de93afe6 (patch) | |
tree | 8b4c329ff0ff2b69483b60639296d301368b5fa5 /Python/sysmodule.c | |
parent | 67ac0667f0b74cc98f5cc4d23b39e9574154ec01 (diff) | |
download | cpython-0d9244332b4c9dad8722f7ed651fb922de93afe6.zip cpython-0d9244332b4c9dad8722f7ed651fb922de93afe6.tar.gz cpython-0d9244332b4c9dad8722f7ed651fb922de93afe6.tar.bz2 |
Fixed some references leaks in sys.
Diffstat (limited to 'Python/sysmodule.c')
-rw-r--r-- | Python/sysmodule.c | 38 |
1 files changed, 17 insertions, 21 deletions
diff --git a/Python/sysmodule.c b/Python/sysmodule.c index f9fb815..80d24d1 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -1181,7 +1181,6 @@ make_flags(void) return NULL; } - Py_INCREF(seq); return seq; } @@ -1199,6 +1198,11 @@ _PySys_Init(void) if (m == NULL) return NULL; sysdict = PyModule_GetDict(m); +#define SET_SYS_FROM_STRING(key, value) \ + v = value; \ + if (v != NULL) \ + PyDict_SetItemString(sysdict, key, v); \ + Py_XDECREF(v) { /* XXX: does this work on Win/Win64? (see posix_fstat) */ @@ -1258,19 +1262,17 @@ _PySys_Init(void) Py_XDECREF(sysin); Py_XDECREF(sysout); Py_XDECREF(syserr); - PyDict_SetItemString(sysdict, "version", - v = PyString_FromString(Py_GetVersion())); - Py_XDECREF(v); - PyDict_SetItemString(sysdict, "hexversion", - v = PyInt_FromLong(PY_VERSION_HEX)); - Py_XDECREF(v); + + SET_SYS_FROM_STRING("version", + PyString_FromString(Py_GetVersion())); + SET_SYS_FROM_STRING("hexversion", + PyInt_FromLong(PY_VERSION_HEX)); svnversion_init(); - v = Py_BuildValue("(ssz)", "CPython", branch, svn_revision); - PyDict_SetItemString(sysdict, "subversion", v); - Py_XDECREF(v); - PyDict_SetItemString(sysdict, "dont_write_bytecode", - v = PyBool_FromLong(Py_DontWriteBytecodeFlag)); - Py_XDECREF(v); + SET_SYS_FROM_STRING("subversion", + Py_BuildValue("(ssz)", "CPython", branch, + svn_revision)); + SET_SYS_FROM_STRING("dont_write_bytecode", + PyBool_FromLong(Py_DontWriteBytecodeFlag)); /* * These release level checks are mutually exclusive and cover * the field, so don't get too fancy with the pre-processor! @@ -1285,12 +1287,6 @@ _PySys_Init(void) s = "final"; #endif -#define SET_SYS_FROM_STRING(key, value) \ - v = value; \ - if (v != NULL) \ - PyDict_SetItemString(sysdict, key, v); \ - Py_XDECREF(v) - SET_SYS_FROM_STRING("version_info", Py_BuildValue("iiisi", PY_MAJOR_VERSION, PY_MINOR_VERSION, @@ -1340,7 +1336,6 @@ _PySys_Init(void) SET_SYS_FROM_STRING("winver", PyString_FromString(PyWin_DLLVersionString)); #endif -#undef SET_SYS_FROM_STRING if (warnoptions == NULL) { warnoptions = PyList_New(0); } @@ -1352,11 +1347,12 @@ _PySys_Init(void) } PyStructSequence_InitType(&FlagsType, &flags_desc); - PyDict_SetItemString(sysdict, "flags", make_flags()); + SET_SYS_FROM_STRING("flags", make_flags()); /* prevent user from creating new instances */ FlagsType.tp_init = NULL; FlagsType.tp_new = NULL; +#undef SET_SYS_FROM_STRING if (PyErr_Occurred()) return NULL; return m; |