#include "fileutils.h" #include "alloc.h" #include #include #include #include #include const char* get_home_dir() { const char *home_dir = getenv("HOME"); if(!home_dir) { struct passwd *pw = getpwuid(getuid()); home_dir = pw->pw_dir; } return home_dir; } int file_get_content(const char *filepath, char **data, long *size) { int result = 0; FILE *file = fopen(filepath, "rb"); if(!file) { int err = -errno; perror(filepath); return err; } fseek(file, 0, SEEK_END); *size = ftell(file); if(*size == -1) { fprintf(stderr, "Failed to tell the size of file %s, is it not a file?\n", filepath); result = -1; goto cleanup; } fseek(file, 0, SEEK_SET); *data = alloc_or_crash(*size); if((long)fread(*data, 1, *size, file) != *size) { fprintf(stderr, "Failed to read all bytes in file %s\n", filepath); result = -1; goto cleanup; } cleanup: fclose(file); return result; }