rsys

Basic data structures and low-level features
git clone git://git.meso-star.fr/rsys.git
Log | Files | Refs | README | LICENSE

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:
Msrc/dynamic_array.h | 2+-
Msrc/test_text_reader.c | 8++++++++
Msrc/text_reader.c | 7++++---
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;