From 284730c0027d0afd11b259191c37206eb0a83728 Mon Sep 17 00:00:00 2001 From: Idan Horowitz Date: Fri, 7 May 2021 23:49:26 +0300 Subject: [PATCH] Utilities: Use GzipDecompressor::describe_header for gzip descriptions --- Userland/Utilities/CMakeLists.txt | 2 +- Userland/Utilities/file.cpp | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Userland/Utilities/CMakeLists.txt b/Userland/Utilities/CMakeLists.txt index 429107fca5..2a6fc7843f 100644 --- a/Userland/Utilities/CMakeLists.txt +++ b/Userland/Utilities/CMakeLists.txt @@ -56,4 +56,4 @@ target_link_libraries(gzip LibCompress) target_link_libraries(gunzip LibCompress) target_link_libraries(CppParserTest LibCpp LibGUI) target_link_libraries(PreprocessorTest LibCpp LibGUI) -target_link_libraries(file LibGfx LibIPC) +target_link_libraries(file LibGfx LibIPC LibCompress) 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 #include +#include #include #include #include @@ -34,9 +35,27 @@ static Optional image_details(const String& description, const String& p return String::formatted("{}, {} x {}", description, image_decoder->width(), image_decoder->height()); } +static Optional 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) \