This commit should fix bug #163 reported by pauloscustodio:
Reading files with "rb" causes issues in Windows
re2c reads input files in binary mode and writes the generated output in
text mode. This caused CR LF conversion to CR CR LF on Windows: first CR
comes from reading input in binary mode, second CR is added when writing
output in text mode. This only happened to those parts of input which are
not transformed by re2c: we used to copy-paste verbatim, now we patch line
endings.
OutputFile & OutputFile::wraw (const char * s, size_t n)
{
- stream ().write (s, static_cast<std::streamsize> (n));
+ std::ostream &o = stream();
+ const char *const e = s + n;
+
+ // convert CR LF to LF
+ for (const char *p = s; p < e; ++p) {
+ if (*p == '\n') continue;
+
+ std::streamsize l = p - s;
+ if (p > s && p[-1] == '\r') --l;
+ o.write(s, l);
+ s = p;
+ }
+ o.write(s, e - s);
+
return *this;
}