merge
This commit is contained in:
commit
b4f39eea49
|
@ -393,9 +393,15 @@ typedef size_t Py_uhash_t;
|
||||||
#include <stat.h>
|
#include <stat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PYCC_VACPP)
|
#ifndef S_IFMT
|
||||||
/* VisualAge C/C++ Failed to Define MountType Field in sys/stat.h */
|
/* 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
|
#endif
|
||||||
|
|
||||||
#ifndef S_ISREG
|
#ifndef S_ISREG
|
||||||
|
@ -410,11 +416,6 @@ typedef size_t Py_uhash_t;
|
||||||
#define S_ISCHR(x) (((x) & S_IFMT) == S_IFCHR)
|
#define S_ISCHR(x) (((x) & S_IFMT) == S_IFCHR)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef S_ISBLK
|
|
||||||
#define S_ISBLK(x) (((x) & S_IFMT) == S_IFBLK)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
/* Move this down here since some C++ #include's don't like to be included
|
/* Move this down here since some C++ #include's don't like to be included
|
||||||
inside an extern "C" */
|
inside an extern "C" */
|
||||||
|
|
|
@ -171,7 +171,7 @@ fileio_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
static int
|
static int
|
||||||
dircheck(fileio* self, PyObject *nameobj)
|
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;
|
struct stat buf;
|
||||||
if (self->fd < 0)
|
if (self->fd < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -39,35 +39,18 @@ typedef unsigned short mode_t;
|
||||||
*
|
*
|
||||||
* Only the names are defined by POSIX but not their value. All common file
|
* 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.
|
* 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
|
#ifndef S_IFBLK
|
||||||
# define S_IFBLK 0060000
|
# define S_IFBLK 0060000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef S_IFREG
|
|
||||||
# define S_IFREG 0100000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef S_IFIFO
|
#ifndef S_IFIFO
|
||||||
# define S_IFIFO 0010000
|
# define S_IFIFO 0010000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef S_IFLNK
|
|
||||||
# define S_IFLNK 0120000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef S_IFSOCK
|
#ifndef S_IFSOCK
|
||||||
# define S_IFSOCK 0140000
|
# define S_IFSOCK 0140000
|
||||||
#endif
|
#endif
|
||||||
|
@ -85,23 +68,14 @@ typedef unsigned short mode_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* S_ISXXX() */
|
/* S_ISXXX()
|
||||||
#ifndef S_ISDIR
|
* pyport.h defines S_ISDIR(), S_ISREG() and S_ISCHR()
|
||||||
# define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
|
*/
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef S_ISCHR
|
|
||||||
# define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef S_ISBLK
|
#ifndef S_ISBLK
|
||||||
# define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK)
|
# define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef S_ISREG
|
|
||||||
# define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef S_ISFIFO
|
#ifndef S_ISFIFO
|
||||||
# define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)
|
# define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -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;
|
result->st_ino = (((__int64)info->nFileIndexHigh)<<32) + info->nFileIndexLow;
|
||||||
if (reparse_tag == IO_REPARSE_TAG_SYMLINK) {
|
if (reparse_tag == IO_REPARSE_TAG_SYMLINK) {
|
||||||
/* first clear the S_IFMT bits */
|
/* 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 */
|
/* now set the bits that make this a symlink */
|
||||||
result->st_mode |= 0120000;
|
result->st_mode |= S_IFLNK;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue