added file_readWholeText in toml_load_file
This commit is contained in:
parent
281a65f0d1
commit
7a0570b0b9
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user