Define S_IFMT and S_IFLNK in pyport.h so posixmodule.c can use named constants instead
of arbitrary looking numbers.
This commit is contained in:
parent
9975877f46
commit
99d6135a15
|
@ -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" */
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue