summaryrefslogtreecommitdiff
path: root/src/user/lib/fwik/io/Node.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/user/lib/fwik/io/Node.cpp')
-rw-r--r--src/user/lib/fwik/io/Node.cpp24
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;
}
////////