commit 9673951c40cfefd07d15bac13bc7ad26f5d30411
parent ce14eacb88bea26267e8ddd2bb3ce0708607925f
Author: vaplv <vaplv@free.fr>
Date: Fri, 31 Jan 2020 15:01:02 +0100
Fix the txtrdr_read_line function
Make the carriage return character, i.e. '\r', as a character that
marks the end of a line.
Diffstat:
3 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/src/dynamic_array.h b/src/dynamic_array.h
@@ -198,7 +198,7 @@ DARRAY_FUNC__(resize)(struct DARRAY_TYPE__* darray, const size_t sz)
if(sz < darray->capacity) {
sz_adjusted = sz;
- } else if (sz < darray->size*2) {
+ } else if(sz < darray->size*2) {
sz_adjusted = darray->size*2;
} else {
sz_adjusted = sz;
diff --git a/src/test_text_reader.c b/src/test_text_reader.c
@@ -109,6 +109,14 @@ main(int argc, char** argv)
CHK(txtrdr_read_line(txtrdr) == RES_OK);
txtrdr_ref_put(txtrdr);
+ CHK(stream = freopen(filename, "w+", stream));
+ fprintf(stream, "\r\n");
+ rewind(stream);
+ CHK(txtrdr_stream(&allocator, stream, filename, '#', &txtrdr) == RES_OK);
+ CHK(txtrdr_read_line(txtrdr) == RES_OK);
+ CHK(txtrdr_get_line(txtrdr) == NULL);
+ 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
@@ -30,11 +30,11 @@ struct txtrdr {
struct darray_char line; /* Buffer storing the read line */
/* String of chars from which the remaining line chars are skipped */
- char reject[3];
+ char reject[4];
/* Boolean defining if the stream is internally managed or not, i.e. if it
* has to be closed on text_reader release or not */
- int manage_stream;
+ int manage_stream;
struct mem_allocator* allocator;
ref_T ref;
@@ -85,7 +85,8 @@ txtrdr_stream
txtrdr->nlines = 0;
txtrdr->reject[0] = comment;
txtrdr->reject[1] = '\n';
- txtrdr->reject[2] = '\0'; /* Finalize the string */
+ txtrdr->reject[2] = '\r';
+ txtrdr->reject[3] = '\0'; /* Finalize the string */
res = str_set(&txtrdr->name, name ? name : "<null>");
if(res != RES_OK) goto error;