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)
|
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);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user