summaryrefslogtreecommitdiffstats
path: root/Include/longobject.h
diff options
context:
space:
mode:
authorGregory P. Smith <greg@mad-scientist.com>2010-03-14 06:49:55 (GMT)
committerGregory P. Smith <greg@mad-scientist.com>2010-03-14 06:49:55 (GMT)
commitfb94c5f1e5bb9ccd28bcd311f388db7bea35c865 (patch)
tree7d32df9daaf77314889d2537330055c5ed01245b /Include/longobject.h
parentdddd5e909895508b67b92156bc13ba68329d0d24 (diff)
downloadcpython-fb94c5f1e5bb9ccd28bcd311f388db7bea35c865.zip
cpython-fb94c5f1e5bb9ccd28bcd311f388db7bea35c865.tar.gz
cpython-fb94c5f1e5bb9ccd28bcd311f388db7bea35c865.tar.bz2
* Replaces the internals of the subprocess module from fork through exec on
POSIX systems with a C extension module. This is required in order for the subprocess module to be made thread safe. The pure python implementation is retained so that it can continue to be used if for some reason the _posixsubprocess extension module is not available. The unittest executes tests on both code paths to guarantee compatibility. * Moves PyLong_FromPid and PyLong_AsPid from posixmodule.c into longobject.h. Code reviewed by jeffrey.yasskin at http://codereview.appspot.com/223077/show
Diffstat (limited to 'Include/longobject.h')
-rw-r--r--Include/longobject.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/Include/longobject.h b/Include/longobject.h
index 83d780d..4dc2e18 100644
--- a/Include/longobject.h
+++ b/Include/longobject.h
@@ -41,6 +41,23 @@ PyAPI_FUNC(PyObject *) PyLong_GetInfo(void);
#define PyLong_AsSocket_t(fd) (SOCKET_T)PyLong_AsLongLong(fd)
#endif
+/* Issue #1983: pid_t can be longer than a C long on some systems */
+#if !defined(SIZEOF_PID_T) || SIZEOF_PID_T == SIZEOF_INT
+#define PARSE_PID "i"
+#define PyLong_FromPid PyLong_FromLong
+#define PyLong_AsPid PyLong_AsLong
+#elif SIZEOF_PID_T == SIZEOF_LONG
+#define PARSE_PID "l"
+#define PyLong_FromPid PyLong_FromLong
+#define PyLong_AsPid PyLong_AsLong
+#elif defined(SIZEOF_LONG_LONG) && SIZEOF_PID_T == SIZEOF_LONG_LONG
+#define PARSE_PID "L"
+#define PyLong_FromPid PyLong_FromLongLong
+#define PyLong_AsPid PyLong_AsLongLong
+#else
+#error "sizeof(pid_t) is neither sizeof(int), sizeof(long) or sizeof(long long)"
+#endif /* SIZEOF_PID_T */
+
/* For use by intobject.c only */
PyAPI_DATA(unsigned char) _PyLong_DigitValue[256];