commit 0765cb8f789b030e8a14f03f3d28b65db494438b
parent 453d223557956eceffe11d44d214fcd7b90051a9
Author: Dimitris Papastamos <dimitris.papastamos@arm.com>
Date: Mon, 18 Feb 2019 15:17:55 +0000
Add p9 dir handling code
This was missed in an earlier patch.
Change-Id: I74f7a183f4cd1a6b4498e06ac649eab589cbe302
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>
Diffstat:
3 files changed, 49 insertions(+), 0 deletions(-)
diff --git a/src/lib9p/p9closedir.c b/src/lib9p/p9closedir.c
@@ -0,0 +1,8 @@
+#include <rcode/9p.h>
+#include <rcode/rcode.h>
+
+int
+p9closedir(DIR *dir)
+{
+ return close(dir->fd);
+}
diff --git a/src/lib9p/p9opendir.c b/src/lib9p/p9opendir.c
@@ -0,0 +1,20 @@
+#include <errno.h>
+
+#include <rcode/9p.h>
+#include <rcode/rcode.h>
+
+DIR *
+p9opendir(DIR *dir, const char *name)
+{
+ int fd;
+
+ if ((fd = open(name, O_READ)) < 0) {
+ errno = ENOENT;
+ return NULL;
+ }
+ dir->fd = fd;
+
+ /* TODO: check that it is actually a directory */
+
+ return dir;
+}
diff --git a/src/lib9p/p9readdir.c b/src/lib9p/p9readdir.c
@@ -0,0 +1,21 @@
+#include <string.h>
+
+#include <rcode/9p.h>
+#include <rcode/rcode.h>
+
+struct dirent *
+p9readdir(DIR *dir)
+{
+ int n;
+ Dir dentry;
+
+ if ((n = read(dir->fd, dir->buf, sizeof(dir->buf))) < 0)
+ return NULL;
+
+ if (p9todir(&dentry, dir->buf, n) < 0)
+ return NULL;
+
+ strcpy(dir->ent.d_name, dentry.name);
+
+ return &dir->ent;
+}