From f1a992d187e7039a7b660e8a6fa71fcec418232c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Me=C3=9Fmer?= Date: Thu, 19 Mar 2015 03:53:21 +0100 Subject: [PATCH] A CryDir returns . and .. as children --- src/CryDir.cpp | 6 +++++- src/impl/DirBlob.cpp | 13 +++++-------- src/impl/DirBlob.h | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/CryDir.cpp b/src/CryDir.cpp index 16827194..15faf63a 100644 --- a/src/CryDir.cpp +++ b/src/CryDir.cpp @@ -65,7 +65,11 @@ void CryDir::rmdir() { } unique_ptr> CryDir::children() const { - return LoadBlob()->GetChildren(); + auto children = make_unique>(); + children->push_back(fspp::Dir::Entry(fspp::Dir::EntryType::DIR, ".")); + children->push_back(fspp::Dir::Entry(fspp::Dir::EntryType::DIR, "..")); + LoadBlob()->AppendChildrenTo(children.get()); + return children; } } diff --git a/src/impl/DirBlob.cpp b/src/impl/DirBlob.cpp index 0038a952..01c3c272 100644 --- a/src/impl/DirBlob.cpp +++ b/src/impl/DirBlob.cpp @@ -43,24 +43,21 @@ unsigned char DirBlob::magicNumber() const { return number; } -unique_ptr> DirBlob::GetChildren() const { +void DirBlob::AppendChildrenTo(vector *result) const { Data entries(_blob->size()-1); _blob->read(entries.data(), 1, _blob->size()-1); - auto result = make_unique>(); - const char *pos = (const char*)entries.data(); while(pos < (const char*)entries.data()+entries.size()) { - pos = readAndAddNextChild(pos, result.get()); + pos = readAndAddNextChild(pos, result); } - - return result; } bool DirBlob::hasChild(const string &name) const { //TODO Faster implementation without creating children array possible - auto children = GetChildren(); - for (const auto &child : *children) { + vector children; + AppendChildrenTo(&children); + for (const auto &child : children) { if (child.name == name) { return true; } diff --git a/src/impl/DirBlob.h b/src/impl/DirBlob.h index dd51b7d5..cb7c05a2 100644 --- a/src/impl/DirBlob.h +++ b/src/impl/DirBlob.h @@ -19,7 +19,7 @@ public: DirBlob(std::unique_ptr blob); virtual ~DirBlob(); - std::unique_ptr> GetChildren() const; + void AppendChildrenTo(std::vector *result) const; //TODO Use struct instead of pair std::pair GetChild(const std::string &name) const; void AddChildDir(const std::string &name, const blockstore::Key &blobKey);