[Python-checkins] cpython (3.2): Bugfix for issue #8052 fix on *BSD variants.

gregory.p.smith python-checkins at python.org
Sun Jan 22 00:21:19 CET 2012


http://hg.python.org/cpython/rev/d0acd8169c2a
changeset:   74567:d0acd8169c2a
branch:      3.2
parent:      74565:780992c9afea
user:        Gregory P. Smith <greg at krypto.org>
date:        Sat Jan 21 15:16:17 2012 -0800
summary:
  Bugfix for issue #8052 fix on *BSD variants.

Many lack readdir64, use readdir.  Only use readdir64 on solaris where
it is required to work around a solaris bug.

files:
  Modules/_posixsubprocess.c |  22 +++++++++++++---------
  1 files changed, 13 insertions(+), 9 deletions(-)


diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c
--- a/Modules/_posixsubprocess.c
+++ b/Modules/_posixsubprocess.c
@@ -15,12 +15,17 @@
 #include <dirent.h>
 #endif
 
-#if defined(sun) && !defined(HAVE_DIRFD)
+#if defined(sun)
+/* readdir64 is used to work around Solaris 9 bug 6395699. */
+# define readdir readdir64
+# define dirent dirent64
+# if !defined(HAVE_DIRFD)
 /* Some versions of Solaris lack dirfd(). */
-# define DIRFD(dirp) ((dirp)->dd_fd)
-# define HAVE_DIRFD
-#else
-# define DIRFD(dirp) (dirfd(dirp))
+#  define DIRFD(dirp) ((dirp)->dd_fd)
+#  define HAVE_DIRFD
+# else
+#  define DIRFD(dirp) (dirfd(dirp))
+# endif
 #endif
 
 #define LINUX_SOLARIS_FD_DIR "/proc/self/fd"
@@ -204,7 +209,7 @@
  * exclusive. Do not close any in the sorted py_fds_to_keep list.
  *
  * This function violates the strict use of async signal safe functions. :(
- * It calls opendir(), readdir64() and closedir().  Of these, the one most
+ * It calls opendir(), readdir() and closedir().  Of these, the one most
  * likely to ever cause a problem is opendir() as it performs an internal
  * malloc().  Practically this should not be a problem.  The Java VM makes the
  * same calls between fork and exec in its own UNIXProcess_md.c implementation.
@@ -241,15 +246,14 @@
         /* No way to get a list of open fds. */
         _close_fds_by_brute_force(start_fd, end_fd, py_fds_to_keep);
     } else {
-        struct dirent64 *dir_entry;
+        struct dirent *dir_entry;
 #ifdef HAVE_DIRFD
         int fd_used_by_opendir = DIRFD(proc_fd_dir);
 #else
         int fd_used_by_opendir = start_fd - 1;
 #endif
         errno = 0;
-        /* readdir64 is used to work around Solaris 9 bug 6395699. */
-        while ((dir_entry = readdir64(proc_fd_dir))) {
+        while ((dir_entry = readdir(proc_fd_dir))) {
             int fd;
             if ((fd = _pos_int_from_ascii(dir_entry->d_name)) < 0)
                 continue;  /* Not a number. */

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list