From 5fb334831939c75dd29eb50e7f79e90876764a49 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Thu, 9 May 2013 03:18:46 +0200 Subject: [PATCH] MimeEntryProcessor: Add DoRecursively() While Do() only process the specified entry, DoRecursively() also recurses into directories. --- .../private/storage/mime/MimeEntryProcessor.h | 2 ++ src/kits/storage/mime/MimeEntryProcessor.cpp | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/headers/private/storage/mime/MimeEntryProcessor.h b/headers/private/storage/mime/MimeEntryProcessor.h index 24e8bdd379..d74eb5c1a4 100644 --- a/headers/private/storage/mime/MimeEntryProcessor.h +++ b/headers/private/storage/mime/MimeEntryProcessor.h @@ -36,6 +36,8 @@ public: virtual status_t Do(const entry_ref& entry, bool* _entryIsDir) = 0; + status_t DoRecursively(const entry_ref& entry); + protected: Database* fDatabase; DatabaseLocker* fDatabaseLocker; diff --git a/src/kits/storage/mime/MimeEntryProcessor.cpp b/src/kits/storage/mime/MimeEntryProcessor.cpp index e287bc4315..c1034a0c37 100644 --- a/src/kits/storage/mime/MimeEntryProcessor.cpp +++ b/src/kits/storage/mime/MimeEntryProcessor.cpp @@ -9,6 +9,9 @@ #include +#include +#include + namespace BPrivate { namespace Storage { @@ -41,6 +44,29 @@ MimeEntryProcessor::~MimeEntryProcessor() } +status_t +MimeEntryProcessor::DoRecursively(const entry_ref& entry) +{ + bool entryIsDir = false; + status_t error = Do(entry, &entryIsDir); + if (error != B_OK) + return error; + + if (entryIsDir) { + BDirectory directory; + error = directory.SetTo(&entry); + if (error != B_OK) + return error; + + entry_ref childEntry; + while (directory.GetNextRef(&childEntry) == B_OK) + DoRecursively(childEntry); + } + + return B_OK; +} + + } // namespace Mime } // namespace Storage } // namespace BPrivate