123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- /******************************************************************************
- * MiniFFS : Mini Flat File System
- * miniffs.h: MiniFFS main header
- *
- * Copyright (c) 2008-2022 986-Studio. All rights reserved.
- *
- ******************************************************************************/
- #ifndef MINIFFS_H
- #define MINIFFS_H
- #include <stdint.h>
- /*
- * The pack(1) may not be needed, but better be safe than sorry to
- * have a consistent binary representation across architectures
- */
- #pragma pack(1)
- typedef struct fileentry_t
- {
- char name[8];
- char ext[3];
- uint32_t size;
- uint32_t offset;
- } fileentry_t;
- typedef struct miniffs_header_t
- {
- uint32_t magic;
- uint32_t entry_count;
- fileentry_t fent[];
- } miniffs_header_t;
- #pragma pack()
- #if BUILD_PLATFORM_MEMORY
- #include <platform/memory.h>
- #elif BUILD_PLATFORM_FILE
- #include <platform/file.h>
- #else
- #error Unknown build target.
- #endif
- /* Somewhat similar structure to the plain C FILE structure */
- typedef struct file_t
- {
- void *private;
- fileentry_t *fent; /***< file linked to this structure */
- uint32_t offset; /***< current position in the file */
- } file_t;
- #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
- #define MAKE4(_a, _b, _c, _d) (((_a) & 0xFF) << 24) | (((_b) & 0xFF) << 16) | (((_c) & 0xFF) << 8) | ((_d) & 0xFF)
- #else
- #define MAKE4(_d, _c, _b, _a) (((_a) & 0xFF) << 24) | (((_b) & 0xFF) << 16) | (((_c) & 0xFF) << 8) | ((_d) & 0xFF)
- #endif
- #define MINIFFS_MAGIC MAKE4('M', 'F', 'F', 'S')
- enum {
- MFFS_SEEK_SET, /***< Seek from beginning of file */
- MFFS_SEEK_CUR, /***< Seek from current position */
- MFFS_SEEK_END /***< Seek from end of file */
- };
- /*
- * Public functions used reading the filesystem
- * This implementation is system dependant as it relly on how the memory is architectured and where the MiniFFS is stored.
- */
- /* miniffs_openfs is backend specific and will be found in the backend header file */
- file_t *miniffs_open(miniffs_t *fs, char *filename); /***< Open a file */
- int miniffs_close(file_t *file); /***< Close a file */
- void *miniffs_map(file_t *file); /***< Map a file to memory */
- int miniffs_read(void *ptr, size_t size, size_t nmemb, file_t *file); /***< Read bytes from a file */
- int miniffs_seek(file_t *file, size_t offset, int whence); /***< Set position in a file */
- size_t miniffs_tell(file_t *file); /***< Get current position in a file*/
- typedef enum miniffs_error_t
- {
- MINIFFS_NOERROR = 0,
- MINIFFS_INVALID_FS,
- MINIFFS_FILE_NOT_FOUND,
- //MINIFFS_,
- } miniffs_error_t;
- miniffs_error_t miniffs_geterror(); /***< Return last error */
- #ifdef BUILD_HOST_TOOLS
- /*
- * Functions used for offline creation of the filesystem
- */
- miniffs_t *miniffs_createfs();
- int miniffs_addfile(miniffs_t *fs, char *name, char *ext, char *host_path);
- int miniffs_delfile(miniffs_t *fs, char *name, char *ext, char *host_path);
- int miniffs_writeimage(miniffs_t *fs, char *host_path);
- int miniffs_closefs(miniffs_t *fs);
- #endif /* BUILD_HOST_TOOLS */
- #ifdef __miniffs_internal
- /*
- * Function that are private to the library
- */
- int miniffs_checkfs(miniffs_t *fs);
- fileentry_t *miniffs_findfile(miniffs_t *fs, char *filename);
- #endif /* __miniffs_internal */
- #endif /* MINIFFS_H */
|