[NTFS] - Fix creation of files with long filenames.
authorTrevor Thompson <tmt256@email.vccs.edu>
Sun, 25 Jun 2017 04:29:04 +0000 (04:29 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Sun, 10 Dec 2017 10:14:39 +0000 (11:14 +0100)
svn path=/branches/GSoC_2016/NTFS/; revision=75193

drivers/filesystems/ntfs/attrib.c

index 120cf90..7669008 100644 (file)
@@ -220,9 +220,15 @@ AddFileName(PFILE_RECORD_HEADER FileRecord,
     DPRINT1("FileNameAttribute->DirectoryFileReferenceNumber: 0x%016I64x\n", FileNameAttribute->DirectoryFileReferenceNumber);
 
     FileNameAttribute->NameLength = FilenameNoPath.Length / sizeof(WCHAR);
     DPRINT1("FileNameAttribute->DirectoryFileReferenceNumber: 0x%016I64x\n", FileNameAttribute->DirectoryFileReferenceNumber);
 
     FileNameAttribute->NameLength = FilenameNoPath.Length / sizeof(WCHAR);
-    // TODO: Get proper nametype, add DOS links as needed
-    FileNameAttribute->NameType = NTFS_FILE_NAME_WIN32_AND_DOS;
     RtlCopyMemory(FileNameAttribute->Name, FilenameNoPath.Buffer, FilenameNoPath.Length);
     RtlCopyMemory(FileNameAttribute->Name, FilenameNoPath.Buffer, FilenameNoPath.Length);
+
+    // For now, we're emulating the way Windows behaves when 8.3 name generation is disabled
+    // TODO: add DOS Filename as needed
+    if (RtlIsNameLegalDOS8Dot3(&FilenameNoPath, NULL, NULL))
+        FileNameAttribute->NameType = NTFS_FILE_NAME_WIN32_AND_DOS;
+    else
+        FileNameAttribute->NameType = NTFS_FILE_NAME_POSIX;
+    
     FileRecord->LinkCount++;
 
     AttributeAddress->Length = ResidentHeaderLength +
     FileRecord->LinkCount++;
 
     AttributeAddress->Length = ResidentHeaderLength +