roo_io
API Documentation for roo_io
Loading...
Searching...
No Matches
file_input_stream.cpp
Go to the documentation of this file.
2
3#ifdef ARDUINO
4
5namespace roo_io {
6
7ArduinoFileInputStream::ArduinoFileInputStream(Status error)
8 : file_(), status_(error) {}
9
10ArduinoFileInputStream::ArduinoFileInputStream(fs::File file)
11 : ArduinoFileInputStream(nullptr, std::move(file)) {}
12
13ArduinoFileInputStream::ArduinoFileInputStream(std::shared_ptr<MountImpl> mount,
14 fs::File file)
15 : mount_(std::move(mount)),
16 file_(std::move(file)),
17 status_(file_ ? kOk : kClosed) {}
18
19size_t ArduinoFileInputStream::read(byte* buf, size_t count) {
20 if (status_ != kOk) return 0;
21 size_t result = file_.read((uint8_t*)buf, count);
22 if (result == 0) {
23 status_ = kEndOfStream;
24 return 0;
25 } else if (result == ((size_t)(-1))) {
26 // Indicates an error.
27 status_ = kReadError;
28 mount_.reset();
29 return 0;
30 }
31 return result;
32}
33
34void ArduinoFileInputStream::seek(uint64_t offset) {
35 if (status_ != kOk && status_ != kEndOfStream) return;
36 if (file_.seek(offset)) {
37 status_ = kOk;
38 } else {
39 status_ = kSeekError;
40 mount_.reset();
41 }
42}
43
44void ArduinoFileInputStream::skip(uint64_t count) {
45 if (count < 64) {
46 byte buf[count];
47 readFully(buf, count);
48 return;
49 }
50 if (!file_.seek(count, SeekCur)) {
51 status_ = kSeekError;
52 mount_.reset();
53 return;
54 }
55 if (file_.position() > file_.size()) {
56 status_ = kEndOfStream;
57 }
58}
59
60void ArduinoFileInputStream::close() {
61 file_.close();
62 mount_.reset();
63 status_ = kClosed;
64}
65
66} // namespace roo_io
67
68#endif // ARDUINO
Definition byte.h:6
roo::basic_string_view< CharT, Traits > basic_string_view
Definition string_view.h:8
size_t count
Definition compare.h:45
Status
Definition status.h:7
@ kOk
Definition status.h:8
@ kSeekError
Definition status.h:14
@ kClosed
Definition status.h:10
@ kReadError
Definition status.h:13
@ kEndOfStream
Definition status.h:9