[Python-checkins] cpython (merge default -> default): merge

raymond.hettinger python-checkins at python.org
Mon Jun 24 00:47:43 CEST 2013


http://hg.python.org/cpython/rev/7aab60b70f90
changeset:   84304:7aab60b70f90
parent:      84303:cb70776241bb
parent:      84302:75bc0ae02bcd
user:        Raymond Hettinger <python at rcn.com>
date:        Sun Jun 23 15:47:03 2013 -0700
summary:
  merge

files:
  Include/pyport.h      |  15 ++++++------
  Modules/_io/fileio.c  |   2 +-
  Modules/_stat.c       |  36 ++++--------------------------
  Modules/posixmodule.c |   4 +-
  4 files changed, 16 insertions(+), 41 deletions(-)


diff --git a/Include/pyport.h b/Include/pyport.h
--- a/Include/pyport.h
+++ b/Include/pyport.h
@@ -393,9 +393,15 @@
 #include <stat.h>
 #endif
 
-#if defined(PYCC_VACPP)
+#ifndef S_IFMT
 /* VisualAge C/C++ Failed to Define MountType Field in sys/stat.h */
-#define S_IFMT (S_IFDIR|S_IFCHR|S_IFREG)
+#define S_IFMT 0170000
+#endif
+
+#ifndef S_IFLNK
+/* Windows doesn't define S_IFLNK but posixmodule.c maps
+ * IO_REPARSE_TAG_SYMLINK to S_IFLNK */
+#  define S_IFLNK 0120000
 #endif
 
 #ifndef S_ISREG
@@ -410,11 +416,6 @@
 #define S_ISCHR(x) (((x) & S_IFMT) == S_IFCHR)
 #endif
 
-#ifndef S_ISBLK
-#define S_ISBLK(x) (((x) & S_IFMT) == S_IFBLK)
-#endif
-
-
 #ifdef __cplusplus
 /* Move this down here since some C++ #include's don't like to be included
    inside an extern "C" */
diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c
--- a/Modules/_io/fileio.c
+++ b/Modules/_io/fileio.c
@@ -171,7 +171,7 @@
 static int
 dircheck(fileio* self, PyObject *nameobj)
 {
-#if defined(HAVE_FSTAT) && defined(S_IFDIR) && defined(EISDIR)
+#if defined(HAVE_FSTAT) && defined(S_ISDIR) && defined(EISDIR)
     struct stat buf;
     if (self->fd < 0)
         return 0;
diff --git a/Modules/_stat.c b/Modules/_stat.c
--- a/Modules/_stat.c
+++ b/Modules/_stat.c
@@ -39,35 +39,18 @@
  *
  * Only the names are defined by POSIX but not their value. All common file
  * types seems to have the same numeric value on all platforms, though.
+ *
+ * pyport.h guarantees S_IFMT, S_IFDIR, S_IFCHR, S_IFREG and S_IFLNK
  */
-#ifndef S_IFMT
-#  define S_IFMT 0170000
-#endif
-
-#ifndef S_IFDIR
-#  define S_IFDIR 0040000
-#endif
-
-#ifndef S_IFCHR
-#  define S_IFCHR 0020000
-#endif
 
 #ifndef S_IFBLK
 #  define S_IFBLK 0060000
 #endif
 
-#ifndef S_IFREG
-#  define S_IFREG 0100000
-#endif
-
 #ifndef S_IFIFO
 #  define S_IFIFO 0010000
 #endif
 
-#ifndef S_IFLNK
-#  define S_IFLNK 0120000
-#endif
-
 #ifndef S_IFSOCK
 #  define S_IFSOCK 0140000
 #endif
@@ -85,23 +68,14 @@
 #endif
 
 
-/* S_ISXXX() */
-#ifndef S_ISDIR
-#  define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
-#endif
-
-#ifndef S_ISCHR
-#  define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR)
-#endif
+/* S_ISXXX()
+ * pyport.h defines S_ISDIR(), S_ISREG() and S_ISCHR()
+ */
 
 #ifndef S_ISBLK
 #  define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK)
 #endif
 
-#ifndef S_ISREG
-#  define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
-#endif
-
 #ifndef S_ISFIFO
 #  define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)
 #endif
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -1405,9 +1405,9 @@
     result->st_ino = (((__int64)info->nFileIndexHigh)<<32) + info->nFileIndexLow;
     if (reparse_tag == IO_REPARSE_TAG_SYMLINK) {
         /* first clear the S_IFMT bits */
-        result->st_mode ^= (result->st_mode & 0170000);
+        result->st_mode ^= (result->st_mode & S_IFMT);
         /* now set the bits that make this a symlink */
-        result->st_mode |= 0120000;
+        result->st_mode |= S_IFLNK;
     }
 
     return 0;

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


More information about the Python-checkins mailing list