[Python-checkins] cpython: Backed out changeset: 17df50df62c7

tim.golden python-checkins at python.org
Sun Apr 27 19:36:57 CEST 2014


http://hg.python.org/cpython/rev/afbfccaab27c
changeset:   90476:afbfccaab27c
user:        Tim Golden <mail at timgolden.me.uk>
date:        Sun Apr 27 18:35:36 2014 +0100
summary:
  Backed out changeset: 17df50df62c7

files:
  Lib/test/test_os.py   |   36 ---------
  Misc/ACKS             |    1 -
  Modules/_winapi.c     |  109 ------------------------------
  Modules/posixmodule.c |   45 +++++++++--
  Modules/winreparse.h  |   53 --------------
  5 files changed, 36 insertions(+), 208 deletions(-)


diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -39,10 +39,6 @@
     import fcntl
 except ImportError:
     fcntl = None
-try:
-    import _winapi
-except ImportError:
-    _winapi = None
 
 from test.script_helper import assert_python_ok
 
@@ -1777,37 +1773,6 @@
             shutil.rmtree(level1)
 
 
- at unittest.skipUnless(sys.platform == "win32", "Win32 specific tests")
-class Win32JunctionTests(unittest.TestCase):
-    junction = 'junctiontest'
-    junction_target = os.path.dirname(os.path.abspath(__file__))
-
-    def setUp(self):
-        assert os.path.exists(self.junction_target)
-        assert not os.path.exists(self.junction)
-
-    def tearDown(self):
-        if os.path.exists(self.junction):
-            # os.rmdir delegates to Windows' RemoveDirectoryW,
-            # which removes junction points safely.
-            os.rmdir(self.junction)
-
-    def test_create_junction(self):
-        _winapi.CreateJunction(self.junction_target, self.junction)
-        self.assertTrue(os.path.exists(self.junction))
-        self.assertTrue(os.path.isdir(self.junction))
-
-        # Junctions are not recognized as links.
-        self.assertFalse(os.path.islink(self.junction))
-
-    def test_unlink_removes_junction(self):
-        _winapi.CreateJunction(self.junction_target, self.junction)
-        self.assertTrue(os.path.exists(self.junction))
-
-        os.unlink(self.junction)
-        self.assertFalse(os.path.exists(self.junction))
-
-
 @support.skip_unless_symlink
 class NonLocalSymlinkTests(unittest.TestCase):
 
@@ -2579,7 +2544,6 @@
         RemoveDirsTests,
         CPUCountTests,
         FDInheritanceTests,
-        Win32JunctionTests,
     )
 
 if __name__ == "__main__":
diff --git a/Misc/ACKS b/Misc/ACKS
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -468,7 +468,6 @@
 Shelley Gooch
 David Goodger
 Hans de Graaff
-Kim Gräsman
 Nathaniel Gray
 Eddy De Greef
 Grant Griffin
diff --git a/Modules/_winapi.c b/Modules/_winapi.c
--- a/Modules/_winapi.c
+++ b/Modules/_winapi.c
@@ -40,7 +40,6 @@
 #define WINDOWS_LEAN_AND_MEAN
 #include "windows.h"
 #include <crtdbg.h>
-#include "winreparse.h"
 
 #if defined(MS_WIN32) && !defined(MS_WIN64)
 #define HANDLE_TO_PYNUM(handle) \
@@ -402,112 +401,6 @@
 }
 
 static PyObject *
