GitOS
Operating system exercise
Loading...
Searching...
No Matches
file.h
Go to the documentation of this file.
1#pragma once
2
3#include <stdint.h>
4#include "drivers/disk/disk.h"
5#include "Path.hpp"
6
7#define MAX_FILESYSTEMS 12
8#define MAX_FILEDESCRIPTORS 1024
9#define MAX_FILESYSTEM_NAME 20
10#define MAX_MOUNTED 16384
11
12typedef unsigned int FILE_SEEK_MODE;
13typedef unsigned int FILE_MODE;
14typedef unsigned int FILE_STAT_FLAGS;
15
36
44
46{
47 FILE_STAT_READ_ONLY = 0b00000001,
48 FILE_STAT_FOLDER = 0b00000010
49};
50
58
60{
62 uint32_t filesize;
63};
64
65typedef int (*FS_RESOLVE_FUNCTION)(struct disk* disk);
66typedef void* (*FS_OPEN_FUNCTION)(void* private_fs, struct path_part* path, FILE_MODE mode);
67typedef int (*FS_READ_FUNCTION)(void* private_fs, void* descriptor, uint32_t size, uint32_t nmemb, char* out);
68typedef int (*FS_SEEK_FUNCTION)(void* private_fs, uint32_t offset, FILE_SEEK_MODE seek_mode);
69typedef int (*FS_STAT_FUNCTION)(void* private_fs, struct file_stat* stat);
70typedef int (*FS_CLOSE_FUNCTION)(void* private_fs);
71typedef int (*FS_WRITE_FUNCTION)(void* private_fs, void* descriptor, uint32_t size, uint32_t nmemb, char* in);
72
73
86
87void fs_init();
89struct filesystem* fs_resolve(struct disk* disk);
90
91int fopen(const char* filename, const char* mode);
92int fread(void* ptr, uint32_t size, uint32_t nmemb, int fd);
93int fwrite(void* ptr, uint32_t size, uint32_t nmemb, int fd);
94int fseek(int fd, int offset, FILE_SEEK_MODE whence);
95int fstat(int fd, struct file_stat* stat);
96int fclose(int fd);
97
99 const char* filename;
100 struct filesystem* fs;
101 void* data;
102};
103
104void mount(const char* filename, struct filesystem* fs, void* data);
uint32_t offset
Definition BMPFile.hpp:3
uint8_t filename[8]
Definition fat16.h:0
uint16_t size
Definition gdt.h:0
FILE_SEEK_MODES
Definition file.h:17
@ SEEK_END
Absolute position from the end of file.
Definition file.h:34
@ SEEK_SET
Absolute position from 0.
Definition file.h:22
@ SEEK_CUR
Relative position.
Definition file.h:28
void fs_insert_filesystem(struct filesystem *filesystem)
Inserts filesystem struct into internal array.
Definition file.c:101
int(* FS_RESOLVE_FUNCTION)(struct disk *disk)
Definition file.h:65
int fstat(int fd, struct file_stat *stat)
Returns file status.
Definition file.c:317
int(* FS_STAT_FUNCTION)(void *private_fs, struct file_stat *stat)
Definition file.h:69
void mount(const char *filename, struct filesystem *fs, void *data)
Definition file.c:343
unsigned int FILE_STAT_FLAGS
Definition file.h:14
int fseek(int fd, int offset, FILE_SEEK_MODE whence)
Seeks into file.
Definition file.c:301
int(* FS_CLOSE_FUNCTION)(void *private_fs)
Definition file.h:70
int fclose(int fd)
Closes file descriptor.
Definition file.c:332
int(* FS_READ_FUNCTION)(void *private_fs, void *descriptor, uint32_t size, uint32_t nmemb, char *out)
Definition file.h:67
int fwrite(void *ptr, uint32_t size, uint32_t nmemb, int fd)
Writes to file.
Definition file.c:282
int(* FS_WRITE_FUNCTION)(void *private_fs, void *descriptor, uint32_t size, uint32_t nmemb, char *in)
Definition file.h:71
struct filesystem * fs_resolve(struct disk *disk)
Resolves filesystem for given disk.
Definition file.c:134
void *(* FS_OPEN_FUNCTION)(void *private_fs, struct path_part *path, FILE_MODE mode)
Definition file.h:66
unsigned int FILE_MODE
Definition file.h:13
int fopen(const char *filename, const char *mode)
Opens file.
Definition file.c:181
int(* FS_SEEK_FUNCTION)(void *private_fs, uint32_t offset, FILE_SEEK_MODE seek_mode)
Definition file.h:68
FILE_STAT_FLAGS_ENUM
Definition file.h:46
@ FILE_STAT_READ_ONLY
Definition file.h:47
@ FILE_STAT_FOLDER
Definition file.h:48
unsigned int FILE_SEEK_MODE
Definition file.h:12
#define MAX_FILESYSTEM_NAME
Definition file.h:9
void fs_init()
Initializes internal filesystem arrays.
Definition file.c:121
FILE_OPEN_MODES
Definition file.h:38
@ FILE_MODE_WRITE
Definition file.h:40
@ FILE_MODE_INVALID
Definition file.h:42
@ FILE_MODE_READ
Definition file.h:39
@ FILE_MODE_APPEND
Definition file.h:41
int fread(void *ptr, uint32_t size, uint32_t nmemb, int fd)
Reads from file.
Definition file.c:263
Definition disk.h:19
Definition file.h:52
struct filesystem * filesystem
Definition file.h:54
int index
Definition file.h:53
void * private_fs_descriptor
Definition file.h:55
void * private_fs
Definition file.h:56
Definition file.h:60
uint32_t filesize
Definition file.h:62
FILE_STAT_FLAGS flags
Definition file.h:61
Definition file.h:75
FS_SEEK_FUNCTION seek
Definition file.h:79
char name[MAX_FILESYSTEM_NAME]
Definition file.h:84
FS_STAT_FUNCTION stat
Definition file.h:80
FS_WRITE_FUNCTION write
Definition file.h:82
FS_OPEN_FUNCTION open
Definition file.h:77
FS_RESOLVE_FUNCTION resolve
Definition file.h:76
FS_CLOSE_FUNCTION close
Definition file.h:81
FS_READ_FUNCTION read
Definition file.h:78
Definition file.h:98
void * data
Definition file.h:101
const char * filename
Definition file.h:99
struct filesystem * fs
Definition file.h:100
Definition Path.hpp:12
uint32_t fs
Definition tss.h:22
unsigned int FILE_STAT_FLAGS
Definition file.h:11
uint8_t * data
Definition window.h:0