]> granicus.if.org Git - python/commitdiff
Expose more MS WIndows constants usable w/ low-level os.open().
authorTim Peters <tim.peters@gmail.com>
Wed, 30 Jan 2002 05:46:57 +0000 (05:46 +0000)
committerTim Peters <tim.peters@gmail.com>
Wed, 30 Jan 2002 05:46:57 +0000 (05:46 +0000)
Modules/posixmodule.c

index 31b0dde98a670af0c28379b24910d0d875c27aef..77b0d66c09b963f1486c7078ae479d47d3e4f7b2 100644 (file)
@@ -363,7 +363,7 @@ win32_error(char* function, char* filename)
 {
        /* XXX We should pass the function name along in the future.
           (_winreg.c also wants to pass the function name.)
-          This would however require an additional param to the 
+          This would however require an additional param to the
           Windows error object, which is non-trivial.
        */
        errno = GetLastError();
@@ -474,7 +474,7 @@ posix_1str(PyObject *args, char *format, int (*func)(const char*))
 {
        char *path1 = NULL;
        int res;
-       if (!PyArg_ParseTuple(args, format, 
+       if (!PyArg_ParseTuple(args, format,
                              Py_FileSystemDefaultEncoding, &path1))
                return NULL;
        Py_BEGIN_ALLOW_THREADS
@@ -494,7 +494,7 @@ posix_2str(PyObject *args, char *format,
        char *path1 = NULL, *path2 = NULL;
        int res;
        if (!PyArg_ParseTuple(args, format,
-                             Py_FileSystemDefaultEncoding, &path1, 
+                             Py_FileSystemDefaultEncoding, &path1,
                              Py_FileSystemDefaultEncoding, &path2))
                return NULL;
        Py_BEGIN_ALLOW_THREADS
@@ -509,7 +509,7 @@ posix_2str(PyObject *args, char *format,
        return Py_None;
 }
 
-static char stat_result__doc__[] = 
+static char stat_result__doc__[] =
 "stat_result: Result from stat or lstat.\n\n\
 This object may be accessed either as a tuple of\n\
   (mode,ino,dev,nlink,uid,gid,size,atime,mtime,ctime)\n\
@@ -568,7 +568,7 @@ static PyStructSequence_Desc stat_result_desc = {
        10
 };
 
-static char statvfs_result__doc__[] = 
+static char statvfs_result__doc__[] =
 "statvfs_result: Result from statvfs or fstatvfs.\n\n\
 This object may be accessed either as a tuple of\n\
   (bsize,frsize,blocks,bfree,bavail,files,ffree,favail,flag,namemax),\n\
@@ -600,7 +600,7 @@ static PyStructSequence_Desc statvfs_result_desc = {
 static PyTypeObject StatResultType;
 static PyTypeObject StatVFSResultType;
 
-/* pack a system stat C structure into the Python stat tuple 
+/* pack a system stat C structure into the Python stat tuple
    (used by posix_stat() and posix_fstat()) */
 static PyObject*
 _pystat_fromstructstat(STRUCT_STAT st)
@@ -611,13 +611,13 @@ _pystat_fromstructstat(STRUCT_STAT st)
 
         PyStructSequence_SET_ITEM(v, 0, PyInt_FromLong((long)st.st_mode));
 #ifdef HAVE_LARGEFILE_SUPPORT
-        PyStructSequence_SET_ITEM(v, 1, 
+        PyStructSequence_SET_ITEM(v, 1,
                                  PyLong_FromLongLong((LONG_LONG)st.st_ino));
 #else
         PyStructSequence_SET_ITEM(v, 1, PyInt_FromLong((long)st.st_ino));
 #endif
 #if defined(HAVE_LONG_LONG) && !defined(MS_WINDOWS)
-        PyStructSequence_SET_ITEM(v, 2, 
+        PyStructSequence_SET_ITEM(v, 2,
                                  PyLong_FromLongLong((LONG_LONG)st.st_dev));
 #else
         PyStructSequence_SET_ITEM(v, 2, PyInt_FromLong((long)st.st_dev));
@@ -626,17 +626,17 @@ _pystat_fromstructstat(STRUCT_STAT st)
         PyStructSequence_SET_ITEM(v, 4, PyInt_FromLong((long)st.st_uid));
         PyStructSequence_SET_ITEM(v, 5, PyInt_FromLong((long)st.st_gid));
 #ifdef HAVE_LARGEFILE_SUPPORT
-        PyStructSequence_SET_ITEM(v, 6, 
+        PyStructSequence_SET_ITEM(v, 6,
                                  PyLong_FromLongLong((LONG_LONG)st.st_size));
 #else
         PyStructSequence_SET_ITEM(v, 6, PyInt_FromLong(st.st_size));
 #endif
 #if SIZEOF_TIME_T > SIZEOF_LONG
-        PyStructSequence_SET_ITEM(v, 7, 
+        PyStructSequence_SET_ITEM(v, 7,
                                  PyLong_FromLongLong((LONG_LONG)st.st_atime));
-        PyStructSequence_SET_ITEM(v, 8, 
+        PyStructSequence_SET_ITEM(v, 8,
                                  PyLong_FromLongLong((LONG_LONG)st.st_mtime));
-        PyStructSequence_SET_ITEM(v, 9, 
+        PyStructSequence_SET_ITEM(v, 9,
                                  PyLong_FromLongLong((LONG_LONG)st.st_ctime));
 #else
        PyStructSequence_SET_ITEM(v, 7, PyInt_FromLong((long)st.st_atime));
@@ -645,11 +645,11 @@ _pystat_fromstructstat(STRUCT_STAT st)
 #endif
 
 #ifdef HAVE_ST_BLKSIZE
-       PyStructSequence_SET_ITEM(v, ST_BLKSIZE_IDX, 
+       PyStructSequence_SET_ITEM(v, ST_BLKSIZE_IDX,
                         PyInt_FromLong((long)st.st_blksize));
 #endif
 #ifdef HAVE_ST_BLOCKS
-       PyStructSequence_SET_ITEM(v, ST_BLOCKS_IDX, 
+       PyStructSequence_SET_ITEM(v, ST_BLOCKS_IDX,
                         PyInt_FromLong((long)st.st_blocks));
 #endif
 #ifdef HAVE_ST_RDEV
@@ -679,7 +679,7 @@ posix_do_stat(PyObject *self, PyObject *args, char *format,
        char pathcopy[MAX_PATH];
 #endif /* MS_WIN32 */
 
-       if (!PyArg_ParseTuple(args, format, 
+       if (!PyArg_ParseTuple(args, format,
                              Py_FileSystemDefaultEncoding, &path))
                return NULL;
        pathfree = path;
@@ -823,7 +823,7 @@ posix_chmod(PyObject *self, PyObject *args)
        char *path = NULL;
        int i;
        int res;
-       if (!PyArg_ParseTuple(args, "eti", Py_FileSystemDefaultEncoding, 
+       if (!PyArg_ParseTuple(args, "eti", Py_FileSystemDefaultEncoding,
                              &path, &i))
                return NULL;
        Py_BEGIN_ALLOW_THREADS
@@ -838,7 +838,7 @@ posix_chmod(PyObject *self, PyObject *args)
 
 
 #ifdef HAVE_CHROOT
-static char posix_chroot__doc__[] = 
+static char posix_chroot__doc__[] =
 "chroot(path) -> None\n\
 Change root directory to path.";
 
@@ -891,8 +891,8 @@ posix_chown(PyObject *self, PyObject *args)
        char *path = NULL;
        int uid, gid;
        int res;
-       if (!PyArg_ParseTuple(args, "etii:chown", 
-                             Py_FileSystemDefaultEncoding, &path, 
+       if (!PyArg_ParseTuple(args, "etii:chown",
+                             Py_FileSystemDefaultEncoding, &path,
                              &uid, &gid))
                return NULL;
        Py_BEGIN_ALLOW_THREADS
@@ -967,7 +967,7 @@ posix_listdir(PyObject *self, PyObject *args)
        int len = sizeof(namebuf)/sizeof(namebuf[0]);
        char ch;
 
-       if (!PyArg_ParseTuple(args, "et#:listdir", 
+       if (!PyArg_ParseTuple(args, "et#:listdir",
                              Py_FileSystemDefaultEncoding, &bufptr, &len))
                return NULL;
        ch = namebuf[len-1];
@@ -1195,8 +1195,8 @@ posix__getfullpathname(PyObject *self, PyObject *args)
        int insize = sizeof(inbuf)/sizeof(inbuf[0]);
        char outbuf[MAX_PATH*2];
        char *temp;
-       if (!PyArg_ParseTuple (args, "et#:_getfullpathname", 
-                              Py_FileSystemDefaultEncoding, &inbufp, 
+       if (!PyArg_ParseTuple (args, "et#:_getfullpathname",
+                              Py_FileSystemDefaultEncoding, &inbufp,
                               &insize))
                return NULL;
        if (!GetFullPathName(inbuf, sizeof(outbuf)/sizeof(outbuf[0]),
@@ -1216,7 +1216,7 @@ posix_mkdir(PyObject *self, PyObject *args)
        int res;
        char *path = NULL;
        int mode = 0777;
-       if (!PyArg_ParseTuple(args, "et|i:mkdir", 
+       if (!PyArg_ParseTuple(args, "et|i:mkdir",
                              Py_FileSystemDefaultEncoding, &path, &mode))
                return NULL;
        Py_BEGIN_ALLOW_THREADS
@@ -1257,7 +1257,7 @@ posix_nice(PyObject *self, PyObject *args)
           priority (as required by almost all standards out there) and the
           Linux/FreeBSD/BSDI one, which returns '0' on success and advices
           the use of getpriority() to get the new priority.
-          
+
           If we are of the nice family that returns the new priority, we
           need to clear errno before the call, and check if errno is filled
           before calling posix_error() on a returnvalue of -1, because the
@@ -1509,10 +1509,10 @@ posix_execv(PyObject *self, PyObject *args)
        for (i = 0; i < argc; i++) {
                if (!PyArg_Parse((*getitem)(argv, i), "s", &argvlist[i])) {
                        PyMem_DEL(argvlist);
-                       PyErr_SetString(PyExc_TypeError, 
+                       PyErr_SetString(PyExc_TypeError,
                                        "execv() arg 2 must contain only strings");
                        return NULL;
-                       
+
                }
        }
        argvlist[argc] = NULL;
@@ -1573,7 +1573,7 @@ posix_execve(PyObject *self, PyObject *args)
        }
 
        if (argc == 0) {
-               PyErr_SetString(PyExc_ValueError, 
+               PyErr_SetString(PyExc_ValueError,
                                "execve() arg 2 must not be empty");
                return NULL;
        }
@@ -1604,7 +1604,7 @@ posix_execve(PyObject *self, PyObject *args)
        vals = PyMapping_Values(env);
        if (!keys || !vals)
                goto fail_2;
-       
+
        for (pos = 0; pos < i; pos++) {
                char *p, *k, *v;
                size_t len;
@@ -1613,7 +1613,7 @@ posix_execve(PyObject *self, PyObject *args)
                val = PyList_GetItem(vals, pos);
                if (!key || !val)
                        goto fail_2;
-               
+
                if (!PyArg_Parse(key, "s;execve() arg 3 contains a non-string key", &k) ||
                    !PyArg_Parse(val, "s;execve() arg 3 contains a non-string value", &v))
                {
@@ -1644,7 +1644,7 @@ posix_execve(PyObject *self, PyObject *args)
 #else /* BAD_EXEC_PROTOTYPES */
        execve(path, argvlist, envlist);
 #endif /* BAD_EXEC_PROTOTYPES */
-       
+
        /* If we get here it's definitely an error */
 
        (void) posix_error();
@@ -1705,7 +1705,7 @@ posix_spawnv(PyObject *self, PyObject *args)
        for (i = 0; i < argc; i++) {
                if (!PyArg_Parse((*getitem)(argv, i), "s", &argvlist[i])) {
                        PyMem_DEL(argvlist);
-                       PyErr_SetString(PyExc_TypeError, 
+                       PyErr_SetString(PyExc_TypeError,
                                        "spawnv() arg 2 must contain only strings");
                        return NULL;
                }
@@ -1714,11 +1714,11 @@ posix_spawnv(PyObject *self, PyObject *args)
 
        if (mode == _OLD_P_OVERLAY)
                mode = _P_OVERLAY;
-       
+
        Py_BEGIN_ALLOW_THREADS
        spawnval = _spawnv(mode, path, argvlist);
        Py_END_ALLOW_THREADS
-       
+
        PyMem_DEL(argvlist);
 
        if (spawnval == -1)
@@ -1802,7 +1802,7 @@ posix_spawnve(PyObject *self, PyObject *args)
        vals = PyMapping_Values(env);
        if (!keys || !vals)
                goto fail_2;
-       
+
        for (pos = 0; pos < i; pos++) {
                char *p, *k, *v;
                size_t len;
@@ -1811,7 +1811,7 @@ posix_spawnve(PyObject *self, PyObject *args)
                val = PyList_GetItem(vals, pos);
                if (!key || !val)
                        goto fail_2;
-               
+
                if (!PyArg_Parse(key, "s;spawnve() arg 3 contains a non-string key", &k) ||
                    !PyArg_Parse(val, "s;spawnve() arg 3 contains a non-string value", &v))
                {
@@ -1958,7 +1958,7 @@ static PyObject *
 posix_forkpty(PyObject *self, PyObject *args)
 {
        int master_fd, pid;
-       
+
        if (!PyArg_ParseTuple(args, ":forkpty"))
                return NULL;
        pid = forkpty(&master_fd, NULL, NULL, NULL);
@@ -2386,7 +2386,7 @@ posix_popen(PyObject *self, PyObject *args)
 {
        PyObject *f, *s;
        int tm = 0;
-  
+
        char *cmdstring;
        char *mode = "r";
        int bufsize = -1;
@@ -2394,7 +2394,7 @@ posix_popen(PyObject *self, PyObject *args)
                return NULL;
 
        s = PyTuple_New(0);
-         
+
        if (*mode == 'r')
                tm = _O_RDONLY;
        else if (*mode != 'w') {
@@ -2402,7 +2402,7 @@ posix_popen(PyObject *self, PyObject *args)
                return NULL;
        } else
                tm = _O_WRONLY;
-        
+
        if (bufsize != -1) {
                PyErr_SetString(PyExc_ValueError, "popen() arg 3 must be -1");
                return NULL;
@@ -2429,13 +2429,13 @@ win32_popen2(PyObject *self, PyObject  *args)
 {
        PyObject *f;
        int tm=0;
-  
+
        char *cmdstring;
        char *mode = "t";
        int bufsize = -1;
        if (!PyArg_ParseTuple(args, "s|si:popen2", &cmdstring, &mode, &bufsize))
                return NULL;
-  
+
        if (*mode == 't')
                tm = _O_TEXT;
        else if (*mode != 'b') {
@@ -2443,14 +2443,14 @@ win32_popen2(PyObject *self, PyObject  *args)
                return NULL;
        } else
                tm = _O_BINARY;
-  
+
        if (bufsize != -1) {
                PyErr_SetString(PyExc_ValueError, "popen2() arg 3 must be -1");
                return NULL;
        }
 
        f = _PyPopen(cmdstring, tm, POPEN_2);
-  
+
        return f;
 }
 
@@ -2466,13 +2466,13 @@ win32_popen3(PyObject *self, PyObject *args)
 {
        PyObject *f;
        int tm = 0;
-  
+
        char *cmdstring;
        char *mode = "t";
        int bufsize = -1;
        if (!PyArg_ParseTuple(args, "s|si:popen3", &cmdstring, &mode, &bufsize))
                return NULL;
-  
+
        if (*mode == 't')
                tm = _O_TEXT;
        else if (*mode != 'b') {
@@ -2480,21 +2480,21 @@ win32_popen3(PyObject *self, PyObject *args)
                return NULL;
        } else
                tm = _O_BINARY;
-  
+
        if (bufsize != -1) {
                PyErr_SetString(PyExc_ValueError, "popen3() arg 3 must be -1");
                return NULL;
        }
 
        f = _PyPopen(cmdstring, tm, POPEN_3);
-  
+
        return f;
 }
 
 /*
  * Variation on win32pipe.popen
  *
- * The result of this function is 2 pipes - the processes stdin, 
+ * The result of this function is 2 pipes - the processes stdin,
  * and stdout+stderr combined as a single pipe.
  */
 
@@ -2503,13 +2503,13 @@ win32_popen4(PyObject *self, PyObject  *args)
 {
        PyObject *f;
        int tm = 0;
-  
+
        char *cmdstring;
        char *mode = "t";
        int bufsize = -1;
        if (!PyArg_ParseTuple(args, "s|si:popen4", &cmdstring, &mode, &bufsize))
                return NULL;
-  
+
        if (*mode == 't')
                tm = _O_TEXT;
        else if (*mode != 'b') {
@@ -2578,21 +2578,21 @@ _PyPopenCreateProcess(char *cmdstring,
                                        x = i+1;
                        modulepath[x] = '\0';
                        /* Create the full-name to w9xpopen, so we can test it exists */
-                       strncat(modulepath, 
-                               szConsoleSpawn, 
+                       strncat(modulepath,
+                               szConsoleSpawn,
                                (sizeof(modulepath)/sizeof(modulepath[0]))
                                       -strlen(modulepath));
                        if (stat(modulepath, &statinfo) != 0) {
-                               /* Eeek - file-not-found - possibly an embedding 
-                                  situation - see if we can locate it in sys.prefix 
+                               /* Eeek - file-not-found - possibly an embedding
+                                  situation - see if we can locate it in sys.prefix
                                */
-                               strncpy(modulepath, 
-                                       Py_GetExecPrefix(), 
+                               strncpy(modulepath,
+                                       Py_GetExecPrefix(),
                                        sizeof(modulepath)/sizeof(modulepath[0]));
                                if (modulepath[strlen(modulepath)-1] != '\\')
                                        strcat(modulepath, "\\");
-                               strncat(modulepath, 
-                                       szConsoleSpawn, 
+                               strncat(modulepath,
+                                       szConsoleSpawn,
                                        (sizeof(modulepath)/sizeof(modulepath[0]))
                                               -strlen(modulepath));
                                /* No where else to look - raise an easily identifiable
@@ -2602,7 +2602,7 @@ _PyPopenCreateProcess(char *cmdstring,
                                   (well, it confused me for a while ;-)
                                */
                                if (stat(modulepath, &statinfo) != 0) {
-                                       PyErr_Format(PyExc_RuntimeError, 
+                                       PyErr_Format(PyExc_RuntimeError,
                                            "Can not locate '%s' which is needed "
                                            "for popen to work with your shell "
                                            "or platform.",
@@ -2611,7 +2611,7 @@ _PyPopenCreateProcess(char *cmdstring,
                                }
                        }
                        x = i + strlen(s3) + strlen(cmdstring) + 1 +
-                               strlen(modulepath) + 
+                               strlen(modulepath) +
                                strlen(szConsoleSpawn) + 1;
 
                        s2 = (char *)_alloca(x);
@@ -2634,7 +2634,7 @@ _PyPopenCreateProcess(char *cmdstring,
                        "use as the shell");
                return FALSE;
        }
-  
+
        ZeroMemory(&siStartInfo, sizeof(STARTUPINFO));
        siStartInfo.cb = sizeof(STARTUPINFO);
        siStartInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
@@ -2672,7 +2672,7 @@ _PyPopen(char *cmdstring, int mode, int n)
        HANDLE hChildStdinRd, hChildStdinWr, hChildStdoutRd, hChildStdoutWr,
                hChildStderrRd, hChildStderrWr, hChildStdinWrDup, hChildStdoutRdDup,
                hChildStderrRdDup, hProcess; /* hChildStdoutWrDup; */
-         
+
        SECURITY_ATTRIBUTES saAttr;
        BOOL fSuccess;
        int fd1, fd2, fd3;
@@ -2728,7 +2728,7 @@ _PyPopen(char *cmdstring, int mode, int n)
                 /* Close the inheritable version of ChildStdErr that we're using. */
                 CloseHandle(hChildStderrRd);
         }
-         
+
         switch (n) {
         case POPEN_1:
                 switch (mode & (_O_RDONLY | _O_TEXT | _O_BINARY | _O_WRONLY)) {
@@ -2778,13 +2778,13 @@ _PyPopen(char *cmdstring, int mode, int n)
                 }
                 file_count = 1;
                 break;
-       
+
         case POPEN_2:
         case POPEN_4:
         {
                 char *m1, *m2;
                 PyObject *p1, *p2;
-               
+
                 if (mode && _O_TEXT) {
                         m1 = "r";
                         m2 = "w";
@@ -2811,12 +2811,12 @@ _PyPopen(char *cmdstring, int mode, int n)
                 file_count = 2;
                 break;
         }
-       
+
         case POPEN_3:
         {
                 char *m1, *m2;
                 PyObject *p1, *p2, *p3;
-               
+
                 if (mode && _O_TEXT) {
                         m1 = "r";
                         m2 = "w";
@@ -2936,7 +2936,7 @@ _PyPopen(char *cmdstring, int mode, int n)
                                 }
                         }
                 }
-                    
+
                 /*
                  * Clean up our localized references for the dictionary keys
                  * and value since PyDict_SetItem will Py_INCREF any copies
@@ -2956,10 +2956,10 @@ _PyPopen(char *cmdstring, int mode, int n)
 
         if (!CloseHandle(hChildStdinRd))
                 return win32_error("CloseHandle", NULL);
-         
+
         if (!CloseHandle(hChildStdoutWr))
                 return win32_error("CloseHandle", NULL);
-         
+
         if ((n != 4) && (!CloseHandle(hChildStderrWr)))
                 return win32_error("CloseHandle", NULL);
 
@@ -3266,7 +3266,7 @@ posix_setgroups(PyObject *self, PyObject *args)
        PyObject *groups;
        int i, len;
         gid_t grouplist[MAX_GROUPS];
-       
+
        if (!PyArg_ParseTuple(args, "O:setgid", &groups))
                return NULL;
        if (!PySequence_Check(groups)) {
@@ -3422,7 +3422,7 @@ posix_symlink(PyObject *self, PyObject *args)
 #ifndef HZ
 #define HZ 60 /* Universal constant :-) */
 #endif /* HZ */
-       
+
 #if defined(PYCC_VACPP) && defined(PYOS_OS2)
 static long
 system_uptime(void)
@@ -3594,7 +3594,7 @@ posix_open(PyObject *self, PyObject *args)
        int flag;
        int mode = 0777;
        int fd;
-       if (!PyArg_ParseTuple(args, "eti|i", 
+       if (!PyArg_ParseTuple(args, "eti|i",
                              Py_FileSystemDefaultEncoding, &file,
                              &flag, &mode))
                return NULL;
@@ -3784,7 +3784,7 @@ posix_fstat(PyObject *self, PyObject *args)
        Py_END_ALLOW_THREADS
        if (res != 0)
                return posix_error();
-       
+
        return _pystat_fromstructstat(st);
 }
 
@@ -4002,7 +4002,7 @@ putenv(char *newval)
                char **newenv;
                if (!(newenv = malloc(esiz * sizeof(char *))))
                        return 1;
-   
+
                for (ep=environ, epp=newenv ; *ep ;)
                        *epp++ = *ep++;
                *epp++ = newval;
@@ -4032,7 +4032,7 @@ Change or add an environment variable.";
  * get re-set with another call for the same key. */
 static PyObject *posix_putenv_garbage;
 
-static PyObject * 
+static PyObject *
 posix_putenv(PyObject *self, PyObject *args)
 {
         char *s1, *s2;
@@ -4117,7 +4117,7 @@ posix_unsetenv(PyObject *self, PyObject *args)
 
        /* Remove the key from posix_putenv_garbage;
         * this will cause it to be collected.  This has to
-        * happen after the real unsetenv() call because the 
+        * happen after the real unsetenv() call because the
         * old value was still accessible until then.
         */
        if (PyDict_DelItem(posix_putenv_garbage,
@@ -4172,12 +4172,12 @@ posix_WIFSTOPPED(PyObject *self, PyObject *args)
 #define status_i status
 #endif
        status_i = 0;
-   
+
        if (!PyArg_ParseTuple(args, "i:WIFSTOPPED", &status_i))
        {
                return NULL;
        }
-   
+
        return Py_BuildValue("i", WIFSTOPPED(status));
 #undef status_i
 }
@@ -4199,12 +4199,12 @@ posix_WIFSIGNALED(PyObject *self, PyObject *args)
 #define status_i status
 #endif
        status_i = 0;
-   
+
        if (!PyArg_ParseTuple(args, "i:WIFSIGNALED", &status_i))
        {
                return NULL;
        }
-   
+
        return Py_BuildValue("i", WIFSIGNALED(status));
 #undef status_i
 }
@@ -4227,12 +4227,12 @@ posix_WIFEXITED(PyObject *self, PyObject *args)
 #define status_i status
 #endif
        status_i = 0;
-   
+
        if (!PyArg_ParseTuple(args, "i:WIFEXITED", &status_i))
        {
                return NULL;
        }
-   
+
        return Py_BuildValue("i", WIFEXITED(status));
 #undef status_i
 }
@@ -4254,12 +4254,12 @@ posix_WEXITSTATUS(PyObject *self, PyObject *args)
 #define status_i status
 #endif
        status_i = 0;
-   
+
        if (!PyArg_ParseTuple(args, "i:WEXITSTATUS", &status_i))
        {
                return NULL;
        }
-   
+
        return Py_BuildValue("i", WEXITSTATUS(status));
 #undef status_i
 }
@@ -4282,12 +4282,12 @@ posix_WTERMSIG(PyObject *self, PyObject *args)
 #define status_i status
 #endif
        status_i = 0;
-   
+
        if (!PyArg_ParseTuple(args, "i:WTERMSIG", &status_i))
        {
                return NULL;
        }
-   
+
        return Py_BuildValue("i", WTERMSIG(status));
 #undef status_i
 }
@@ -4309,12 +4309,12 @@ posix_WSTOPSIG(PyObject *self, PyObject *args)
 #define status_i status
 #endif
        status_i = 0;
-   
+
        if (!PyArg_ParseTuple(args, "i:WSTOPSIG", &status_i))
        {
                return NULL;
        }
-   
+
        return Py_BuildValue("i", WSTOPSIG(status));
 #undef status_i
 }
@@ -4351,17 +4351,17 @@ _pystatvfs_fromstructstatvfs(struct statvfs st) {
 #else
         PyStructSequence_SET_ITEM(v, 0, PyInt_FromLong((long) st.f_bsize));
         PyStructSequence_SET_ITEM(v, 1, PyInt_FromLong((long) st.f_frsize));
-        PyStructSequence_SET_ITEM(v, 2, 
+        PyStructSequence_SET_ITEM(v, 2,
                               PyLong_FromLongLong((LONG_LONG) st.f_blocks));
-        PyStructSequence_SET_ITEM(v, 3, 
+        PyStructSequence_SET_ITEM(v, 3,
                               PyLong_FromLongLong((LONG_LONG) st.f_bfree));
         PyStructSequence_SET_ITEM(v, 4,
                               PyLong_FromLongLong((LONG_LONG) st.f_bavail));
-        PyStructSequence_SET_ITEM(v, 5, 
+        PyStructSequence_SET_ITEM(v, 5,
                               PyLong_FromLongLong((LONG_LONG) st.f_files));
-        PyStructSequence_SET_ITEM(v, 6, 
+        PyStructSequence_SET_ITEM(v, 6,
                               PyLong_FromLongLong((LONG_LONG) st.f_ffree));
-        PyStructSequence_SET_ITEM(v, 7, 
+        PyStructSequence_SET_ITEM(v, 7,
                               PyLong_FromLongLong((LONG_LONG) st.f_favail));
         PyStructSequence_SET_ITEM(v, 8, PyInt_FromLong((long) st.f_flag));
         PyStructSequence_SET_ITEM(v, 9, PyInt_FromLong((long) st.f_namemax));
@@ -5858,16 +5858,16 @@ all_ins(PyObject *d)
 {
 #ifdef F_OK
         if (ins(d, "F_OK", (long)F_OK)) return -1;
-#endif        
+#endif
 #ifdef R_OK
         if (ins(d, "R_OK", (long)R_OK)) return -1;
-#endif        
+#endif
 #ifdef W_OK
         if (ins(d, "W_OK", (long)W_OK)) return -1;
-#endif        
+#endif
 #ifdef X_OK
         if (ins(d, "X_OK", (long)X_OK)) return -1;
-#endif        
+#endif
 #ifdef NGROUPS_MAX
         if (ins(d, "NGROUPS_MAX", (long)NGROUPS_MAX)) return -1;
 #endif
@@ -5876,7 +5876,7 @@ all_ins(PyObject *d)
 #endif
 #ifdef WNOHANG
         if (ins(d, "WNOHANG", (long)WNOHANG)) return -1;
-#endif        
+#endif
 #ifdef O_RDONLY
         if (ins(d, "O_RDONLY", (long)O_RDONLY)) return -1;
 #endif
@@ -5926,6 +5926,29 @@ all_ins(PyObject *d)
         if (ins(d, "O_LARGEFILE", (long)O_LARGEFILE)) return -1;
 #endif
 
+/* MS Windows */
+#ifdef O_NOINHERIT
+       /* Don't inherit in child processes. */
+        if (ins(d, "O_NOINHERIT", (long)O_NOINHERIT)) return -1;
+#endif
+#ifdef _O_SHORT_LIVED
+       /* Optimize for short life (keep in memory). */
+       /* MS forgot to define this one with a non-underscore form too. */
+        if (ins(d, "O_SHORT_LIVED", (long)_O_SHORT_LIVED)) return -1;
+#endif
+#ifdef O_TEMPORARY
+       /* Automatically delete when last handle is closed. */
+        if (ins(d, "O_TEMPORARY", (long)O_TEMPORARY)) return -1;
+#endif
+#ifdef O_RANDOM
+       /* Optimize for random access. */
+        if (ins(d, "O_RANDOM", (long)O_RANDOM)) return -1;
+#endif
+#ifdef O_SEQUENTIAL
+       /* Optimize for sequential access. */
+        if (ins(d, "O_SEQUENTIAL", (long)O_SEQUENTIAL)) return -1;
+#endif
+
 /* GNU extensions. */
 #ifdef O_DIRECT
         /* Direct disk access. */
@@ -5955,7 +5978,7 @@ all_ins(PyObject *d)
 }
 
 
-#if (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__BORLANDC__)) && !defined(__QNX__) 
+#if (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__BORLANDC__)) && !defined(__QNX__)
 #define INITFUNC initnt
 #define MODNAME "nt"
 
@@ -5972,14 +5995,14 @@ DL_EXPORT(void)
 INITFUNC(void)
 {
        PyObject *m, *d, *v;
-       
+
        m = Py_InitModule4(MODNAME,
                           posix_methods,
                           posix__doc__,
                           (PyObject *)NULL,
                           PYTHON_API_VERSION);
        d = PyModule_GetDict(m);
-       
+
        /* Initialize environ dictionary */
        v = convertenviron();
        if (v == NULL || PyDict_SetItemString(d, "environ", v) != 0)