[NFI] Remove the $Extend specific case. This fixes a FIXME

This commit is contained in:
Pierre Schweitzer 2018-01-20 15:35:05 +01:00
parent a46d9999dd
commit a34d807311
No known key found for this signature in database
GPG key ID: 7545556C3D585B0B

View file

@ -164,6 +164,26 @@ void PrintUsage(void)
/* FIXME */
}
void AddToCache(PWSTR Name, DWORD Length, ULONGLONG MftId)
{
PNAME_CACHE_ENTRY CacheEntry;
/* Allocate an entry big enough to store name and cache info */
CacheEntry = HeapAlloc(GetProcessHeap(), 0, sizeof(NAME_CACHE_ENTRY) + Length);
if (CacheEntry == NULL)
{
return;
}
/* Insert in head (likely more perf) */
CacheEntry->Next = CacheHead;
CacheHead = CacheEntry;
/* Set up entry with full path */
CacheEntry->MftId = MftId;
CacheEntry->NameLen = Length;
CopyMemory(CacheEntry->Name, Name, Length);
}
void PrintPrettyName(PNTFS_ATTR_RECORD Attributes, PNTFS_ATTR_RECORD AttributesEnd, ULONGLONG MftId)
{
BOOLEAN FirstRun, Found;
@ -176,6 +196,13 @@ void PrintPrettyName(PNTFS_ATTR_RECORD Attributes, PNTFS_ATTR_RECORD AttributesE
if (MftId <= NTFS_FILE_EXTEND)
{
_tprintf(_T("%s\n"), KnownEntries[MftId]);
/* $Extend can contain entries, add it in cache */
if (MftId == NTFS_FILE_EXTEND)
{
AddToCache(L"\\$Extend", sizeof(L"\\$Extend") - sizeof(UNICODE_NULL), NTFS_FILE_EXTEND);
}
return;
}
@ -221,21 +248,6 @@ TryAgain:
Length = Name->NameLength + 1;
Display[Length] = UNICODE_NULL;
}
/* Specific case for $Extend\ files
* FIXME: Should be made more generic?
*/
else if (ParentId == NTFS_FILE_EXTEND)
{
Display[0] = L'\\';
Length = wcslen(L"$Extend");
CopyMemory(&Display[1], L"$Extend", Length * sizeof(WCHAR));
++Length;
Display[Length] = L'\\';
++Length;
CopyMemory(Display + Length, Name->Name, Name->NameLength * sizeof(WCHAR));
Length += Name->NameLength;
Display[Length] = UNICODE_NULL;
}
/* Default case */
else
{
@ -279,20 +291,7 @@ TryAgain:
/* If that's a directory, put it in the cache */
if (Name->FileAttributes & NTFS_FILE_TYPE_DIRECTORY)
{
PNAME_CACHE_ENTRY CacheEntry;
/* Allocate an entry big enough to store name and cache info */
CacheEntry = HeapAlloc(GetProcessHeap(), 0, sizeof(NAME_CACHE_ENTRY) + Length * sizeof(WCHAR));
if (CacheEntry != NULL)
{
/* Insert in head (likely more perf) */
CacheEntry->Next = CacheHead;
CacheHead = CacheEntry;
/* Set up entry with full path */
CacheEntry->MftId = MftId;
CacheEntry->NameLen = Length * sizeof(WCHAR);
CopyMemory(CacheEntry->Name, Display, Length * sizeof(WCHAR));
}
AddToCache(Display, Length * sizeof(WCHAR), MftId);
}
/* Now, just quit */