diff options
author | Raymond Hettinger <python@rcn.com> | 2013-06-23 22:47:03 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2013-06-23 22:47:03 (GMT) |
commit | b4f39eea497fc5374835efb70261a3dc9211e810 (patch) | |
tree | 95c32e23b00e8c1d87f730d8a557040b50c1edd0 | |
parent | 20b0f87e1d031390f5b65e28b0026c42f53abe5d (diff) | |
parent | 5b2f18411b49b27ce2f36e567b0096f6e50de562 (diff) | |
download | cpython-b4f39eea497fc5374835efb70261a3dc9211e810.zip cpython-b4f39eea497fc5374835efb70261a3dc9211e810.tar.gz cpython-b4f39eea497fc5374835efb70261a3dc9211e810.tar.bz2 |
merge
-rw-r--r-- | Include/pyport.h | 15 | ||||
-rw-r--r-- | Modules/_io/fileio.c | 2 | ||||
-rw-r--r-- | Modules/_stat.c | 36 | ||||
-rw-r--r-- | Modules/posixmodule.c | 4 |
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; |