diff options
Diffstat (limited to 'src/user/lib/fwik/io/Node.cpp')
-rw-r--r-- | src/user/lib/fwik/io/Node.cpp | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/user/lib/fwik/io/Node.cpp b/src/user/lib/fwik/io/Node.cpp index daccc18..5585aa8 100644 --- a/src/user/lib/fwik/io/Node.cpp +++ b/src/user/lib/fwik/io/Node.cpp @@ -2,24 +2,34 @@ Node::Node(FILE f) { fd = f; - int i = libc::statf(f, &info); - valid = (i == 0); + error = libc::statf(f, &info); } Node::Node(const char* filename, int mode) { fd = libc::open(filename, mode); if (fd < 0) { - valid = false; + if (fd != E_NOT_FOUND) error = libc::stat(filename, &info); } else { int i = libc::statf(fd, &info); - valid = (i == 0); - if (!valid) libc::close(fd); + error = i; + if (error < 0) libc::close(fd); + } +} + +Node::Node(FILE parent, const char* filename, int mode) { + fd = libc::open_relative(parent, filename, mode); + if (fd < 0) { + if (fd != E_NOT_FOUND) error = libc::stat_relative(parent, filename, &info); + } else { + int i = libc::statf(fd, &info); + error = i; + if (error < 0) libc::close(fd); } } void Node::close() { - if (valid) libc::close(fd); - valid = false; + if (error == 0) libc::close(fd); + error = E_INVALID_FD; } //////// |