Fix a bug in DirEntryList::get() where it would throw an error when it didn't find the entry, but the function signature looks like it would return boost::none.
This bug didn't actually materialize because the only call site is in CryNode.cpp and it would throw an error anyways if it gets boost::none. But still worth fixing to reduce API confusion.
This commit is contained in:
parent
934d190534
commit
3dd8b53366
@ -77,12 +77,20 @@ void DirEntryList::addOrOverwrite(const string &name, const BlockId &blobId, fsp
|
|||||||
void DirEntryList::rename(const blockstore::BlockId &blockId, const std::string &name, std::function<void (const blockstore::BlockId &blockId)> onOverwritten) {
|
void DirEntryList::rename(const blockstore::BlockId &blockId, const std::string &name, std::function<void (const blockstore::BlockId &blockId)> onOverwritten) {
|
||||||
auto foundSameName = _findByName(name);
|
auto foundSameName = _findByName(name);
|
||||||
if (foundSameName != _entries.end() && foundSameName->blockId() != blockId) {
|
if (foundSameName != _entries.end() && foundSameName->blockId() != blockId) {
|
||||||
_checkAllowedOverwrite(foundSameName->type(), _findById(blockId)->type());
|
auto found = _findById(blockId);
|
||||||
|
if (found == _entries.end()) {
|
||||||
|
throw fspp::fuse::FuseErrnoException(ENOENT);
|
||||||
|
}
|
||||||
|
_checkAllowedOverwrite(foundSameName->type(), found->type());
|
||||||
onOverwritten(foundSameName->blockId());
|
onOverwritten(foundSameName->blockId());
|
||||||
_entries.erase(foundSameName);
|
_entries.erase(foundSameName);
|
||||||
}
|
}
|
||||||
|
|
||||||
_findById(blockId)->setName(name);
|
auto found = _findById(blockId);
|
||||||
|
if (found == _entries.end()) {
|
||||||
|
throw fspp::fuse::FuseErrnoException(ENOENT);
|
||||||
|
}
|
||||||
|
found->setName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DirEntryList::_checkAllowedOverwrite(fspp::Dir::EntryType oldType, fspp::Dir::EntryType newType) {
|
void DirEntryList::_checkAllowedOverwrite(fspp::Dir::EntryType oldType, fspp::Dir::EntryType newType) {
|
||||||
@ -152,7 +160,7 @@ vector<DirEntry>::const_iterator DirEntryList::_findByName(const string &name) c
|
|||||||
vector<DirEntry>::iterator DirEntryList::_findById(const BlockId &blockId) {
|
vector<DirEntry>::iterator DirEntryList::_findById(const BlockId &blockId) {
|
||||||
auto found = _findLowerBound(blockId);
|
auto found = _findLowerBound(blockId);
|
||||||
if (found == _entries.end() || found->blockId() != blockId) {
|
if (found == _entries.end() || found->blockId() != blockId) {
|
||||||
throw fspp::fuse::FuseErrnoException(ENOENT);
|
return _entries.end();
|
||||||
}
|
}
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
@ -204,12 +212,18 @@ DirEntryList::const_iterator DirEntryList::end() const {
|
|||||||
|
|
||||||
void DirEntryList::setMode(const BlockId &blockId, fspp::mode_t mode) {
|
void DirEntryList::setMode(const BlockId &blockId, fspp::mode_t mode) {
|
||||||
auto found = _findById(blockId);
|
auto found = _findById(blockId);
|
||||||
|
if (found == _entries.end()) {
|
||||||
|
throw fspp::fuse::FuseErrnoException(ENOENT);
|
||||||
|
}
|
||||||
ASSERT ((mode.hasFileFlag() && found->mode().hasFileFlag()) || (mode.hasDirFlag() && found->mode().hasDirFlag()) || (mode.hasSymlinkFlag()), "Unknown mode in entry");
|
ASSERT ((mode.hasFileFlag() && found->mode().hasFileFlag()) || (mode.hasDirFlag() && found->mode().hasDirFlag()) || (mode.hasSymlinkFlag()), "Unknown mode in entry");
|
||||||
found->setMode(mode);
|
found->setMode(mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DirEntryList::setUidGid(const BlockId &blockId, fspp::uid_t uid, fspp::gid_t gid) {
|
bool DirEntryList::setUidGid(const BlockId &blockId, fspp::uid_t uid, fspp::gid_t gid) {
|
||||||
auto found = _findById(blockId);
|
auto found = _findById(blockId);
|
||||||
|
if (found == _entries.end()) {
|
||||||
|
throw fspp::fuse::FuseErrnoException(ENOENT);
|
||||||
|
}
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
if (uid != fspp::uid_t(-1)) {
|
if (uid != fspp::uid_t(-1)) {
|
||||||
found->setUid(uid);
|
found->setUid(uid);
|
||||||
@ -224,12 +238,18 @@ bool DirEntryList::setUidGid(const BlockId &blockId, fspp::uid_t uid, fspp::gid_
|
|||||||
|
|
||||||
void DirEntryList::setAccessTimes(const blockstore::BlockId &blockId, timespec lastAccessTime, timespec lastModificationTime) {
|
void DirEntryList::setAccessTimes(const blockstore::BlockId &blockId, timespec lastAccessTime, timespec lastModificationTime) {
|
||||||
auto found = _findById(blockId);
|
auto found = _findById(blockId);
|
||||||
|
if (found == _entries.end()) {
|
||||||
|
throw fspp::fuse::FuseErrnoException(ENOENT);
|
||||||
|
}
|
||||||
found->setLastAccessTime(lastAccessTime);
|
found->setLastAccessTime(lastAccessTime);
|
||||||
found->setLastModificationTime(lastModificationTime);
|
found->setLastModificationTime(lastModificationTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DirEntryList::updateAccessTimestampForChild(const blockstore::BlockId &blockId, fspp::TimestampUpdateBehavior timestampUpdateBehavior) {
|
bool DirEntryList::updateAccessTimestampForChild(const blockstore::BlockId &blockId, fspp::TimestampUpdateBehavior timestampUpdateBehavior) {
|
||||||
auto found = _findById(blockId);
|
auto found = _findById(blockId);
|
||||||
|
if (found == _entries.end()) {
|
||||||
|
throw fspp::fuse::FuseErrnoException(ENOENT);
|
||||||
|
}
|
||||||
|
|
||||||
const timespec lastAccessTime = found->lastAccessTime();
|
const timespec lastAccessTime = found->lastAccessTime();
|
||||||
const timespec lastModificationTime = found->lastModificationTime();
|
const timespec lastModificationTime = found->lastModificationTime();
|
||||||
@ -256,6 +276,9 @@ bool DirEntryList::updateAccessTimestampForChild(const blockstore::BlockId &bloc
|
|||||||
|
|
||||||
void DirEntryList::updateModificationTimestampForChild(const blockstore::BlockId &blockId) {
|
void DirEntryList::updateModificationTimestampForChild(const blockstore::BlockId &blockId) {
|
||||||
auto found = _findById(blockId);
|
auto found = _findById(blockId);
|
||||||
|
if (found == _entries.end()) {
|
||||||
|
throw fspp::fuse::FuseErrnoException(ENOENT);
|
||||||
|
}
|
||||||
found->setLastModificationTime(cpputils::time::now());
|
found->setLastModificationTime(cpputils::time::now());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user