added file_readWholeText in toml_load_file

This commit is contained in:
Timerix 2025-11-26 23:49:40 +05:00
parent 281a65f0d1
commit 7a0570b0b9

View File

@ -19,30 +19,13 @@ Result(TomlTable*) toml_load_str_filename(str s, cstr filename)
Result(TomlTable*) toml_load_file_filename(FILE* file, cstr filename) Result(TomlTable*) toml_load_file_filename(FILE* file, cstr filename)
{ {
Deferral(4); Deferral(1);
const u32 file_chunk_size = 8*1024; str file_content;
StringBuilder sb = StringBuilder_alloc(file_chunk_size); try_void(file_readWholeText(file, &file_content));
Defer(StringBuilder_destroy(&sb)); Defer(str_destroy(file_content));
u64 count = 0;
u64 remaining_capacity = 0; try(TomlTable* table, p, toml_load_str_filename(file_content, filename));
do {
remaining_capacity = sb.buffer.capacity - sb.buffer.len;
count = fread((char*)sb.buffer.data + sb.buffer.len, 1, remaining_capacity, file);
if (ferror(file)) {
Return RESULT_ERROR_CODE_FMT(TLIBTOML, TLIBTOML_ERR_OS,
"Error when reading %s [errno %d: %s]",
filename, errno, strerror(errno));
}
sb.buffer.len += count;
if (sb.buffer.len + 1 >= sb.buffer.capacity) {
StringBuilder_increaseCapacity(&sb, file_chunk_size);
}
} while (count == remaining_capacity);
try(TomlTable* table, p, toml_load_str_filename(StringBuilder_getStr(&sb), filename));
Return RESULT_VALUE(p, table); Return RESULT_VALUE(p, table);
} }
@ -62,6 +45,7 @@ Result(TomlTable*) toml_load_filename(cstr filename)
Deferral(1); Deferral(1);
try(FILE* f, p, file_open(filename, FO_ReadExisting)); try(FILE* f, p, file_open(filename, FO_ReadExisting));
Defer(file_close(f));
try(TomlTable* table, p, toml_load_file_filename(f, filename)); try(TomlTable* table, p, toml_load_file_filename(f, filename));
Return RESULT_VALUE(p, table); Return RESULT_VALUE(p, table);