mirror of https://github.com/ventoy/Ventoy
147 lines
4.6 KiB
C
147 lines
4.6 KiB
C
#ifndef __FAT_FILELIB_H__
|
|
#define __FAT_FILELIB_H__
|
|
|
|
#include "fat_opts.h"
|
|
#include "fat_access.h"
|
|
#include "fat_list.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Defines
|
|
//-----------------------------------------------------------------------------
|
|
#ifndef SEEK_CUR
|
|
#define SEEK_CUR 1
|
|
#endif
|
|
|
|
#ifndef SEEK_END
|
|
#define SEEK_END 2
|
|
#endif
|
|
|
|
#ifndef SEEK_SET
|
|
#define SEEK_SET 0
|
|
#endif
|
|
|
|
#ifndef EOF
|
|
#define EOF (-1)
|
|
#endif
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Structures
|
|
//-----------------------------------------------------------------------------
|
|
struct sFL_FILE;
|
|
|
|
struct cluster_lookup
|
|
{
|
|
uint32 ClusterIdx;
|
|
uint32 CurrentCluster;
|
|
};
|
|
|
|
typedef struct sFL_FILE
|
|
{
|
|
uint32 parentcluster;
|
|
uint32 startcluster;
|
|
uint32 bytenum;
|
|
uint32 filelength;
|
|
int filelength_changed;
|
|
char path[FATFS_MAX_LONG_FILENAME];
|
|
char filename[FATFS_MAX_LONG_FILENAME];
|
|
uint8 shortfilename[11];
|
|
|
|
#ifdef FAT_CLUSTER_CACHE_ENTRIES
|
|
uint32 cluster_cache_idx[FAT_CLUSTER_CACHE_ENTRIES];
|
|
uint32 cluster_cache_data[FAT_CLUSTER_CACHE_ENTRIES];
|
|
#endif
|
|
|
|
// Cluster Lookup
|
|
struct cluster_lookup last_fat_lookup;
|
|
|
|
// Read/Write sector buffer
|
|
uint8 file_data_sector[FAT_SECTOR_SIZE];
|
|
uint32 file_data_address;
|
|
int file_data_dirty;
|
|
|
|
// File fopen flags
|
|
uint8 flags;
|
|
#define FILE_READ (1 << 0)
|
|
#define FILE_WRITE (1 << 1)
|
|
#define FILE_APPEND (1 << 2)
|
|
#define FILE_BINARY (1 << 3)
|
|
#define FILE_ERASE (1 << 4)
|
|
#define FILE_CREATE (1 << 5)
|
|
|
|
struct fat_node list_node;
|
|
} FL_FILE;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Prototypes
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// External
|
|
void fl_init(void);
|
|
void fl_attach_locks(void (*lock)(void), void (*unlock)(void));
|
|
int fl_attach_media(fn_diskio_read rd, fn_diskio_write wr);
|
|
void fl_shutdown(void);
|
|
|
|
// Standard API
|
|
void* fl_fopen(const char *path, const char *modifiers);
|
|
void fl_fclose(void *file);
|
|
int fl_fflush(void *file);
|
|
int fl_fgetc(void *file);
|
|
char * fl_fgets(char *s, int n, void *f);
|
|
int fl_fputc(int c, void *file);
|
|
int fl_fputs(const char * str, void *file);
|
|
int fl_fwrite(const void * data, int size, int count, void *file );
|
|
int fl_fread(void * data, int size, int count, void *file );
|
|
int fl_fseek(void *file , long offset , int origin );
|
|
int fl_fgetpos(void *file , uint32 * position);
|
|
long fl_ftell(void *f);
|
|
int fl_feof(void *f);
|
|
int fl_remove(const char * filename);
|
|
|
|
// Equivelant dirent.h
|
|
typedef struct fs_dir_list_status FL_DIR;
|
|
typedef struct fs_dir_ent fl_dirent;
|
|
|
|
FL_DIR* fl_opendir(const char* path, FL_DIR *dir);
|
|
int fl_readdir(FL_DIR *dirls, fl_dirent *entry);
|
|
int fl_closedir(FL_DIR* dir);
|
|
|
|
// Extensions
|
|
void fl_listdirectory(const char *path);
|
|
int fl_createdirectory(const char *path);
|
|
int fl_is_dir(const char *path);
|
|
|
|
int fl_format(uint32 volume_sectors, const char *name);
|
|
|
|
// Test hooks
|
|
#ifdef FATFS_INC_TEST_HOOKS
|
|
struct fatfs* fl_get_fs(void);
|
|
#endif
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Stdio file I/O names
|
|
//-----------------------------------------------------------------------------
|
|
#ifdef USE_FILELIB_STDIO_COMPAT_NAMES
|
|
|
|
#define FILE FL_FILE
|
|
|
|
#define fopen(a,b) fl_fopen(a, b)
|
|
#define fclose(a) fl_fclose(a)
|
|
#define fflush(a) fl_fflush(a)
|
|
#define fgetc(a) fl_fgetc(a)
|
|
#define fgets(a,b,c) fl_fgets(a, b, c)
|
|
#define fputc(a,b) fl_fputc(a, b)
|
|
#define fputs(a,b) fl_fputs(a, b)
|
|
#define fwrite(a,b,c,d) fl_fwrite(a, b, c, d)
|
|
#define fread(a,b,c,d) fl_fread(a, b, c, d)
|
|
#define fseek(a,b,c) fl_fseek(a, b, c)
|
|
#define fgetpos(a,b) fl_fgetpos(a, b)
|
|
#define ftell(a) fl_ftell(a)
|
|
#define feof(a) fl_feof(a)
|
|
#define remove(a) fl_remove(a)
|
|
#define mkdir(a) fl_createdirectory(a)
|
|
#define rmdir(a) 0
|
|
|
|
#endif
|
|
|
|
#endif
|