aboutsummaryrefslogtreecommitdiff
path: root/src/base/fs/read.c
diff options
context:
space:
mode:
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;
+}