#include "../src/config.h" #include #include #include "slurp.h" int slurp_for_tests(const char *const FNAME, char **strref) { int rc = 0; FILE *file = NULL; char *str = NULL; file = fopen(FNAME, "r"); if (!file) { perror("fopen(FNAME, \"r\")"); rc = -1; goto out; } if (fseek(file, 0L, SEEK_END)) { perror("fseek(file, 0L, SEEK_END)"); rc = -1; goto out; } const long lsize = ftell(file); if (lsize == -1) { perror("ftell(file)"); rc = -1; goto out; } const size_t size = (size_t)lsize + sizeof(char); if (fseek(file, 0L, SEEK_SET)) { perror("fseek(file, 0L, SEEK_SET)"); rc = -1; goto out; } str = malloc(size); if (!str) { perror("malloc(...)"); rc = -1; goto out; } if (fread(str, sizeof(char), size - 1, file) != size - 1) { perror("fread(...)"); rc = -1; goto out; } str[size - 1] = '\0'; *strref = str; out: if (file) { if (fclose(file)) { perror("flcose(file"); rc = -1; } } if (rc) { if (str) { free(str); } } return rc; }