chiark / gitweb /
[PATCH] remove my test code
[elogind.git] / klibc / klibc / readdir.c
index bb216a19516a83b390ecd85da1bf424c54ee4629..acfe588713fd904aeed160b686d3a1d3e1579b84 100644 (file)
@@ -1,21 +1,12 @@
 /*
- * opendir/readdir/closedir
+ * readdir.c: opendir/readdir/closedir
  */
 
 #include <unistd.h>
 #include <fcntl.h>
 #include <stdlib.h>
-#include <sys/dirent.h>
-#include <stdio.h>
-
-#define __IO_DIR_DEFINED
-struct _IO_dir {
-  int fd;
-  size_t bytes_left;
-  struct dirent *next;
-  struct dirent buffer[15];    /* 15 times max dirent size =~ 4K */
-};
 
+#define __KLIBC_DIRENT_INTERNALS
 #include <dirent.h>
 
 DIR *opendir(const char *name)
@@ -25,9 +16,9 @@ DIR *opendir(const char *name)
   if ( !dp )
     return NULL;
 
-  dp->fd = open(name, O_DIRECTORY|O_RDONLY);
+  dp->__fd = open(name, O_DIRECTORY|O_RDONLY);
 
-  if ( dp->fd < 0 ) {
+  if ( dp->__fd < 0 ) {
     free(dp);
     return NULL;
   }
@@ -43,7 +34,7 @@ struct dirent *readdir(DIR *dir)
   int rv;
   
   if ( !dir->bytes_left ) {
-    rv = getdents(dir->fd, dir->buffer, sizeof(dir->buffer));
+    rv = getdents(dir->__fd, dir->buffer, sizeof(dir->buffer));
     if ( rv <= 0 )
       return NULL;
     dir->bytes_left = rv;
@@ -51,7 +42,7 @@ struct dirent *readdir(DIR *dir)
   }
 
   dent = dir->next;
-  ((char *)dir->next) += dent->d_reclen;
+  dir->next = (struct dirent *)((char *)dir->next + dent->d_reclen);
   dir->bytes_left -= dent->d_reclen;
   
   return dent;
@@ -60,7 +51,7 @@ struct dirent *readdir(DIR *dir)
 int closedir(DIR *dir)
 {
   int rv;
-  rv = close(dir->fd);
+  rv = close(dir->__fd);
   free(dir);
   return rv;
 }