Files
caff-previewer/src/utils.c
2020-11-06 02:52:19 +01:00

62 lines
1.2 KiB
C

//
// Created by marcsello on 05/11/2020.
//
#include <stdio.h>
#include "utils.h"
bool contains(const uint8_t *data, uint64_t data_len, uint8_t what) {
for (uint64_t i = 0; i < data_len; i++) {
if (data[i] == what) {
return true;
}
}
return false;
}
uint8_t read_file_to_mem(mm_ctx context, const char *filename, uint64_t max_len, uint8_t **data, uint64_t *data_len) {
FILE *fp = fopen(filename, "rb");
if (fp == NULL) {
return FILE_READ_COULD_NOT_OPEN;
}
if (fseek(fp, 0L, SEEK_END) != 0) {
fclose(fp);
return FILE_SEEK_ERROR;
}
uint64_t fsize = ftell(fp);
if (fsize > max_len) {
fclose(fp);
return FILE_READ_TOO_BIG;
}
if (fseek(fp, 0L, SEEK_SET) != 0) {
fclose(fp);
return FILE_SEEK_ERROR;
}
uint8_t *contents = (uint8_t *) magic_malloc(context, fsize);
if (contents == NULL) {
fclose(fp);
return FILE_READ_COULD_NOT_ALLOCATE;
}
uint64_t bytes_read = fread(contents, 1, fsize, fp);
if (bytes_read != fsize) {
fclose(fp);
return FILE_READ_ERROR;
}
*data = contents;
*data_len = fsize;
fclose(fp);
return FILE_READ_SUCCESS;
}