summaryrefslogtreecommitdiff
path: root/Userland/Utilities/file.cpp
diff options
context:
space:
mode:
authorIdan Horowitz <idan.horowitz@gmail.com>2021-05-07 23:49:26 +0300
committerAndreas Kling <kling@serenityos.org>2021-05-07 23:22:07 +0200
commit284730c0027d0afd11b259191c37206eb0a83728 (patch)
tree1f800f80bd2178239e6f18c8f29f1728948714f4 /Userland/Utilities/file.cpp
parent2119e0fb3f8ace00f395e61eeb10222b7e78f899 (diff)
downloadserenity-284730c0027d0afd11b259191c37206eb0a83728.zip
Utilities: Use GzipDecompressor::describe_header for gzip descriptions
Diffstat (limited to 'Userland/Utilities/file.cpp')
-rw-r--r--Userland/Utilities/file.cpp19
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) \