diff --git a/headers/private/storage/mime/TextSnifferAddon.h b/headers/private/storage/mime/TextSnifferAddon.h index 4a0adb8cd2..7ef924e374 100644 --- a/headers/private/storage/mime/TextSnifferAddon.h +++ b/headers/private/storage/mime/TextSnifferAddon.h @@ -14,9 +14,13 @@ namespace Storage { namespace Mime { +class DatabaseLocation; + + class TextSnifferAddon : public BMimeSnifferAddon { public: - TextSnifferAddon(); + TextSnifferAddon( + DatabaseLocation* databaseLocation); virtual ~TextSnifferAddon(); virtual size_t MinimalBufferSize(); @@ -26,6 +30,9 @@ public: virtual float GuessMimeType(BFile* file, const void* buffer, int32 length, BMimeType* type); + +private: + DatabaseLocation* fDatabaseLocation; }; diff --git a/src/kits/storage/mime/TextSnifferAddon.cpp b/src/kits/storage/mime/TextSnifferAddon.cpp index 9120c515cd..3dd02f510a 100644 --- a/src/kits/storage/mime/TextSnifferAddon.cpp +++ b/src/kits/storage/mime/TextSnifferAddon.cpp @@ -8,18 +8,22 @@ #include +#include + namespace BPrivate { namespace Storage { namespace Mime { -static int file_ascmagic(const unsigned char *buf, size_t nbytes, - BMimeType* mimeType); +static int file_ascmagic(DatabaseLocation* databaseLocation, + const unsigned char *buf, size_t nbytes, BMimeType* mimeType); // constructor -TextSnifferAddon::TextSnifferAddon() +TextSnifferAddon::TextSnifferAddon(DatabaseLocation* databaseLocation) + : + fDatabaseLocation(databaseLocation) { } @@ -48,7 +52,8 @@ float TextSnifferAddon::GuessMimeType(BFile* file, const void* buffer, int32 length, BMimeType* type) { - if (file_ascmagic((const unsigned char*)buffer, length, type)) { + if (file_ascmagic(fDatabaseLocation, (const unsigned char*)buffer, length, + type)) { // If the buffer is very short, we return a lower priority. Maybe // someone else knows better. if (length < 20) @@ -128,7 +133,8 @@ static int ascmatch(const unsigned char *, const my_unichar *, size_t); static int -file_ascmagic(const unsigned char *buf, size_t nbytes, BMimeType* mimeType) +file_ascmagic(DatabaseLocation* databaseLocation, const unsigned char *buf, + size_t nbytes, BMimeType* mimeType) { size_t i; unsigned char *nbuf = NULL; @@ -330,14 +336,16 @@ done: bool found = false; if (subtypeMimeSpecific != NULL) { - mimeType->SetTo(subtypeMimeSpecific); - if (mimeType->IsInstalled()) - found = true; + if (databaseLocation->IsInstalled(subtypeMimeSpecific)) { + mimeType->SetTo(subtypeMimeSpecific); + found = true; + } } if (!found && subtypeMimeGeneric != NULL) { - mimeType->SetTo(subtypeMimeGeneric); - if (mimeType->IsInstalled()) - found = true; + if (databaseLocation->IsInstalled(subtypeMimeGeneric)) { + mimeType->SetTo(subtypeMimeGeneric); + found = true; + } } if (!found) mimeType->SetTo("text/plain"); diff --git a/src/servers/registrar/MIMEManager.cpp b/src/servers/registrar/MIMEManager.cpp index 20214488f9..7be789ba3c 100644 --- a/src/servers/registrar/MIMEManager.cpp +++ b/src/servers/registrar/MIMEManager.cpp @@ -51,7 +51,8 @@ init_mime_sniffer_add_on_manager() return NULL; MimeSnifferAddonManager* manager = MimeSnifferAddonManager::Default(); - manager->AddMimeSnifferAddon(new(nothrow) TextSnifferAddon()); + manager->AddMimeSnifferAddon(new(nothrow) TextSnifferAddon( + BPrivate::Storage::Mime::default_database_location())); return manager; }