From 69814c72cbce0de229ee2351a92b1abe4d344e9f Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 17 Jun 2019 20:52:45 +0300 Subject: [PATCH] Prefer non-private mime-types in case of ambiguity. GitOrigin-RevId: 6d44c83405e3fc0c9b386c26ca0f84474349a044 --- tdutils/generate/generate_mime_types_gperf.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/tdutils/generate/generate_mime_types_gperf.cpp b/tdutils/generate/generate_mime_types_gperf.cpp index 64d42ab3..f816e68c 100644 --- a/tdutils/generate/generate_mime_types_gperf.cpp +++ b/tdutils/generate/generate_mime_types_gperf.cpp @@ -15,7 +15,7 @@ #include #include -std::pair split(std::string s, char delimiter = ' ') { +static std::pair split(std::string s, char delimiter = ' ') { auto delimiter_pos = s.find(delimiter); if (delimiter_pos == std::string::npos) { return {std::move(s), ""}; @@ -26,7 +26,7 @@ std::pair split(std::string s, char delimiter = ' ') { } } -bool generate(const char *file_name, const char *from_name, const char *to_name, +static bool generate(const char *file_name, const char *from_name, const char *to_name, const std::map &map) { // binary mode is needed for MSYS2 gperf std::ofstream out(file_name, std::ios_base::trunc | std::ios_base::binary); @@ -71,6 +71,10 @@ bool generate(const char *file_name, const char *from_name, const char *to_name, return true; } +static bool is_private_mime_type(const std::string &mime_type) { + return mime_type.find("/x-") != std::string::npos; +} + int main(int argc, char *argv[]) { if (argc != 4) { std::cerr << "Wrong number of arguments supplied. Expected 'generate_mime_types_gperf " @@ -132,7 +136,13 @@ int main(int argc, char *argv[]) { for (auto &extension : extensions) { if (!extension_to_mime_type.emplace(extension, mime_type).second) { - std::cerr << "Extension \"" << extension << "\" matches more than one type" << std::endl; + if (is_private_mime_type(extension_to_mime_type[extension]) == is_private_mime_type(mime_type)) { + std::cerr << "Extension \"" << extension << "\" matches more than one type" << std::endl; + } else { + if (!is_private_mime_type(mime_type)) { + extension_to_mime_type[extension] = mime_type; + } + } } } }