in parson.c [316:348]
static _Nt_array_ptr<char> read_file(_Nt_array_ptr<const char> filename) {
_Ptr<FILE> fp = fopen(filename, "r");
size_t size_to_read = 0;
size_t size_read = 0;
long pos;
if (!fp) {
return NULL;
}
fseek(fp, 0L, SEEK_END);
pos = ftell(fp);
if (pos < 0) {
fclose(fp);
return NULL;
}
size_to_read = pos;
rewind(fp);
// TODO: compiler isn't constant folding when checking bounds, so we need the spurious (size_t) 1 here.
_Nt_array_ptr<char> file_contents : count((size_t) 1 * size_to_read) = parson_string_malloc((size_t) 1 * size_to_read );
if (!file_contents) {
fclose(fp);
return NULL;
}
size_read = fread(file_contents, 1, size_to_read, fp);
if (size_read == 0 || ferror(fp)) {
fclose(fp);
parson_free(char, file_contents);
return NULL;
}
fclose(fp);
file_contents[size_read] = '\0';
return file_contents;
}