archeus/src/std/io.c

38 lines
800 B
C
Raw Normal View History

2022-10-27 15:16:54 -06:00
#include "arc/std/io.h"
#include "arc/std/errno.h"
#include "arc/std/string.h"
2022-10-27 15:16:54 -06:00
#include <stdio.h>
#include <stdlib.h>
void ARC_IO_FileToStr(ARC_String *path, ARC_String **data){
FILE *file = fopen(path->data, "rb");
if(!file){
arc_errno = ARC_ERRNO_NULL;
2024-01-12 19:48:06 -07:00
return;
}
2022-10-27 15:16:54 -06:00
fseek(file, 0L, SEEK_END);
uint64_t length = ftell(file);
rewind(file);
2022-10-27 15:16:54 -06:00
char *fileData = (char *) calloc(1, length + 1);
if(fileData == NULL){
fclose(file);
arc_errno = ARC_ERRNO_NULL;
*data = NULL;
return;
}
2022-10-27 15:16:54 -06:00
if(1 != fread(fileData, length, 1, file)){
fclose(file);
arc_errno = ARC_ERRNO_COPY;
*data = NULL;
return;
}
2022-10-27 15:16:54 -06:00
fclose(file);
ARC_String_Create(data, fileData, length);
free(fileData);
2022-10-27 15:16:54 -06:00
}