summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2013-06-23 22:47:03 (GMT)
committerRaymond Hettinger <python@rcn.com>2013-06-23 22:47:03 (GMT)
commitb4f39eea497fc5374835efb70261a3dc9211e810 (patch)
tree95c32e23b00e8c1d87f730d8a557040b50c1edd0
parent20b0f87e1d031390f5b65e28b0026c42f53abe5d (diff)
parent5b2f18411b49b27ce2f36e567b0096f6e50de562 (diff)
downloadcpython-b4f39eea497fc5374835efb70261a3dc9211e810.zip
cpython-b4f39eea497fc5374835efb70261a3dc9211e810.tar.gz
cpython-b4f39eea497fc5374835efb70261a3dc9211e810.tar.bz2
merge
-rw-r--r--Include/pyport.h15
-rw-r--r--Modules/_io/fileio.c2
-rw-r--r--Modules/_stat.c36
-rw-r--r--Modules/posixmodule.c4
4 files changed, 16 insertions, 41 deletions
diff --git a/Include/pyport.h b/Include/pyport.h
index 4b9c238..f16cce9 100644
--- a/Include/pyport.h
+++ b/Include/pyport.h
@@ -393,9 +393,15 @@ typedef size_t Py_uhash_t;
#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 @@ typedef size_t Py_uhash_t;
#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
index ff7d14d..34a5801 100644
--- a/Modules/_io/fileio.c
+++ b/Modules/_io/fileio.c
@@ -171,7 +171,7 @@ fileio_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
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
index eafd726..a301fa8 100644
--- a/Modules/_stat.c
+++ b/Modules/_stat.c
@@ -39,35 +39,18 @@ typedef unsigned short mode_t;
*
* 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 @@ typedef unsigned short mode_t;
#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
index 738bf0a..baad299 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -1405,9 +1405,9 @@ attribute_data_to_stat(BY_HANDLE_FILE_INFORMATION *info, ULONG reparse_tag, stru
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;