PatchworkOS
Loading...
Searching...
No Matches
file.h
Go to the documentation of this file.
1#pragma once
2
3#include <stdint.h>
4#include <stdio.h>
5#include <sys/list.h>
6#include <threads.h>
7
8typedef enum
9{
10 _FILE_READ = (1 << 0),
11 _FILE_WRITE = (1 << 2),
12 _FILE_RW = (1 << 3),
13 _FILE_APPEND = (1 << 4),
14 _FILE_BIN = (1 << 5),
18 _FILE_UNBUFFERED = (1 << 9),
19 _FILE_ERROR = (1 << 10),
20 _FILE_WIDESTREAM = (1 << 11),
21 _FILE_BYTESTREAM = (1 << 12),
23 _FILE_EOF = (1 << 14)
25
26typedef struct fpos
27{
29 int status;
30} fpos_t;
31
32#define _UNGETC_MAX 64
48
49#define _FILE_GETC(stream) \
50 (((stream)->ungetIndex == 0) ? (unsigned char)(stream)->buf[(stream)->bufIndex++] \
51 : (unsigned char)(stream)->ungetBuf[--(stream)->ungetIndex])
52
53#define _FILE_CHECK_AVAIL(fh) (((fh->bufIndex == fh->bufEnd) && (fh->ungetIndex == 0)) ? _file_fill_buffer(fh) : 0)
54
55_file_flags_t _file_flags_parse(const char* mode);
56
57FILE* _file_new(void);
58
59void _file_free(FILE* stream);
60
61uint64_t _file_init(FILE* stream, fd_t fd, _file_flags_t flags, void* buffer, uint64_t bufferSize);
62
63void _file_deinit(FILE* stream);
64
66
68
69uint64_t _file_seek(FILE* stream, int64_t offset, int whence);
70
72
74
75void _files_init(void);
76
77void _files_push(FILE* file);
78
80
81void _files_close(void);
82
#define MAX_PATH
Maximum length of filepaths.
Definition MAX_PATH.h:11
__UINT64_TYPE__ fd_t
A file descriptor.
Definition fd_t.h:12
static dentry_t * file
Definition log_file.c:17
EFI_PHYSICAL_ADDRESS buffer
Definition mem.c:15
uint64_t _file_prepare_read(FILE *stream)
Definition file.c:224
uint64_t _file_prepare_write(FILE *stream)
Definition file.c:239
uint64_t _files_flush(void)
Definition file.c:292
uint64_t _file_flush_buffer(FILE *stream)
Definition file.c:158
FILE * _file_new(void)
Definition file.c:80
void _files_close(void)
Definition file.c:278
void _files_push(FILE *file)
Definition file.c:264
void _file_free(FILE *stream)
Definition file.c:92
#define _UNGETC_MAX
Definition file.h:32
uint64_t _file_seek(FILE *stream, int64_t offset, int whence)
Definition file.c:202
_file_flags_t _file_flags_parse(const char *mode)
Definition file.c:12
uint64_t _file_init(FILE *stream, fd_t fd, _file_flags_t flags, void *buffer, uint64_t bufferSize)
Definition file.c:100
uint64_t _file_fill_buffer(FILE *stream)
Definition file.c:177
void _files_init(void)
Definition file.c:254
_file_flags_t
Definition file.h:9
@ _FILE_EOF
Definition file.h:23
@ _FILE_READ
Definition file.h:10
@ _FILE_WIDESTREAM
Definition file.h:20
@ _FILE_WRITE
Definition file.h:11
@ _FILE_FULLY_BUFFERED
Definition file.h:16
@ _FILE_RW
Definition file.h:12
@ _FILE_UNBUFFERED
Definition file.h:18
@ _FILE_OWNS_BUFFER
Definition file.h:15
@ _FILE_BIN
Definition file.h:14
@ _FILE_ERROR
Definition file.h:19
@ _FILE_DELETE_ON_CLOSE
Definition file.h:22
@ _FILE_LINE_BUFFERED
Definition file.h:17
@ _FILE_APPEND
Definition file.h:13
@ _FILE_BYTESTREAM
Definition file.h:21
void _file_deinit(FILE *stream)
Definition file.c:146
void _files_remove(FILE *file)
Definition file.c:271
__UINT64_TYPE__ uint64_t
Definition stdint.h:17
__UINT8_TYPE__ uint8_t
Definition stdint.h:11
__INT64_TYPE__ int64_t
Definition stdint.h:16
Definition file.h:34
fpos_t pos
Definition file.h:41
fd_t fd
Definition file.h:36
char filename[MAX_PATH]
Definition file.h:46
uint8_t * buf
Definition file.h:37
list_entry_t entry
Definition file.h:35
uint64_t bufIndex
Definition file.h:39
uint64_t bufEnd
Definition file.h:40
unsigned char ungetBuf[_UNGETC_MAX]
Definition file.h:42
uint64_t bufSize
Definition file.h:38
_file_flags_t flags
Definition file.h:44
mtx_t mtx
Definition file.h:45
uint64_t ungetIndex
Definition file.h:43
Definition file.h:27
int status
Definition file.h:29
uint64_t offset
Definition file.h:28
A entry in a doubly linked list.
Definition list.h:38