commit ce14eacb88bea26267e8ddd2bb3ce0708607925f
parent d6d02e8f7ea609c6d07b301d409231af979c3477
Author: vaplv <vaplv@free.fr>
Date: Wed, 15 Jan 2020 15:23:59 +0100
Fix the txtrdr_read_line function
When reaching the EOF, an error might be reported while it shouldn't.
Diffstat:
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/test_text_reader.c b/src/test_text_reader.c
@@ -101,6 +101,14 @@ main(int argc, char** argv)
check_text_reader(txtrdr);
txtrdr_ref_put(txtrdr);
+ CHK(stream = freopen(filename, "w+", stream));
+ fprintf(stream, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
+ fprintf(stream, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
+ rewind(stream);
+ CHK(txtrdr_stream(&allocator, stream, filename, -1, &txtrdr) == RES_OK);
+ CHK(txtrdr_read_line(txtrdr) == RES_OK);
+ txtrdr_ref_put(txtrdr);
+
fclose(stream);
check_memory_allocator(&allocator);
mem_shutdown_proxy_allocator(&allocator);
diff --git a/src/text_reader.c b/src/text_reader.c
@@ -178,7 +178,7 @@ txtrdr_read_line(struct txtrdr* txtrdr)
/* Read the remaing chars */
more = darray_char_data_get(&txtrdr->line) + sz-1/*null char*/;
str = fgets(more, CHUNK+1/*previous null char*/, txtrdr->stream);
- if(!str) {
+ if(!str && ferror(txtrdr->stream)) {
res = RES_IO_ERR;
goto error;
}