summaryrefslogtreecommitdiffstats
path: root/Python/sysmodule.c
diff options
context:
space:
mode:
authorChristian Heimes <christian@cheimes.de>2008-01-30 17:21:22 (GMT)
committerChristian Heimes <christian@cheimes.de>2008-01-30 17:21:22 (GMT)
commit0d9244332b4c9dad8722f7ed651fb922de93afe6 (patch)
tree8b4c329ff0ff2b69483b60639296d301368b5fa5 /Python/sysmodule.c
parent67ac0667f0b74cc98f5cc4d23b39e9574154ec01 (diff)
downloadcpython-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.c38
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;