summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Modules/posixmodule.c338
1 files changed, 166 insertions, 172 deletions
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 89f9757..4085b92 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -1,4 +1,3 @@
-
/* POSIX module implementation */
/* This file is also used for Windows NT/MS-Win. In that case the
@@ -8,8 +7,6 @@
of the compiler used. Different compilers define their own feature
test macro, e.g. '_MSC_VER'. */
-
-
#ifdef __APPLE__
/*
* Step 1 of support for weak-linking a number of symbols existing on
@@ -48,7 +45,7 @@
/* On android API level 21, 'AT_EACCESS' is not declared although
* HAVE_FACCESSAT is defined. */
#ifdef __ANDROID__
-#undef HAVE_FACCESSAT
+# undef HAVE_FACCESSAT
#endif
#include <stdio.h> /* needed for ctermid() */
@@ -65,89 +62,89 @@ corresponding Unix manual entries for more information on calls.");
#ifdef HAVE_SYS_UIO_H
-#include <sys/uio.h>
+# include <sys/uio.h>
#endif
#ifdef HAVE_SYS_SYSMACROS_H
/* GNU C Library: major(), minor(), makedev() */
-#include <sys/sysmacros.h>
+# include <sys/sysmacros.h>
#endif
#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
+# include <sys/types.h>
#endif /* HAVE_SYS_TYPES_H */
#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
+# include <sys/stat.h>
#endif /* HAVE_SYS_STAT_H */
#ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h> /* For WNOHANG */
+# include <sys/wait.h> // WNOHANG
#endif
#ifdef HAVE_LINUX_WAIT_H
-#include <linux/wait.h> // For P_PIDFD
+# include <linux/wait.h> // P_PIDFD
#endif
#ifdef HAVE_SIGNAL_H
-#include <signal.h>
+# include <signal.h>
#endif
#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif /* HAVE_FCNTL_H */
+# include <fcntl.h>
+#endif
#ifdef HAVE_GRP_H
-#include <grp.h>
+# include <grp.h>
#endif
#ifdef HAVE_SYSEXITS_H
-#include <sysexits.h>
-#endif /* HAVE_SYSEXITS_H */
+# include <sysexits.h>
+#endif
#ifdef HAVE_SYS_LOADAVG_H
-#include <sys/loadavg.h>
+# include <sys/loadavg.h>
#endif
#ifdef HAVE_SYS_SENDFILE_H
-#include <sys/sendfile.h>
+# include <sys/sendfile.h>
#endif
#if defined(__APPLE__)
-#include <copyfile.h>
+# include <copyfile.h>
#endif
#ifdef HAVE_SCHED_H
-#include <sched.h>
+# include <sched.h>
#endif
#ifdef HAVE_COPY_FILE_RANGE
-#include <unistd.h>
+# include <unistd.h>
#endif
#if !defined(CPU_ALLOC) && defined(HAVE_SCHED_SETAFFINITY)
-#undef HAVE_SCHED_SETAFFINITY
+# undef HAVE_SCHED_SETAFFINITY
#endif
#if defined(HAVE_SYS_XATTR_H) && defined(__GLIBC__) && !defined(__FreeBSD_kernel__) && !defined(__GNU__)
-#define USE_XATTRS
+# define USE_XATTRS
#endif
#ifdef USE_XATTRS
-#include <sys/xattr.h>
+# include <sys/xattr.h>
#endif
#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__APPLE__)
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
+# ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+# endif
#endif
#ifdef HAVE_DLFCN_H
-#include <dlfcn.h>
+# include <dlfcn.h>
#endif
#ifdef __hpux
-#include <sys/mpctl.h>
+# include <sys/mpctl.h>
#endif
#if defined(__DragonFly__) || \
@@ -155,7 +152,7 @@ corresponding Unix manual entries for more information on calls.");
defined(__FreeBSD__) || \
defined(__NetBSD__) || \
defined(__APPLE__)
-#include <sys/sysctl.h>
+# include <sys/sysctl.h>
#endif
#ifdef HAVE_LINUX_RANDOM_H
@@ -180,43 +177,44 @@ corresponding Unix manual entries for more information on calls.");
/* Various compilers have only certain posix functions */
/* XXX Gosh I wish these were all moved into pyconfig.h */
#if defined(__WATCOMC__) && !defined(__QNX__) /* Watcom compiler */
-#define HAVE_OPENDIR 1
-#define HAVE_SYSTEM 1
-#include <process.h>
-#else
-#ifdef _MSC_VER /* Microsoft compiler */
-#define HAVE_GETPPID 1
-#define HAVE_GETLOGIN 1
-#define HAVE_SPAWNV 1
-#define HAVE_EXECV 1
-#define HAVE_WSPAWNV 1
-#define HAVE_WEXECV 1
-#define HAVE_PIPE 1
-#define HAVE_SYSTEM 1
-#define HAVE_CWAIT 1
-#define HAVE_FSYNC 1
-#define fsync _commit
-#else
-/* Unix functions that the configure script doesn't check for */
-#ifndef __VXWORKS__
-#define HAVE_EXECV 1
-#define HAVE_FORK 1
-#if defined(__USLC__) && defined(__SCO_VERSION__) /* SCO UDK Compiler */
-#define HAVE_FORK1 1
-#endif
-#endif
-#define HAVE_GETEGID 1
-#define HAVE_GETEUID 1
-#define HAVE_GETGID 1
-#define HAVE_GETPPID 1
-#define HAVE_GETUID 1
-#define HAVE_KILL 1
-#define HAVE_OPENDIR 1
-#define HAVE_PIPE 1
-#define HAVE_SYSTEM 1
-#define HAVE_WAIT 1
-#define HAVE_TTYNAME 1
-#endif /* _MSC_VER */
+# define HAVE_OPENDIR 1
+# define HAVE_SYSTEM 1
+# include <process.h>
+#else
+# ifdef _MSC_VER
+ /* Microsoft compiler */
+# define HAVE_GETPPID 1
+# define HAVE_GETLOGIN 1
+# define HAVE_SPAWNV 1
+# define HAVE_EXECV 1
+# define HAVE_WSPAWNV 1
+# define HAVE_WEXECV 1
+# define HAVE_PIPE 1
+# define HAVE_SYSTEM 1
+# define HAVE_CWAIT 1
+# define HAVE_FSYNC 1
+# define fsync _commit
+# else
+ /* Unix functions that the configure script doesn't check for */
+# ifndef __VXWORKS__
+# define HAVE_EXECV 1
+# define HAVE_FORK 1
+# if defined(__USLC__) && defined(__SCO_VERSION__) /* SCO UDK Compiler */
+# define HAVE_FORK1 1
+# endif
+# endif
+# define HAVE_GETEGID 1
+# define HAVE_GETEUID 1
+# define HAVE_GETGID 1
+# define HAVE_GETPPID 1
+# define HAVE_GETUID 1
+# define HAVE_KILL 1
+# define HAVE_OPENDIR 1
+# define HAVE_PIPE 1
+# define HAVE_SYSTEM 1
+# define HAVE_WAIT 1
+# define HAVE_TTYNAME 1
+# endif /* _MSC_VER */
#endif /* ! __WATCOMC__ || __QNX__ */
_Py_IDENTIFIER(__fspath__);
@@ -238,123 +236,119 @@ extern char *ctermid_r(char *);
#endif /* !_MSC_VER */
#if defined(__VXWORKS__)
-#include <vxCpuLib.h>
-#include <rtpLib.h>
-#include <wait.h>
-#include <taskLib.h>
-#ifndef _P_WAIT
-#define _P_WAIT 0
-#define _P_NOWAIT 1
-#define _P_NOWAITO 1
-#endif
+# include <vxCpuLib.h>
+# include <rtpLib.h>
+# include <wait.h>
+# include <taskLib.h>
+# ifndef _P_WAIT
+# define _P_WAIT 0
+# define _P_NOWAIT 1
+# define _P_NOWAITO 1
+# endif
#endif /* __VXWORKS__ */
#ifdef HAVE_POSIX_SPAWN
-#include <spawn.h>
+# include <spawn.h>
#endif
#ifdef HAVE_UTIME_H
-#include <utime.h>
+# include <utime.h>
#endif /* HAVE_UTIME_H */
#ifdef HAVE_SYS_UTIME_H
-#include <sys/utime.h>
-#define HAVE_UTIME_H /* pretend we do for the rest of this file */
+# include <sys/utime.h>
+# define HAVE_UTIME_H /* pretend we do for the rest of this file */
#endif /* HAVE_SYS_UTIME_H */
#ifdef HAVE_SYS_TIMES_H
-#include <sys/times.h>
+# include <sys/times.h>
#endif /* HAVE_SYS_TIMES_H */
#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
+# include <sys/param.h>
#endif /* HAVE_SYS_PARAM_H */
#ifdef HAVE_SYS_UTSNAME_H
-#include <sys/utsname.h>
+# include <sys/utsname.h>
#endif /* HAVE_SYS_UTSNAME_H */
#ifdef HAVE_DIRENT_H
-#include <dirent.h>
-#define NAMLEN(dirent) strlen((dirent)->d_name)
+# include <dirent.h>
+# define NAMLEN(dirent) strlen((dirent)->d_name)
#else
-#if defined(__WATCOMC__) && !defined(__QNX__)
-#include <direct.h>
-#define NAMLEN(dirent) strlen((dirent)->d_name)
-#else
-#define dirent direct
-#define NAMLEN(dirent) (dirent)->d_namlen
-#endif
-#ifdef HAVE_SYS_NDIR_H
-#include <sys/ndir.h>
-#endif
-#ifdef HAVE_SYS_DIR_H
-#include <sys/dir.h>
-#endif
-#ifdef HAVE_NDIR_H
-#include <ndir.h>
-#endif
+# if defined(__WATCOMC__) && !defined(__QNX__)
+# include <direct.h>
+# define NAMLEN(dirent) strlen((dirent)->d_name)
+# else
+# define dirent direct
+# define NAMLEN(dirent) (dirent)->d_namlen
+# endif
+# ifdef HAVE_SYS_NDIR_H
+# include <sys/ndir.h>
+# endif
+# ifdef HAVE_SYS_DIR_H
+# include <sys/dir.h>
+# endif
+# ifdef HAVE_NDIR_H
+# include <ndir.h>
+# endif
#endif
#ifdef _MSC_VER
-#ifdef HAVE_DIRECT_H
-#include <direct.h>
-#endif
-#ifdef HAVE_IO_H
-#include <io.h>
-#endif
-#ifdef HAVE_PROCESS_H
-#include <process.h>
-#endif
-#ifndef IO_REPARSE_TAG_SYMLINK
-#define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
-#endif
-#ifndef IO_REPARSE_TAG_MOUNT_POINT
-#define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
-#endif
-#include "osdefs.h" // SEP
-#include <malloc.h>
-#include <windows.h>
-#include <shellapi.h> // ShellExecute()
-#include <lmcons.h> // UNLEN
-#define HAVE_SYMLINK
+# ifdef HAVE_DIRECT_H
+# include <direct.h>
+# endif
+# ifdef HAVE_IO_H
+# include <io.h>
+# endif
+# ifdef HAVE_PROCESS_H
+# include <process.h>
+# endif
+# ifndef IO_REPARSE_TAG_SYMLINK
+# define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
+# endif
+# ifndef IO_REPARSE_TAG_MOUNT_POINT
+# define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
+# endif
+# include "osdefs.h" // SEP
+# include <malloc.h>
+# include <windows.h>
+# include <shellapi.h> // ShellExecute()
+# include <lmcons.h> // UNLEN
+# define HAVE_SYMLINK
#endif /* _MSC_VER */
#ifndef MAXPATHLEN
-#if defined(PATH_MAX) && PATH_MAX > 1024
-#define MAXPATHLEN PATH_MAX
-#else
-#define MAXPATHLEN 1024
-#endif
+# if defined(PATH_MAX) && PATH_MAX > 1024
+# define MAXPATHLEN PATH_MAX
+# else
+# define MAXPATHLEN 1024
+# endif
#endif /* MAXPATHLEN */
#ifdef UNION_WAIT
-/* Emulate some macros on systems that have a union instead of macros */
-
-#ifndef WIFEXITED
-#define WIFEXITED(u_wait) (!(u_wait).w_termsig && !(u_wait).w_coredump)
-#endif
-
-#ifndef WEXITSTATUS
-#define WEXITSTATUS(u_wait) (WIFEXITED(u_wait)?((u_wait).w_retcode):-1)
-#endif
-
-#ifndef WTERMSIG
-#define WTERMSIG(u_wait) ((u_wait).w_termsig)
-#endif
-
-#define WAIT_TYPE union wait
-#define WAIT_STATUS_INT(s) (s.w_status)
-
-#else /* !UNION_WAIT */
-#define WAIT_TYPE int
-#define WAIT_STATUS_INT(s) (s)
+ /* Emulate some macros on systems that have a union instead of macros */
+# ifndef WIFEXITED
+# define WIFEXITED(u_wait) (!(u_wait).w_termsig && !(u_wait).w_coredump)
+# endif
+# ifndef WEXITSTATUS
+# define WEXITSTATUS(u_wait) (WIFEXITED(u_wait)?((u_wait).w_retcode):-1)
+# endif
+# ifndef WTERMSIG
+# define WTERMSIG(u_wait) ((u_wait).w_termsig)
+# endif
+# define WAIT_TYPE union wait
+# define WAIT_STATUS_INT(s) (s.w_status)
+#else
+ /* !UNION_WAIT */
+# define WAIT_TYPE int
+# define WAIT_STATUS_INT(s) (s)
#endif /* UNION_WAIT */
/* Don't use the "_r" form if we don't need it (also, won't have a
prototype for it, at least on Solaris -- maybe others as well?). */
#if defined(HAVE_CTERMID_R)
-#define USE_CTERMID_R
+# define USE_CTERMID_R
#endif
/* choose the appropriate stat and fstat functions and return structs */
@@ -362,56 +356,56 @@ extern char *ctermid_r(char *);
#undef FSTAT
#undef STRUCT_STAT
#ifdef MS_WINDOWS
-# define STAT win32_stat
-# define LSTAT win32_lstat
-# define FSTAT _Py_fstat_noraise
-# define STRUCT_STAT struct _Py_stat_struct
+# define STAT win32_stat
+# define LSTAT win32_lstat
+# define FSTAT _Py_fstat_noraise
+# define STRUCT_STAT struct _Py_stat_struct
#else
-# define STAT stat
-# define LSTAT lstat
-# define FSTAT fstat
-# define STRUCT_STAT struct stat
+# define STAT stat
+# define LSTAT lstat
+# define FSTAT fstat
+# define STRUCT_STAT struct stat
#endif
#if defined(MAJOR_IN_MKDEV)
-#include <sys/mkdev.h>
+# include <sys/mkdev.h>
#else
-#if defined(MAJOR_IN_SYSMACROS)
-#include <sys/sysmacros.h>
-#endif
-#if defined(HAVE_MKNOD) && defined(HAVE_SYS_MKDEV_H)
-#include <sys/mkdev.h>
-#endif
+# if defined(MAJOR_IN_SYSMACROS)
+# include <sys/sysmacros.h>
+# endif
+# if defined(HAVE_MKNOD) && defined(HAVE_SYS_MKDEV_H)
+# include <sys/mkdev.h>
+# endif
#endif
#ifdef MS_WINDOWS
-#define INITFUNC PyInit_nt
-#define MODNAME "nt"
+# define INITFUNC PyInit_nt
+# define MODNAME "nt"
#else
-#define INITFUNC PyInit_posix
-#define MODNAME "posix"
+# define INITFUNC PyInit_posix
+# define MODNAME "posix"
#endif
#if defined(__sun)
/* Something to implement in autoconf, not present in autoconf 2.69 */
-#define HAVE_STRUCT_STAT_ST_FSTYPE 1
+# define HAVE_STRUCT_STAT_ST_FSTYPE 1
#endif
/* memfd_create is either defined in sys/mman.h or sys/memfd.h
* linux/memfd.h defines additional flags
*/
#ifdef HAVE_SYS_MMAN_H
-#include <sys/mman.h>
+# include <sys/mman.h>
#endif
#ifdef HAVE_SYS_MEMFD_H
-#include <sys/memfd.h>
+# include <sys/memfd.h>
#endif
#ifdef HAVE_LINUX_MEMFD_H
-#include <linux/memfd.h>
+# include <linux/memfd.h>
#endif
#ifdef _Py_MEMORY_SANITIZER
-# include <sanitizer/msan_interface.h>
+# include <sanitizer/msan_interface.h>
#endif
#ifdef HAVE_FORK