From 9942429dbb83fed5532c070f8afe41d6ddcd66d2 Mon Sep 17 00:00:00 2001 From: zlago Date: Wed, 25 Sep 2024 14:02:49 +0200 Subject: parallax --- utl/json2map/common.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 utl/json2map/common.c (limited to 'utl/json2map/common.c') diff --git a/utl/json2map/common.c b/utl/json2map/common.c new file mode 100644 index 0000000..c401fc1 --- /dev/null +++ b/utl/json2map/common.c @@ -0,0 +1,44 @@ +#include +#include +#include "common.h" + +struct blob load_file(char const *const name) { + const size_t START_SIZE = 8192; + FILE *file = fopen(name, "rb"); + if (file == NULL) { + return (struct blob) {.data = NULL}; + } + char *data = malloc(START_SIZE); + size_t allocated = START_SIZE; + size_t used = 0; + while (1) { + size_t read = fread(data + used, 1, allocated - used, file); + if (read != allocated - used) { + used += read; + break; + } + used += read; + allocated *= 2; + void *const newdata = realloc(data, allocated); + if (newdata == NULL) { + goto realloc_error; + } + data = newdata; + } + if (used == 0) { + free(data); + fclose(file); + return (struct blob) {.data = NULL, .size = 0}; + } + void *const newdata = realloc(data, used); + if (newdata == NULL) { + goto realloc_error; + } + fclose(file); + return (struct blob) {.data = newdata, .size = used}; + + realloc_error: + free(data); + fclose(file); + return (struct blob) {.data = NULL}; +} -- cgit 1.4.1-2-gfad0