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);
}
/*---------------------------------------------------------------------------*/