Made use of dirent support in cc65 version 2.11.
diff --git a/contiki-apple2/lib/cfs.c b/contiki-apple2/lib/cfs.c
index 0c25713..be57120 100644
--- a/contiki-apple2/lib/cfs.c
+++ b/contiki-apple2/lib/cfs.c
@@ -30,14 +30,11 @@
  * 
  * Author: Adam Dunkels <adam@sics.se>
  *
- * $Id: cfs.c,v 1.3 2005/05/08 11:44:17 oliverschmidt Exp $
+ * $Id: cfs.c,v 1.4 2006/04/09 23:28:10 oliverschmidt Exp $
  */
 
 
-#include <fcntl.h>
-#include <unistd.h>
 #include <string.h>
-#include <stdio.h>
 
 #include "contiki.h"
 #include "kfs.h"
@@ -45,61 +42,37 @@
 #include "cfs.h"
 
 
-static char cwd[FILENAME_MAX];
-
 /*---------------------------------------------------------------------------*/
 int
 cfs_opendir(struct cfs_dir *dirp, const char *name)
 {
-  if(strcmp(name, ".") == 0) {
-    name = getcwd(cwd, sizeof(cwd));
-  }
   if(strcmp(name, "/") == 0) {
     name = kfs_getdir();
   }
 
-  if((dirp->fd = cfs_open(name, CFS_READ)) != -1) {
-    if(cfs_read(dirp->fd,
-		dirp->block.bytes,
-		sizeof(dirp->block)) == sizeof(dirp->block)) {
-      dirp->entry_length      = dirp->block.bytes[0x23];
-      dirp->entries_per_block = dirp->block.bytes[0x24];
-      dirp->current_entry     = 1;
-      return 0;
-    }
-    cfs_close(dirp->fd);
+  dirp->dir = opendir(name);
+  if(dirp->dir == NULL) {
+    return -1;
   }
-  return -1;
+  return 0;
 }
 /*---------------------------------------------------------------------------*/
 int
-cfs_readdir(struct cfs_dir *dirp, struct cfs_dirent *dirent)
+cfs_readdir(struct cfs_dir *dirp, struct cfs_dirent *direntp)
 {
-  char *entry;
+  struct dirent *dirent = readdir(dirp->dir);
+  if(dirent == NULL) {
+    return -1;
+  }
 
-  do {
-    if(dirp->current_entry == dirp->entries_per_block) {
-      if(cfs_read(dirp->fd,
-		  dirp->block.bytes,
-		  sizeof(dirp->block)) != sizeof(dirp->block)) {
-	return -1;
-      }
-      dirp->current_entry = 0;
-    }
-    entry = dirp->block.content.entries +
-	    dirp->current_entry * dirp->entry_length;
-    ++dirp->current_entry;
-  } while (entry[0x00] == 0);
-
-  entry[0x01 + (entry[0x00] & 15)] = '\0';
-  strcpy(dirent->name, &entry[0x01]);
-  dirent->size = *(unsigned int *)&entry[0x13];
+  strcpy(direntp->name, dirent->d_name);
+  direntp->size = 0;
   return 0;
 }
 /*---------------------------------------------------------------------------*/
 int
 cfs_closedir(struct cfs_dir *dirp)
 {
-  return cfs_close(dirp->fd);
+  return closedir(dirp->dir);
 }
 /*---------------------------------------------------------------------------*/
diff --git a/contiki-apple2/lib/cfs.h b/contiki-apple2/lib/cfs.h
index d4f182b..bae94c5 100644
--- a/contiki-apple2/lib/cfs.h
+++ b/contiki-apple2/lib/cfs.h
@@ -30,13 +30,14 @@
  * 
  * Author: Adam Dunkels <adam@sics.se>
  *
- * $Id: cfs.h,v 1.3 2005/04/18 21:41:07 oliverschmidt Exp $
+ * $Id: cfs.h,v 1.4 2006/04/09 23:28:10 oliverschmidt Exp $
  */
 #ifndef __CFS_H__
 #define __CFS_H__
 
 #include <fcntl.h>
 #include <unistd.h>
+#include <dirent.h>
 
 #define CFS_READ  (O_RDONLY)
 #define CFS_WRITE (O_WRONLY | O_CREAT | O_TRUNC)
@@ -47,18 +48,7 @@
 #define cfs_write write
 
 struct cfs_dir {
-  int fd;
-  unsigned char entry_length;
-  unsigned char entries_per_block;
-  unsigned char current_entry;
-  union {
-    unsigned char bytes[512];
-    struct {
-      unsigned prev_block;
-      unsigned next_block;
-      char entries[1];
-    } content;
-  } block;
+  DIR *dir;
 };
 
 struct cfs_dirent {
@@ -67,7 +57,7 @@
 };
 
 int cfs_opendir(struct cfs_dir *dirp, const char *name);
-int cfs_readdir(struct cfs_dir *dirp, struct cfs_dirent *dirent);
+int cfs_readdir(struct cfs_dir *dirp, struct cfs_dirent *direntp);
 int cfs_closedir(struct cfs_dir *dirp);
 
 #endif /* __CFS_H__ */