aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2018-02-26 11:47:01 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2018-02-26 11:47:01 +0200
commit628cc222d71e9f12049b85807d51f3c766db5be0 (patch)
tree0f6d649fed9fa110b6347f6e8bf0d83bc10020f6
parent3b1ce034f9bb01b6c6f4e1a74884f89ef07a9b44 (diff)
Skip multiple CR in CRLF sequence in char_scanner
-rw-r--r--libbutl/char-scanner.cxx9
-rw-r--r--libbutl/char-scanner.mxx3
2 files changed, 9 insertions, 3 deletions
diff --git a/libbutl/char-scanner.cxx b/libbutl/char-scanner.cxx
index 607d887..cebad61 100644
--- a/libbutl/char-scanner.cxx
+++ b/libbutl/char-scanner.cxx
@@ -64,8 +64,13 @@ namespace butl
eos_ = true;
else if (crlf_ && v == '\r')
{
- get_ ();
- int_type v1 (peek_ ());
+ int_type v1;
+ do
+ {
+ get_ ();
+ v1 = peek_ ();
+ }
+ while (v1 == '\r');
if (v1 != '\n')
{
diff --git a/libbutl/char-scanner.mxx b/libbutl/char-scanner.mxx
index 3947a05..7b5be9f 100644
--- a/libbutl/char-scanner.mxx
+++ b/libbutl/char-scanner.mxx
@@ -39,7 +39,8 @@ LIBBUTL_MODEXPORT namespace butl
public:
// If the crlf argument is true, then recognize Windows newlines (0x0D
// 0x0A) and convert them to just '\n' (0x0A). Note that a standalone
- // 0x0D is treated "as if" it was followed by 0x0A.
+ // 0x0D is treated "as if" it was followed by 0x0A and multiple 0x0D
+ // are treated as one.
//
// Note also that if the stream happens to be ifdstream, then it includes
// a number of optimizations that assume nobody else is messing with the