fygue: support close() primitive for file

This commit is contained in:
Yann MAGNIN 2025-04-05 17:05:33 +02:00
parent b1b4e8a287
commit 20cb87c0c1
No known key found for this signature in database
GPG key ID: D82629D933EADC59
7 changed files with 51 additions and 1 deletions

View file

@ -270,12 +270,14 @@ set(SOURCES
src/fs/fygue/fygue_dir_close.c
src/fs/fygue/fygue_file_lseek.c
src/fs/fygue/fygue_file_write.c
src/fs/fygue/fygue_file_close.c
src/fs/fygue/fat/cluster.c
src/fs/fygue/fat/initialize.c
src/fs/fygue/fat/fat_dir_read.c
src/fs/fygue/fat/fat_dir_close.c
src/fs/fygue/fat/fat_dir_stat.c
src/fs/fygue/fat/fat_file_stat.c
src/fs/fygue/fat/fat_file_close.c
src/fs/fygue/fat/resolve.c
src/fs/fygue/fat/sector.c
src/fs/fygue/flash/cluster.c

View file

@ -152,6 +152,12 @@ extern int fygue_fat_file_stat(
struct stat *statbuf
);
/* fygue_fat_file_close(): closedir primitive */
extern int fygue_fat_file_close(
struct fygue_fat *fat,
struct fygue_fat_file *dir
);
//---
// Cluster interface
//---

View file

@ -1,3 +1,4 @@
#include <string.h>
#include "fat.h"
/* fygue_fat_dir_close(): closedir primitive */
@ -6,6 +7,7 @@ int fygue_fat_dir_close(struct fygue_fat *fat, struct fygue_fat_dir *dir)
if (fat == NULL || dir == NULL)
return -1;
// nothing to do here...
memset(dir, 0x00, sizeof(struct fygue_fat_file));
return 0;
}

View file

@ -0,0 +1,14 @@
#include <string.h>
#include <stdlib.h>
#include "fat.h"
/* fygue_fat_file_close(): close primitive */
int fygue_fat_file_close(struct fygue_fat *fat, struct fygue_fat_file *file)
{
if (fat == NULL || file == NULL)
return -1;
if (file->chunk != NULL)
free(file->chunk);
memset(file, 0x00, sizeof(struct fygue_fat_file));
return 0;
}

View file

@ -87,7 +87,7 @@ const fs_descriptor_type_t fygue_descriptor_type = {
.read = NULL,
.write = (void*)&fygue_file_write,
.lseek = (void*)&fygue_file_lseek,
.close = NULL,
.close = (void*)&fygue_file_close,
};
const fs_descriptor_type_t fygue_dir_descriptor_type = {

View file

@ -141,6 +141,9 @@ extern ssize_t fygue_file_write(
size_t size
);
/* fygue_file_close(): close directory */
extern int fygue_file_close(struct fygue_descriptor *desc);
#ifdef __cplusplus
}
#endif

View file

@ -0,0 +1,23 @@
#include <stdlib.h>
#include <string.h>
#include "fygue.h"
#include "fat/fat.h"
/* fygue_file_close(): close directory */
int fygue_file_close(struct fygue_descriptor *desc)
{
struct fygue_fsinfo *fsinfo;
ENOTSUP_IF_NOT_FYGUE(-1);
if (desc == NULL || desc->resolve.type != FYGUE_FILE_TYPE_FILE) {
errno = EBADF;
return -1;
}
if (fygue_mount(&fsinfo, true) != 0) {
errno = EIO;
return -1;
}
fygue_fat_file_close(&(fsinfo->fat), &desc->resolve.file.fat);
memset(desc, 0x00, sizeof(struct fygue_descriptor));
return 0;
}