#include #include #include "util.h" int read_file(char *path, char **output, size_t * read_size) { long file_size; FILE *fp; fp = fopen(path, "r"); if (fp == NULL) return -1; /* get file size */ if (fseek(fp, 0L, SEEK_END) != 0) return -1; file_size = ftell(fp); if (file_size < 0) return -1; /* rewind to file start */ if (fseek(fp, 0L, SEEK_SET) != 0) return -1; /* create output buffer */ *output = malloc(sizeof(char) * (file_size + 1)); if (*output == NULL) return -1; /* read the file */ *read_size = fread(*output, sizeof(char), file_size, fp); if (*read_size == 0 || ferror(fp) != 0) { free(*output); return -1; } /* enforce string termination */ (*output)[*read_size] = '\0'; return 0; }