==> src/read.c <==1/* Reading a whole file into memory. */
2#include "read.h"
3
4#include <stdio.h>
5#include <stdlib.h>
6
7char *mesh_ptx_read_file(const char *path, size_t *len) {
8 FILE *f = fopen(path, "rb");
9 if (!f) return NULL;
10 size_t cap = 1 << 16, n = 0;
11 char *b = malloc(cap + 1);
12 while (b) {
13 size_t r = fread(b + n, 1, cap - n, f);
14 n += r;
15 if (n < cap) break;
16 cap *= 2;
17 char *nb = realloc(b, cap + 1);
18 if (!nb) { free(b); b = NULL; }
19 else b = nb;
20 }
21 int err = ferror(f);
22 fclose(f);
23 if (!b || err) { free(b); return NULL; }
24 b[n] = 0;
25 *len = n;
26 return b;
27}