#include #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; } char * v_strcpy(char *str, size_t len) { char *new_str; size_t new_len; new_str = (char *) malloc(sizeof(char) * (len + 1)); if (new_str == NULL) return NULL; new_len = strlcpy(new_str, str, len + 1); if (new_len >= len + 1) { free(new_str); return NULL; } return new_str; }