-winapi_CreateJunction(PyObject *self, PyObject *args)
-{
-    /* Input arguments */
-    LPWSTR src_path = NULL;
-    LPWSTR dst_path = NULL;
-
-    /* Privilege adjustment */
-    HANDLE token = NULL;
-    TOKEN_PRIVILEGES tp;
-
-    /* Reparse data buffer */
-    const USHORT prefix_len = 4;
-    USHORT print_len = 0;
-    USHORT rdb_size = 0;
-    PREPARSE_DATA_BUFFER rdb = NULL;
-
-    /* Junction point creation */
-    HANDLE junction = NULL;
-    DWORD ret = 0;
-
-    if (!PyArg_ParseTuple(args, "uu",
-                          &src_path, &dst_path))
-        return NULL;
-
-    if (memcmp(src_path, L"\\??\\", prefix_len * sizeof(WCHAR)) == 0)
-        return PyErr_SetFromWindowsErr(ERROR_INVALID_PARAMETER);
-
-    /* Adjust privileges to allow rewriting directory entry as a
-       junction point. */
-    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &token))
-        goto cleanup;
-
-    if (!LookupPrivilegeValue(NULL, SE_RESTORE_NAME, &tp.Privileges[0].Luid))
-        goto cleanup;
-
-    tp.PrivilegeCount = 1;
-    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
-    if (!AdjustTokenPrivileges(token, FALSE, &tp, sizeof(TOKEN_PRIVILEGES),
-                               NULL, NULL))
-        goto cleanup;
-
-    if (GetFileAttributesW(src_path) == INVALID_FILE_ATTRIBUTES)
-        goto cleanup;
-
-    print_len = (USHORT)GetFullPathNameW(src_path, 0, NULL, NULL);
-    if (print_len == 0)
-        goto cleanup;
-
-    /* NUL terminator should not be part of print_len */
-    --print_len;
-
-    rdb_size = REPARSE_DATA_BUFFER_HEADER_SIZE +
-        sizeof(rdb->MountPointReparseBuffer) -
-        sizeof(rdb->MountPointReparseBuffer.PathBuffer) +
-        /* Two +1's for NUL terminators. */
-        (prefix_len + print_len + 1 + print_len + 1) * sizeof(WCHAR);
-    rdb = (PREPARSE_DATA_BUFFER)PyMem_RawMalloc(rdb_size, 1);
-
-    rdb->ReparseTag = IO_REPARSE_TAG_MOUNT_POINT;
-    rdb->ReparseDataLength = rdb_size - REPARSE_DATA_BUFFER_HEADER_SIZE;
-    rdb->MountPointReparseBuffer.SubstituteNameOffset = 0;
-    rdb->MountPointReparseBuffer.SubstituteNameLength =
-        (prefix_len + print_len) * sizeof(WCHAR);
-    rdb->MountPointReparseBuffer.PrintNameOffset =
-        rdb->MountPointReparseBuffer.SubstituteNameLength + sizeof(WCHAR);
-    rdb->MountPointReparseBuffer.PrintNameLength = print_len * sizeof(WCHAR);
-
-    lstrcpyW(rdb->MountPointReparseBuffer.PathBuffer, L"\\??\\");
-    if (GetFullPathNameW(src_path, print_len + 1,
-                         rdb->MountPointReparseBuffer.PathBuffer + prefix_len,
-                         NULL) == 0)
-        goto cleanup;
-
-    lstrcpyW(rdb->MountPointReparseBuffer.PathBuffer +
-             prefix_len + print_len + 1,
-             rdb->MountPointReparseBuffer.PathBuffer + prefix_len);
-
-    /* Create a directory for the junction point. */
-    if (!CreateDirectoryW(dst_path, NULL))
-        goto cleanup;
-
-    junction = CreateFileW(dst_path, GENERIC_READ | GENERIC_WRITE, 0, NULL,
-        OPEN_EXISTING,
-        FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS, NULL);
-    if (junction == INVALID_HANDLE_VALUE)
-        goto cleanup;
-
-    /* Make the directory entry a junction point. */
-    if (!DeviceIoControl(junction, FSCTL_SET_REPARSE_POINT, rdb, rdb_size,
-                         NULL, 0, &ret, NULL))
-        goto cleanup;
-
-cleanup:
-    ret = GetLastError();
-
-    CloseHandle(token);
-    CloseHandle(junction);
-    free(rdb);
-
-    if (ret != 0)
-        return PyErr_SetFromWindowsErr(ret);
-
-    Py_RETURN_NONE;
-}
-
-static PyObject *
 winapi_CreateNamedPipe(PyObject *self, PyObject *args)
 {
     LPCTSTR lpName;
@@ -1332,8 +1225,6 @@
      METH_VARARGS | METH_KEYWORDS, ""},
     {"CreateFile", winapi_CreateFile, METH_VARARGS,
      ""},
