mirror of
https://github.com/reactos/reactos.git
synced 2025-04-27 00:50:23 +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;
|
MaxDestFileSize.QuadPart = Search->File->FileSize;
|
||||||
NtStatus = NtCreateSection(&DestFileSection,
|
NtStatus = NtCreateSection(&DestFileSection,
|
||||||
SECTION_ALL_ACCESS,
|
SECTION_ALL_ACCESS,
|
||||||
|
@ -1139,40 +1181,6 @@ CabinetExtractFile(
|
||||||
}
|
}
|
||||||
|
|
||||||
CurrentDestBuffer = DestFileBuffer;
|
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 */
|
/* Call extract event handler */
|
||||||
|
|
Loading…
Reference in a new issue