roo_io
API Documentation for roo_io
Loading...
Searching...
No Matches
posix_directory.cpp
Go to the documentation of this file.
2
4
5#if ROO_IO_FS_SUPPORT_POSIX
6
7namespace roo_io {
8
9PosixDirectoryImpl::PosixDirectoryImpl(std::shared_ptr<MountImpl> mount,
10 const char* path, DIR* dir,
11 Status status)
12 : mount_(std::move(mount)), path_(path), dir_(dir), status_(status) {}
13
14bool PosixDirectoryImpl::close() {
15 mount_.reset();
16 if (dir_ == nullptr) return true;
17 int result = ::closedir(dir_);
18 if (status_ == kOk || status_ == kEndOfStream) {
19 status_ = (result == 0 ? kClosed : kUnknownIOError);
20 }
21 return result == 0;
22}
23
24void PosixDirectoryImpl::rewind() {
25 if (status_ != kOk && status_ != kEndOfStream) return;
26 ::rewinddir(dir_);
27 status_ = kOk;
28 next_ = nullptr;
29}
30
31bool PosixDirectoryImpl::read(Directory::Entry& entry) {
32 if (status_ != kOk) return false;
33 next_ = ::readdir(dir_);
34 if (next_ == nullptr) {
35 status_ = kEndOfStream;
36 return false;
37 }
38 file_ = path_;
39 if (file_.empty() || file_.back() != '/') {
40 file_ += '/';
41 }
42 size_t path_offset = file_.size();
43 file_.append(next_->d_name);
44 setEntry(entry, file_.c_str(), path_offset, next_->d_type == DT_DIR);
45 return true;
46}
47
48} // namespace roo_io
49
50#endif // ROO_IO_FS_SUPPORT_POSIX
Definition byte.h:6
roo::basic_string_view< CharT, Traits > basic_string_view
Definition string_view.h:8
Status
Definition status.h:7
@ kUnknownIOError
Definition status.h:58
@ kOk
Definition status.h:8
@ kClosed
Definition status.h:10
@ kEndOfStream
Definition status.h:9