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
8
typedef
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),
15
_FILE_OWNS_BUFFER
= (1 << 6),
16
_FILE_FULLY_BUFFERED
= (1 << 7),
17
_FILE_LINE_BUFFERED
= (1 << 8),
18
_FILE_UNBUFFERED
= (1 << 9),
19
_FILE_ERROR
= (1 << 10),
20
_FILE_WIDESTREAM
= (1 << 11),
21
_FILE_BYTESTREAM
= (1 << 12),
22
_FILE_DELETE_ON_CLOSE
= (1 << 13),
23
_FILE_EOF
= (1 << 14)
24
}
_file_flags_t
;
25
26
typedef
struct
fpos
27
{
28
uint64_t
offset
;
29
int
status
;
30
}
fpos_t
;
31
32
#define _UNGETC_MAX 64
33
typedef
struct
FILE
34
{
35
list_entry_t
entry
;
36
fd_t
fd
;
37
uint8_t
*
buf
;
38
uint64_t
bufSize
;
39
uint64_t
bufIndex
;
40
uint64_t
bufEnd
;
41
fpos_t
pos
;
42
unsigned
char
ungetBuf
[
_UNGETC_MAX
];
43
uint64_t
ungetIndex
;
44
_file_flags_t
flags
;
45
mtx_t
mtx
;
46
char
filename
[
MAX_PATH
];
47
}
FILE
;
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
57
FILE
*
_file_new
(
void
);
58
59
void
_file_free
(
FILE
* stream);
60
61
uint64_t
_file_init
(
FILE
* stream,
fd_t
fd,
_file_flags_t
flags,
void
*
buffer
,
uint64_t
bufferSize);
62
63
void
_file_deinit
(
FILE
* stream);
64
65
uint64_t
_file_flush_buffer
(
FILE
* stream);
66
67
uint64_t
_file_fill_buffer
(
FILE
* stream);
68
69
uint64_t
_file_seek
(
FILE
* stream,
int64_t
offset,
int
whence);
70
71
uint64_t
_file_prepare_read
(
FILE
* stream);
72
73
uint64_t
_file_prepare_write
(
FILE
* stream);
74
75
void
_files_init
(
void
);
76
77
void
_files_push
(
FILE
*
file
);
78
79
void
_files_remove
(
FILE
*
file
);
80
81
void
_files_close
(
void
);
82
83
uint64_t
_files_flush
(
void
);
MAX_PATH
#define MAX_PATH
Maximum length of filepaths.
Definition
MAX_PATH.h:11
fd_t
__UINT64_TYPE__ fd_t
A file descriptor.
Definition
fd_t.h:12
list.h
file
static dentry_t * file
Definition
log_file.c:17
buffer
EFI_PHYSICAL_ADDRESS buffer
Definition
mem.c:15
_file_prepare_read
uint64_t _file_prepare_read(FILE *stream)
Definition
file.c:224
_file_prepare_write
uint64_t _file_prepare_write(FILE *stream)
Definition
file.c:239
_files_flush
uint64_t _files_flush(void)
Definition
file.c:292
_file_flush_buffer
uint64_t _file_flush_buffer(FILE *stream)
Definition
file.c:158
_file_new
FILE * _file_new(void)
Definition
file.c:80
_files_close
void _files_close(void)
Definition
file.c:278
_files_push
void _files_push(FILE *file)
Definition
file.c:264
_file_free
void _file_free(FILE *stream)
Definition
file.c:92
_UNGETC_MAX
#define _UNGETC_MAX
Definition
file.h:32
_file_seek
uint64_t _file_seek(FILE *stream, int64_t offset, int whence)
Definition
file.c:202
_file_flags_parse
_file_flags_t _file_flags_parse(const char *mode)
Definition
file.c:12
_file_init
uint64_t _file_init(FILE *stream, fd_t fd, _file_flags_t flags, void *buffer, uint64_t bufferSize)
Definition
file.c:100
_file_fill_buffer
uint64_t _file_fill_buffer(FILE *stream)
Definition
file.c:177
_files_init
void _files_init(void)
Definition
file.c:254
_file_flags_t
_file_flags_t
Definition
file.h:9
_FILE_EOF
@ _FILE_EOF
Definition
file.h:23
_FILE_READ
@ _FILE_READ
Definition
file.h:10
_FILE_WIDESTREAM
@ _FILE_WIDESTREAM
Definition
file.h:20
_FILE_WRITE
@ _FILE_WRITE
Definition
file.h:11
_FILE_FULLY_BUFFERED
@ _FILE_FULLY_BUFFERED
Definition
file.h:16
_FILE_RW
@ _FILE_RW
Definition
file.h:12
_FILE_UNBUFFERED
@ _FILE_UNBUFFERED
Definition
file.h:18
_FILE_OWNS_BUFFER
@ _FILE_OWNS_BUFFER
Definition
file.h:15
_FILE_BIN
@ _FILE_BIN
Definition
file.h:14
_FILE_ERROR
@ _FILE_ERROR
Definition
file.h:19
_FILE_DELETE_ON_CLOSE
@ _FILE_DELETE_ON_CLOSE
Definition
file.h:22
_FILE_LINE_BUFFERED
@ _FILE_LINE_BUFFERED
Definition
file.h:17
_FILE_APPEND
@ _FILE_APPEND
Definition
file.h:13
_FILE_BYTESTREAM
@ _FILE_BYTESTREAM
Definition
file.h:21
_file_deinit
void _file_deinit(FILE *stream)
Definition
file.c:146
_files_remove
void _files_remove(FILE *file)
Definition
file.c:271
stdint.h
uint64_t
__UINT64_TYPE__ uint64_t
Definition
stdint.h:17
uint8_t
__UINT8_TYPE__ uint8_t
Definition
stdint.h:11
int64_t
__INT64_TYPE__ int64_t
Definition
stdint.h:16
stdio.h
FILE
Definition
file.h:34
FILE::pos
fpos_t pos
Definition
file.h:41
FILE::fd
fd_t fd
Definition
file.h:36
FILE::filename
char filename[MAX_PATH]
Definition
file.h:46
FILE::buf
uint8_t * buf
Definition
file.h:37
FILE::entry
list_entry_t entry
Definition
file.h:35
FILE::bufIndex
uint64_t bufIndex
Definition
file.h:39
FILE::bufEnd
uint64_t bufEnd
Definition
file.h:40
FILE::ungetBuf
unsigned char ungetBuf[_UNGETC_MAX]
Definition
file.h:42
FILE::bufSize
uint64_t bufSize
Definition
file.h:38
FILE::flags
_file_flags_t flags
Definition
file.h:44
FILE::mtx
mtx_t mtx
Definition
file.h:45
FILE::ungetIndex
uint64_t ungetIndex
Definition
file.h:43
fpos_t
Definition
file.h:27
fpos_t::status
int status
Definition
file.h:29
fpos_t::offset
uint64_t offset
Definition
file.h:28
list_entry_t
A entry in a doubly linked list.
Definition
list.h:38
mtx_t
Definition
threads.h:52
threads.h
src
libstd
user
common
file.h
Generated by
1.9.8