Author: pschweitzer Date: Sun Nov 23 15:49:24 2014 New Revision: 65462
URL: http://svn.reactos.org/svn/reactos?rev=65462&view=rev Log: [NTFS] - In NtfsQueryDirectory(), don't upcase name in dir search pattern, it can conflict with POSIX names. - In CompareFileName(), handle the fact that for Win32 & DOS we do case insensitive comparisons by upcasing name before match. Don't do it for POSIX names!
This fixes name completion in cmd for POSIX. And doesn't break it for Win32 :-).
Modified: trunk/reactos/drivers/filesystems/ntfs/dirctl.c trunk/reactos/drivers/filesystems/ntfs/mft.c
Modified: trunk/reactos/drivers/filesystems/ntfs/dirctl.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/ntfs/di... ============================================================================== --- trunk/reactos/drivers/filesystems/ntfs/dirctl.c [iso-8859-1] (original) +++ trunk/reactos/drivers/filesystems/ntfs/dirctl.c [iso-8859-1] Sun Nov 23 15:49:24 2014 @@ -348,14 +348,7 @@ return STATUS_INSUFFICIENT_RESOURCES; }
- Status = RtlUpcaseUnicodeString(&Pattern, SearchPattern, FALSE); - if (!NT_SUCCESS(Status)) - { - DPRINT1("RtlUpcaseUnicodeString('%wZ') failed with status 0x%08lx\n", &Pattern, Status); - ExFreePoolWithTag(Ccb->DirectorySearchPattern, TAG_NTFS); - Ccb->DirectorySearchPattern = NULL; - return Status; - } + memcpy(Ccb->DirectorySearchPattern, SearchPattern->Buffer, SearchPattern->Length); Ccb->DirectorySearchPattern[SearchPattern->Length / sizeof(WCHAR)] = 0; } }
Modified: trunk/reactos/drivers/filesystems/ntfs/mft.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/ntfs/mf... ============================================================================== --- trunk/reactos/drivers/filesystems/ntfs/mft.c [iso-8859-1] (original) +++ trunk/reactos/drivers/filesystems/ntfs/mft.c [iso-8859-1] Sun Nov 23 15:49:24 2014 @@ -466,6 +466,7 @@ PINDEX_ENTRY_ATTRIBUTE IndexEntry, BOOLEAN DirSearch) { + BOOLEAN Ret, Alloc = FALSE; UNICODE_STRING EntryName;
EntryName.Buffer = IndexEntry->FileName.Name; @@ -474,7 +475,25 @@
if (DirSearch) { - return FsRtlIsNameInExpression(FileName, &EntryName, (IndexEntry->FileName.NameType != NTFS_FILE_NAME_POSIX), NULL); + UNICODE_STRING IntFileName; + if (IndexEntry->FileName.NameType != NTFS_FILE_NAME_POSIX) + { + ASSERT(NT_SUCCESS(RtlUpcaseUnicodeString(&IntFileName, FileName, TRUE))); + Alloc = TRUE; + } + else + { + IntFileName = *FileName; + } + + Ret = FsRtlIsNameInExpression(&IntFileName, &EntryName, (IndexEntry->FileName.NameType != NTFS_FILE_NAME_POSIX), NULL); + + if (Alloc) + { + RtlFreeUnicodeString(&IntFileName); + } + + return Ret; } else {