#include #include #include #include "types.h" #include "voxel.h" #include "utils.h" char *read_file(const char *filename) { FILE *file; long length, read; char *buffer; file = fopen(filename, "r"); if (file == NULL) { ERROR("could not read file: %s", filename); return NULL; } fseek(file, 0, SEEK_END); length = ftell(file); fseek(file, 0, SEEK_SET); buffer = malloc(length + 1); read = fread(buffer, 1, length, file); buffer[length] = 0; if (read < length) { ERROR("could not read file: %s", filename); free(buffer); return NULL; } fclose(file); return buffer; } _Noreturn void die(void) { exit(1); } void *xalloc(usize size) { void *ptr = malloc(size); if (ptr == NULL && size != 0) die(); return ptr; } void *xrealloc(void *ptr, usize size) { ptr = realloc(ptr, size); if (ptr == NULL && size != 0) die(); return ptr; } void *xzalloc(usize size) { void *ptr = xalloc(size); memset(ptr, 0, size); return ptr; }