aboutsummaryrefslogtreecommitdiff
path: root/src/base/fs/read.c
diff options
context:
space:
mode:
authorNicholas Noll <nbnoll@eml.cc>2021-12-05 15:17:44 -0800
committerNicholas Noll <nbnoll@eml.cc>2021-12-05 15:17:44 -0800
commitb48327d357e0818d1a6ae2a064cfa7d1567e1242 (patch)
tree4677f228a9846937a7ec71c72a1ab63ab69d68ab /src/base/fs/read.c
parentc200dd832789afa298ba45e0b9efdec96c0e92cc (diff)
feat(huge): huge refactor (in progress).
Commented out libc includes to uncover all explicit dependencies. A large fraction has now been ported over (no testing). I did not port over the command line tools, such as the rc shell. These will be done independently - as of now I just want the library to stand independent. Compilation currently fails due to the lack of math functions.
Diffstat (limited to 'src/base/fs/read.c')
-rw-r--r--src/base/fs/read.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/base/fs/read.c b/src/base/fs/read.c
new file mode 100644
index 0000000..7e60823
--- /dev/null
+++ b/src/base/fs/read.c
@@ -0,0 +1,25 @@
+#include <u.h>
+#include <base.h>
+#include <sys.h>
+
+int
+fs·read(fs·Directory *dir, fs·DirEntry **ent)
+{
+ int err;
+ uintptr n;
+
+ fs·DirEntry *de;
+ if(dir->pos >= dir->end){
+ if((err=sys·direntry(dir->fd, arrlen(dir->buf), dir->buf, &n)))
+ return err;
+ dir->pos = 0;
+ dir->end = n;
+ }
+
+ de = (fs·DirEntry *)(dir->buf + dir->pos);
+ dir->pos += de->len;
+ dir->off = de->off;
+
+ *ent = de;
+ return 0;
+}