diff options
author | Idan Horowitz <idan.horowitz@gmail.com> | 2021-05-07 23:49:26 +0300 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-05-07 23:22:07 +0200 |
commit | 284730c0027d0afd11b259191c37206eb0a83728 (patch) | |
tree | 1f800f80bd2178239e6f18c8f29f1728948714f4 /Userland/Utilities/file.cpp | |
parent | 2119e0fb3f8ace00f395e61eeb10222b7e78f899 (diff) | |
download | serenity-284730c0027d0afd11b259191c37206eb0a83728.zip |
Utilities: Use GzipDecompressor::describe_header for gzip descriptions
Diffstat (limited to 'Userland/Utilities/file.cpp')
-rw-r--r-- | Userland/Utilities/file.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/Userland/Utilities/file.cpp b/Userland/Utilities/file.cpp index 7792d69382..7de94f6b62 100644 --- a/Userland/Utilities/file.cpp +++ b/Userland/Utilities/file.cpp @@ -6,6 +6,7 @@ #include <AK/MappedFile.h> #include <AK/Vector.h> +#include <LibCompress/Gzip.h> #include <LibCore/ArgsParser.h> #include <LibCore/FileStream.h> #include <LibCore/MimeData.h> @@ -34,9 +35,27 @@ static Optional<String> image_details(const String& description, const String& p return String::formatted("{}, {} x {}", description, image_decoder->width(), image_decoder->height()); } +static Optional<String> gzip_details(String description, const String& path) +{ + auto file_or_error = MappedFile::map(path); + if (file_or_error.is_error()) + return {}; + + auto& mapped_file = *file_or_error.value(); + if (!Compress::GzipDecompressor::is_likely_compressed(mapped_file.bytes())) + return {}; + + auto gzip_details = Compress::GzipDecompressor::describe_header(mapped_file.bytes()); + if (!gzip_details.has_value()) + return {}; + + return String::formatted("{}, {}", description, gzip_details.value()); +} + #define ENUMERATE_MIME_TYPE_DESCRIPTIONS \ __ENUMERATE_MIME_TYPE_DESCRIPTION("application/javascript", "JavaScript source", description_only) \ __ENUMERATE_MIME_TYPE_DESCRIPTION("application/json", "JSON data", description_only) \ + __ENUMERATE_MIME_TYPE_DESCRIPTION("extra/gzip", "gzip compressed data", gzip_details) \ __ENUMERATE_MIME_TYPE_DESCRIPTION("image/bmp", "BMP image data", image_details) \ __ENUMERATE_MIME_TYPE_DESCRIPTION("image/gif", "GIF image data", image_details) \ __ENUMERATE_MIME_TYPE_DESCRIPTION("image/jpeg", "JPEG image data", image_details) \ |