mirror of
https://github.com/reactos/reactos.git
synced 2025-04-25 08:00:24 +00:00
[USETUP] Fix handling of 0 sized files in the cab
This commit is contained in:
parent
e128cbc680
commit
469d4dbbab
1 changed files with 42 additions and 34 deletions
|
@ -1104,6 +1104,48 @@ CabinetExtractFile(
|
|||
}
|
||||
}
|
||||
|
||||
if (!ConvertDosDateTimeToFileTime(Search->File->FileDate,
|
||||
Search->File->FileTime,
|
||||
&FileTime))
|
||||
{
|
||||
DPRINT1("DosDateTimeToFileTime() failed\n");
|
||||
Status = CAB_STATUS_CANNOT_WRITE;
|
||||
goto CloseDestFile;
|
||||
}
|
||||
|
||||
NtStatus = NtQueryInformationFile(DestFile,
|
||||
&IoStatusBlock,
|
||||
&FileBasic,
|
||||
sizeof(FILE_BASIC_INFORMATION),
|
||||
FileBasicInformation);
|
||||
if (!NT_SUCCESS(NtStatus))
|
||||
{
|
||||
DPRINT("NtQueryInformationFile() failed (%x)\n", NtStatus);
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(&FileBasic.LastAccessTime, &FileTime, sizeof(FILETIME));
|
||||
|
||||
NtStatus = NtSetInformationFile(DestFile,
|
||||
&IoStatusBlock,
|
||||
&FileBasic,
|
||||
sizeof(FILE_BASIC_INFORMATION),
|
||||
FileBasicInformation);
|
||||
if (!NT_SUCCESS(NtStatus))
|
||||
{
|
||||
DPRINT("NtSetInformationFile() failed (%x)\n", NtStatus);
|
||||
}
|
||||
}
|
||||
|
||||
SetAttributesOnFile(Search->File, DestFile);
|
||||
|
||||
/* Nothing more to do for 0 sized files */
|
||||
if (Search->File->FileSize == 0)
|
||||
{
|
||||
Status = CAB_STATUS_SUCCESS;
|
||||
goto CloseDestFile;
|
||||
}
|
||||
|
||||
MaxDestFileSize.QuadPart = Search->File->FileSize;
|
||||
NtStatus = NtCreateSection(&DestFileSection,
|
||||
SECTION_ALL_ACCESS,
|
||||
|
@ -1139,40 +1181,6 @@ CabinetExtractFile(
|
|||
}
|
||||
|
||||
CurrentDestBuffer = DestFileBuffer;
|
||||
if (!ConvertDosDateTimeToFileTime(Search->File->FileDate,
|
||||
Search->File->FileTime,
|
||||
&FileTime))
|
||||
{
|
||||
DPRINT1("DosDateTimeToFileTime() failed\n");
|
||||
Status = CAB_STATUS_CANNOT_WRITE;
|
||||
goto UnmapDestFile;
|
||||
}
|
||||
|
||||
NtStatus = NtQueryInformationFile(DestFile,
|
||||
&IoStatusBlock,
|
||||
&FileBasic,
|
||||
sizeof(FILE_BASIC_INFORMATION),
|
||||
FileBasicInformation);
|
||||
if (!NT_SUCCESS(NtStatus))
|
||||
{
|
||||
DPRINT("NtQueryInformationFile() failed (%x)\n", NtStatus);
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(&FileBasic.LastAccessTime, &FileTime, sizeof(FILETIME));
|
||||
|
||||
NtStatus = NtSetInformationFile(DestFile,
|
||||
&IoStatusBlock,
|
||||
&FileBasic,
|
||||
sizeof(FILE_BASIC_INFORMATION),
|
||||
FileBasicInformation);
|
||||
if (!NT_SUCCESS(NtStatus))
|
||||
{
|
||||
DPRINT("NtSetInformationFile() failed (%x)\n", NtStatus);
|
||||
}
|
||||
}
|
||||
|
||||
SetAttributesOnFile(Search->File, DestFile);
|
||||
}
|
||||
|
||||
/* Call extract event handler */
|
||||
|
|
Loading…
Reference in a new issue