diff options
author | Ritt Konstantin <ritt.ks@gmail.com> | 2010-03-23 14:03:24 (GMT) |
---|---|---|
committer | João Abecasis <joao@trolltech.com> | 2010-03-23 14:06:07 (GMT) |
commit | b4996ab8e3a26d45ee55593da281e4b798c04dd2 (patch) | |
tree | 431213deec68adccd6c3613b23f61074754b4881 /src/corelib/io | |
parent | 3fbedcd085b3e89e3646bf49264001ee216c5852 (diff) | |
download | Qt-b4996ab8e3a26d45ee55593da281e4b798c04dd2.zip Qt-b4996ab8e3a26d45ee55593da281e4b798c04dd2.tar.gz Qt-b4996ab8e3a26d45ee55593da281e4b798c04dd2.tar.bz2 |
QFSFileEngine: don't look through NTFS junctions
Starting in 1216161584b730576c24fb128131838be1826b37, we started
processing NTFS junctions as symbolic link.
This reverts isSymlink() behavior back to former behavior and processes
only symbolic junctions. The code path there worked just fine for
directory symbolic links but lead to multiple issues for volume mount
point junctions due to incompleteness.
Task-number: QTBUG-7036, QTBUG-7384
Merge-request: 493
Reviewed-by: João Abecasis <joao@trolltech.com>
Diffstat (limited to 'src/corelib/io')
-rw-r--r-- | src/corelib/io/qfsfileengine_win.cpp | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp index 9fc8dc3..eeca07e 100644 --- a/src/corelib/io/qfsfileengine_win.cpp +++ b/src/corelib/io/qfsfileengine_win.cpp @@ -1275,12 +1275,7 @@ static QString readSymLink(const QString &link) REPARSE_DATA_BUFFER *rdb = (REPARSE_DATA_BUFFER*)qMalloc(bufsize); DWORD retsize = 0; if (::DeviceIoControl(handle, FSCTL_GET_REPARSE_POINT, 0, 0, rdb, bufsize, &retsize, 0)) { - if (rdb->ReparseTag == IO_REPARSE_TAG_MOUNT_POINT) { - int length = rdb->MountPointReparseBuffer.SubstituteNameLength / sizeof(wchar_t); - int offset = rdb->MountPointReparseBuffer.SubstituteNameOffset / sizeof(wchar_t); - const wchar_t* PathBuffer = &rdb->MountPointReparseBuffer.PathBuffer[offset]; - result = QString::fromWCharArray(PathBuffer, length); - } else { + if (rdb->ReparseTag == IO_REPARSE_TAG_SYMLINK) { int length = rdb->SymbolicLinkReparseBuffer.SubstituteNameLength / sizeof(wchar_t); int offset = rdb->SymbolicLinkReparseBuffer.SubstituteNameOffset / sizeof(wchar_t); const wchar_t* PathBuffer = &rdb->SymbolicLinkReparseBuffer.PathBuffer[offset]; @@ -1543,8 +1538,7 @@ bool QFSFileEnginePrivate::isSymlink() const if (hFind != INVALID_HANDLE_VALUE) { ::FindClose(hFind); if ((findData.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) - && (findData.dwReserved0 == IO_REPARSE_TAG_MOUNT_POINT - || findData.dwReserved0 == IO_REPARSE_TAG_SYMLINK)) { + && findData.dwReserved0 == IO_REPARSE_TAG_SYMLINK) { is_link = true; } } |