diff --git a/src/toml_load.c b/src/toml_load.c index e561bbd..c4f27f2 100644 --- a/src/toml_load.c +++ b/src/toml_load.c @@ -19,30 +19,13 @@ Result(TomlTable*) toml_load_str_filename(str s, cstr filename) Result(TomlTable*) toml_load_file_filename(FILE* file, cstr filename) { - Deferral(4); + Deferral(1); - const u32 file_chunk_size = 8*1024; - StringBuilder sb = StringBuilder_alloc(file_chunk_size); - Defer(StringBuilder_destroy(&sb)); - u64 count = 0; - u64 remaining_capacity = 0; - 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)); + str file_content; + try_void(file_readWholeText(file, &file_content)); + Defer(str_destroy(file_content)); + + try(TomlTable* table, p, toml_load_str_filename(file_content, filename)); Return RESULT_VALUE(p, table); } @@ -62,6 +45,7 @@ Result(TomlTable*) toml_load_filename(cstr filename) Deferral(1); try(FILE* f, p, file_open(filename, FO_ReadExisting)); + Defer(file_close(f)); try(TomlTable* table, p, toml_load_file_filename(f, filename)); Return RESULT_VALUE(p, table);