tuxanci2-sdk
SDK for tuxanci2
Log | Files | Refs | README | LICENSE

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 }