-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathread_entire_file.c
42 lines (36 loc) · 1.07 KB
/
read_entire_file.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
bool file_exists(char* file_name) {
FILE* file_handle = fopen(file_name, "rb");
if (file_handle) {
fclose(file_handle);
return 1;
}
return 0;
}
size_t get_file_size(char* file_name) {
FILE* file_handle = fopen(file_name, "rb");
size_t result = 0;
if (file_handle) {
fseek(file_handle, 0, SEEK_END);
result = ftell(file_handle);
fseek(file_handle, 0, SEEK_SET);
}
fclose(file_handle);
return result;
}
void read_file_into_buffer(char* file_name, void* buffer, size_t buffer_length) {
if (file_exists(file_name)) {
FILE* file_handle = fopen(file_name, "rb");
size_t read_bytes = fread(buffer, 1, buffer_length, file_handle);
fclose(file_handle);
}
}
void* read_entire_file(char* file_name) {
size_t file_size = get_file_size(file_name);
char* buffer = system_memory_allocate(file_size+1);
read_file_into_buffer(file_name, buffer, file_size);
buffer[file_size] = 0;
return buffer;
}
void free_entire_file(void* buffer) {
system_memory_deallocate(buffer);
}