X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcommon%2Fcommon.c;fp=src%2Fcommon%2Fcommon.c;h=c8890cd2cab5748690d8951fb4fea9aab3ce795d;hb=87c882849d73c8567c517d630d4fba6d48b555cb;hp=8961475fc5a91dea011205624035db56d5866d3c;hpb=760b266cd90c1769b869d43ebba5f24f7b3c40e0;p=babeltrace.git diff --git a/src/common/common.c b/src/common/common.c index 8961475f..c8890cd2 100644 --- a/src/common/common.c +++ b/src/common/common.c @@ -1862,3 +1862,44 @@ int bt_common_g_string_append_printf(GString *str, const char *fmt, ...) } return print_len; } + +BT_HIDDEN +int bt_common_append_file_content_to_g_string(GString *str, FILE *fp) +{ + const size_t chunk_size = 4096; + int ret = 0; + char *buf; + size_t read_len; + gsize orig_len = str->len; + + BT_ASSERT(str); + BT_ASSERT(fp); + buf = g_malloc(chunk_size); + if (!buf) { + ret = -1; + goto end; + } + + while (true) { + if (ferror(fp)) { + ret = -1; + goto end; + } + + if (feof(fp)) { + break; + } + + read_len = fread(buf, 1, chunk_size, fp); + g_string_append_len(str, buf, read_len); + } + +end: + if (ret) { + /* Remove what was appended */ + g_string_truncate(str, orig_len); + } + + g_free(buf); + return ret; +}