summaryrefslogtreecommitdiffstats
path: root/src/lib9/dirread.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib9/dirread.c')
-rw-r--r--src/lib9/dirread.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/lib9/dirread.c b/src/lib9/dirread.c
index ab9ec7f5..1e479fe4 100644
--- a/src/lib9/dirread.c
+++ b/src/lib9/dirread.c
@@ -6,19 +6,39 @@
extern int _p9dir(struct stat*, char*, Dir*, char**, char*);
-/* almost everyone has getdirentries, just use that */
+#if defined(__linux__)
static int
-mygetdents(int fd, char *buf, int n)
+mygetdents(int fd, struct dirent *buf, int n)
+{
+ ssize_t nn;
+ off_t off;
+
+ off = p9seek(fd, 0, 1);
+ nn = getdirentries(fd, (void*)buf, n, &off);
+ if(nn > 0)
+ p9seek(fd, off, 0);
+ return nn;
+}
+#elif defined(__APPLE__) || defined(__FreeBSD__)
+static int
+mygetdents(int fd, struct dirent *buf, int n)
{
ssize_t nn;
long off;
off = p9seek(fd, 0, 1);
- nn = getdirentries(fd, buf, n, &off);
+ nn = getdirentries(fd, (void*)buf, n, &off);
if(nn > 0)
p9seek(fd, off, 0);
return nn;
}
+#elif defined(__sun__)
+static int
+mygetdents(int fd, struct dirent *buf, int n)
+{
+ return getdents(fd, (void*)buf, n);
+}
+#endif
static int
countde(char *p, int n)