diff --git a/f256lib/file.c b/f256lib/file.c index 4ed5de3..0a58c77 100644 --- a/f256lib/file.c +++ b/f256lib/file.c @@ -63,20 +63,19 @@ void fileClose(uint8_t *fd) { #pragma push_macro("close") #undef close -int16_t fileCloseDir(fileDirT *dir) { +int16_t fileCloseDir(char *dir) { if (!dir) return -1; for (;;) { - if (*dir->stream) { - kernelArgs->directory.close.stream = *dir->stream; + if (*dir) { + kernelArgs->directory.close.stream = *dir; kernelCall(Directory.Close); if (!kernelError) { - *dir->stream = 0; + *dir = 0; } } kernelNextEvent(); if (kernelEventData.type == kernelEvent(directory.CLOSED)) { - free(dir); dir = NULL; return 0; } @@ -125,10 +124,10 @@ int16_t *fileOpen(char *fname, char *mode) { } -fileDirT *fileOpenDir(char *name) { - char drive; - char stream; - fileDirT *dir; +char *fileOpenDir(char *name) { + char drive; + char stream; + char *dir; name = pathWithoutDrive(name, &drive); @@ -148,8 +147,7 @@ fileDirT *fileOpenDir(char *name) { } _dirStream[drive] = stream; - dir = (fileDirT *)malloc(sizeof(fileDirT)); - dir->stream = &_dirStream[drive]; + dir = &_dirStream[drive]; return dir; } @@ -175,13 +173,13 @@ int16_t fileRead(void *buf, uint16_t nbytes, uint16_t nmemb, uint8_t *fd) { #pragma push_macro("FILE") #undef EOF #undef FILE -fileDirEntT *fileReadDir(fileDirT *dir) { +fileDirEntT *fileReadDir(char *dir) { static fileDirEntT dirent; uint16_t len; if (!dir) return NULL; - kernelArgs->directory.read.stream = *dir->stream; + kernelArgs->directory.read.stream = *dir; kernelCall(Directory.Read); if (kernelError) return NULL; @@ -203,7 +201,7 @@ fileDirEntT *fileReadDir(fileDirT *dir) { case kernelEvent(directory.FREE): // dirent doesn't care about these types of records. - kernelArgs->directory.read.stream = *dir->stream; + kernelArgs->directory.read.stream = *dir; kernelCall(Directory.Read); if (!kernelError) continue; // Fall through. diff --git a/f256lib/file.h b/f256lib/file.h index bc090c5..7d8a662 100644 --- a/f256lib/file.h +++ b/f256lib/file.h @@ -34,10 +34,6 @@ extern "C" #include "f256.h" -typedef struct fileDirS { - char *stream; -} fileDirT; - typedef struct fileDirEntS { unsigned char d_blocks; unsigned char d_type; @@ -46,11 +42,11 @@ typedef struct fileDirEntS { void fileClose(uint8_t *fd); -int16_t fileCloseDir(fileDirT *dir); +int16_t fileCloseDir(char *dir); int16_t *fileOpen(char *fname, char *mode); -fileDirT *fileOpenDir(char *name); +char *fileOpenDir(char *name); int16_t fileRead(void *buf, uint16_t nbytes, uint16_t nmemb, uint8_t *fd); -fileDirEntT *fileReadDir(fileDirT *dir); +fileDirEntT *fileReadDir(char *dir); int16_t fileRename(char *name, char *to); void fileReset(void); int16_t fileSeek(uint8_t *fd, uint32_t offset, uint8_t whence); @@ -68,7 +64,7 @@ int16_t fileWrite(void *buf, uint16_t nbytes, uint16_t nmemb, uint8_t *fd); #ifndef DIR #define close fileClose #define closedir fileCloseDir -#define DIR fileDirT +#define DIR char #define dirent fileDirEntS #define FILE uint8_t #define fopen fileOpen