Removed a malloc and struct from file dir operations.

This commit is contained in:
Scott Duensing 2024-01-24 16:47:38 -06:00
parent e02b83d827
commit 4e79b9567d
2 changed files with 16 additions and 22 deletions

View file

@ -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.

View file

@ -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