-    {"CreateJunction", winapi_CreateJunction, METH_VARARGS,
-     ""},
     {"CreateNamedPipe", winapi_CreateNamedPipe, METH_VARARGS,
      ""},
     {"CreatePipe", winapi_CreatePipe, METH_VARARGS,
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -27,8 +27,6 @@
 #include "Python.h"
 #ifndef MS_WINDOWS
 #include "posixmodule.h"
-#else
-#include "winreparse.h"
 #endif
 
 #ifdef __cplusplus
@@ -303,9 +301,6 @@
 #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"
 #include <malloc.h>
 #include <windows.h>
@@ -1114,6 +1109,41 @@
 #endif
 
 #ifdef MS_WINDOWS
+/* The following structure was copied from
+   http://msdn.microsoft.com/en-us/library/ms791514.aspx as the required
+   include doesn't seem to be present in the Windows SDK (at least as included
+   with Visual Studio Express). */
+typedef struct _REPARSE_DATA_BUFFER {
+    ULONG ReparseTag;
+    USHORT ReparseDataLength;
+    USHORT Reserved;
+    union {
+        struct {
+            USHORT SubstituteNameOffset;
+            USHORT SubstituteNameLength;
+            USHORT PrintNameOffset;
+            USHORT PrintNameLength;
+            ULONG Flags;
+            WCHAR PathBuffer[1];
+        } SymbolicLinkReparseBuffer;
+
+        struct {
+            USHORT SubstituteNameOffset;
+            USHORT  SubstituteNameLength;
+            USHORT  PrintNameOffset;
+            USHORT  PrintNameLength;
+            WCHAR  PathBuffer[1];
+        } MountPointReparseBuffer;
+
+        struct {
+            UCHAR  DataBuffer[1];
+        } GenericReparseBuffer;
+    };
+} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
+
+#define REPARSE_DATA_BUFFER_HEADER_SIZE  FIELD_OFFSET(REPARSE_DATA_BUFFER,\
+                                                      GenericReparseBuffer)
+#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE  ( 16 * 1024 )
 
 static int
 win32_get_reparse_tag(HANDLE reparse_point_handle, ULONG *reparse_tag)
@@ -4462,10 +4492,7 @@
             find_data_handle = FindFirstFileW(lpFileName, &find_data);
 
             if(find_data_handle != INVALID_HANDLE_VALUE) {
-                /* IO_REPARSE_TAG_SYMLINK if it is a symlink and
-                   IO_REPARSE_TAG_MOUNT_POINT if it is a junction point. */
-                is_link = find_data.dwReserved0 == IO_REPARSE_TAG_SYMLINK ||
-                          find_data.dwReserved0 == IO_REPARSE_TAG_MOUNT_POINT;
+                is_link = find_data.dwReserved0 == IO_REPARSE_TAG_SYMLINK;
                 FindClose(find_data_handle);
             }
         }
diff --git a/Modules/winreparse.h b/Modules/winreparse.h
deleted file mode 100644
--- a/Modules/winreparse.h
+++ /dev/null
@@ -1,53 +0,0 @@
-#ifndef Py_WINREPARSE_H
-#define Py_WINREPARSE_H
-
-#ifdef MS_WINDOWS
-#include <Windows.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* The following structure was copied from
-   http://msdn.microsoft.com/en-us/library/ff552012.aspx as the required
-   include doesn't seem to be present in the Windows SDK (at least as included
-   with Visual Studio Express). */
-typedef struct _REPARSE_DATA_BUFFER {
-    ULONG ReparseTag;
-    USHORT ReparseDataLength;
-    USHORT Reserved;
-    union {
-        struct {
-            USHORT SubstituteNameOffset;
-            USHORT SubstituteNameLength;
-            USHORT PrintNameOffset;
-            USHORT PrintNameLength;
-            ULONG Flags;
-            WCHAR PathBuffer[1];
-        } SymbolicLinkReparseBuffer;
-
-        struct {
-            USHORT SubstituteNameOffset;
-            USHORT  SubstituteNameLength;
-            USHORT  PrintNameOffset;
-            USHORT  PrintNameLength;
-            WCHAR  PathBuffer[1];
-        } MountPointReparseBuffer;
-
-        struct {
-            UCHAR  DataBuffer[1];
-        } GenericReparseBuffer;
-    };
-} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
-
-#define REPARSE_DATA_BUFFER_HEADER_SIZE  FIELD_OFFSET(REPARSE_DATA_BUFFER,\
-                                                      GenericReparseBuffer)
-#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE  ( 16 * 1024 )
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* MS_WINDOWS */
-
-#endif /* !Py_WINREPARSE_H */

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list