From 2b76973fa2401f7a5edf68e6470f3d3210cbcff3 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Fri, 22 Nov 2013 12:20:39 +0100 Subject: [PATCH] mimeset: Use TextSnifferAddon when using a custom MIME DB That addresses the problem that packaged text files aren't correctly identified (ticket #9972). All concerned packages have to be rebuilt, of course. --- build/jam/BuildSetup | 1 + .../os/add-ons/registrar/MimeSnifferAddon.h | 1 + .../storage/mime/MimeSnifferAddonManager.h | 1 + .../private/storage/mime/TextSnifferAddon.h | 1 + src/bin/mimeset.cpp | 17 +++++++++++++++-- src/build/libbe/storage/Jamfile | 3 +++ 6 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 headers/build/os/add-ons/registrar/MimeSnifferAddon.h create mode 100644 headers/build/private/storage/mime/MimeSnifferAddonManager.h create mode 100644 headers/build/private/storage/mime/TextSnifferAddon.h diff --git a/build/jam/BuildSetup b/build/jam/BuildSetup index 858fb0708e..a435ee5c43 100644 --- a/build/jam/BuildSetup +++ b/build/jam/BuildSetup @@ -599,6 +599,7 @@ if $(HOST_PLATFORM) = freebsd { HOST_BE_API_HEADERS = [ FDirName $(HAIKU_TOP) headers build ] [ FDirName $(HAIKU_TOP) headers build os ] + [ FDirName $(HAIKU_TOP) headers build os add-ons registrar ] [ FDirName $(HAIKU_TOP) headers build os app ] [ FDirName $(HAIKU_TOP) headers build os drivers ] [ FDirName $(HAIKU_TOP) headers build os kernel ] diff --git a/headers/build/os/add-ons/registrar/MimeSnifferAddon.h b/headers/build/os/add-ons/registrar/MimeSnifferAddon.h new file mode 100644 index 0000000000..70a0364265 --- /dev/null +++ b/headers/build/os/add-ons/registrar/MimeSnifferAddon.h @@ -0,0 +1 @@ +#include <../os/add-ons/registrar/MimeSnifferAddon.h> diff --git a/headers/build/private/storage/mime/MimeSnifferAddonManager.h b/headers/build/private/storage/mime/MimeSnifferAddonManager.h new file mode 100644 index 0000000000..6e654cada1 --- /dev/null +++ b/headers/build/private/storage/mime/MimeSnifferAddonManager.h @@ -0,0 +1 @@ +#include <../../../private/storage/mime/MimeSnifferAddonManager.h> diff --git a/headers/build/private/storage/mime/TextSnifferAddon.h b/headers/build/private/storage/mime/TextSnifferAddon.h new file mode 100644 index 0000000000..4cd3774c5f --- /dev/null +++ b/headers/build/private/storage/mime/TextSnifferAddon.h @@ -0,0 +1 @@ +#include <../../../private/storage/mime/TextSnifferAddon.h> diff --git a/src/bin/mimeset.cpp b/src/bin/mimeset.cpp index 17c0d363b3..18f5b7640e 100644 --- a/src/bin/mimeset.cpp +++ b/src/bin/mimeset.cpp @@ -17,6 +17,8 @@ #include #include #include +#include +#include using namespace BPrivate::Storage::Mime; @@ -204,13 +206,24 @@ main(int argc, const char** argv) for (int32 i = 0; i < count; i++) databaseLocation.AddDirectory(databaseDirectories.StringAt(i)); - sDatabase = new(std::nothrow) Database(&databaseLocation, NULL, NULL); + status_t error = MimeSnifferAddonManager::CreateDefault(); + if (error != B_OK) { + fprintf(stderr, "%s: Failed to create MIME sniffer add-on " + "manager: %s\n", sProgramName, strerror(error)); + exit(1); + } + MimeSnifferAddonManager* manager = MimeSnifferAddonManager::Default(); + manager->AddMimeSnifferAddon( + new(std::nothrow) TextSnifferAddon(&databaseLocation)); + + sDatabase = new(std::nothrow) Database(&databaseLocation, manager, + NULL); if (sDatabase == NULL) { fprintf(stderr, "%s: Out of memory!\n", sProgramName); exit(1); } - status_t error = sDatabase->InitCheck(); + error = sDatabase->InitCheck(); if (error != B_OK) { fprintf(stderr, "%s: Failed to init MIME DB: %s\n", sProgramName, strerror(error)); diff --git a/src/build/libbe/storage/Jamfile b/src/build/libbe/storage/Jamfile index 27d02b198c..da3e194723 100644 --- a/src/build/libbe/storage/Jamfile +++ b/src/build/libbe/storage/Jamfile @@ -45,9 +45,12 @@ BuildPlatformMergeObjectPIC storage_kit.o : MimeEntryProcessor.cpp MimeInfoUpdater.cpp MimeSniffer.cpp + MimeSnifferAddon.cpp + MimeSnifferAddonManager.cpp SnifferRules.cpp Supertype.cpp SupportingApps.cpp + TextSnifferAddon.cpp # sniffer CharStream.cpp