file.c (876B)
1 #include <stdint.h>
2 #include <stdlib.h>
3 #include <stddef.h>
4 #include <tuxanci2/file.h>
5 #include <tuxanci2/abi.h>
6 #include <tuxanci2/syscall.h>
7
8 #define TA_FILE_MISSING 0xFFFFFFFFu
9 #define TA_FILE_LIMIT 0x7FFFFF00u
10
11 ta_file *ta_file_open(uint8_t file) {
12 uint32_t size = ta_syscall(TA_SYS_FILE_SIZE, file, 0, 0, 0, 0, 0);
13
14 if (size == TA_FILE_MISSING || size > TA_FILE_LIMIT) {
15 return NULL;
16 }
17
18 ta_file *opened = (ta_file *)malloc(sizeof(ta_file) + size);
19
20 if (opened == NULL) {
21 return NULL;
22 }
23
24 opened->file = file;
25 opened->size = size;
26
27 if (ta_syscall(TA_SYS_FILE_READ, file, (uint32_t)(size_t)opened->data, 0, 0, 0, 0) == 0) {
28 free(opened);
29
30 return NULL;
31 }
32
33 return opened;
34 }
35
36 void ta_file_close(ta_file *file) {
37 free(file);
38 }
39
40 void ta_file_exec(ta_file *file) {
41 if (file == NULL) {
42 return;
43 }
44
45 ta_syscall(TA_SYS_FILE_EXEC, file->file, 0, 0, 0, 0, 0);
46 }