mirror of
https://github.com/RGBCube/serenity
synced 2025-07-28 07:37:35 +00:00
LibArchive: Add support for modification time and date
This commit is contained in:
parent
361df6eff8
commit
0ce1c52577
4 changed files with 59 additions and 8 deletions
|
@ -90,6 +90,8 @@ ErrorOr<bool> Zip::for_each_member(Function<IterationDecision(ZipMember const&)>
|
|||
member.compression_method = central_directory_record.compression_method;
|
||||
member.uncompressed_size = central_directory_record.uncompressed_size;
|
||||
member.crc32 = central_directory_record.crc32;
|
||||
member.modification_time = central_directory_record.modification_time;
|
||||
member.modification_date = central_directory_record.modification_date;
|
||||
member.is_directory = central_directory_record.external_attributes & zip_directory_external_attribute || member.name.bytes_as_string_view().ends_with('/'); // FIXME: better directory detection
|
||||
|
||||
if (callback(member) == IterationDecision::Break)
|
||||
|
@ -122,8 +124,8 @@ ErrorOr<void> ZipOutputStream::add_member(ZipMember const& member)
|
|||
.minimum_version = minimum_version_needed(member.compression_method),
|
||||
.general_purpose_flags = { .flags = 0 },
|
||||
.compression_method = static_cast<u16>(member.compression_method),
|
||||
.modification_time = 0, // TODO: support modification time
|
||||
.modification_date = 0,
|
||||
.modification_time = member.modification_time,
|
||||
.modification_date = member.modification_date,
|
||||
.crc32 = member.crc32,
|
||||
.compressed_size = static_cast<u32>(member.compressed_data.size()),
|
||||
.uncompressed_size = member.uncompressed_size,
|
||||
|
@ -150,8 +152,8 @@ ErrorOr<void> ZipOutputStream::finish()
|
|||
.minimum_version = zip_version,
|
||||
.general_purpose_flags = { .flags = 0 },
|
||||
.compression_method = member.compression_method,
|
||||
.modification_time = 0, // TODO: support modification time
|
||||
.modification_date = 0,
|
||||
.modification_time = member.modification_time,
|
||||
.modification_date = member.modification_date,
|
||||
.crc32 = member.crc32,
|
||||
.compressed_size = static_cast<u32>(member.compressed_data.size()),
|
||||
.uncompressed_size = member.uncompressed_size,
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <AK/Array.h>
|
||||
#include <AK/DOSPackedTime.h>
|
||||
#include <AK/Function.h>
|
||||
#include <AK/IterationDecision.h>
|
||||
#include <AK/String.h>
|
||||
|
@ -112,8 +113,8 @@ struct [[gnu::packed]] CentralDirectoryRecord {
|
|||
u16 minimum_version;
|
||||
ZipGeneralPurposeFlags general_purpose_flags;
|
||||
ZipCompressionMethod compression_method;
|
||||
u16 modification_time;
|
||||
u16 modification_date;
|
||||
DOSPackedTime modification_time;
|
||||
DOSPackedDate modification_date;
|
||||
u32 crc32;
|
||||
u32 compressed_size;
|
||||
u32 uncompressed_size;
|
||||
|
@ -186,8 +187,8 @@ struct [[gnu::packed]] LocalFileHeader {
|
|||
u16 minimum_version;
|
||||
ZipGeneralPurposeFlags general_purpose_flags;
|
||||
u16 compression_method;
|
||||
u16 modification_time;
|
||||
u16 modification_date;
|
||||
DOSPackedTime modification_time;
|
||||
DOSPackedDate modification_date;
|
||||
u32 crc32;
|
||||
u32 compressed_size;
|
||||
u32 uncompressed_size;
|
||||
|
@ -244,6 +245,8 @@ struct ZipMember {
|
|||
u32 uncompressed_size;
|
||||
u32 crc32;
|
||||
bool is_directory;
|
||||
DOSPackedTime modification_time;
|
||||
DOSPackedDate modification_date;
|
||||
};
|
||||
|
||||
class Zip {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue