Convert all line endings to LF before writing the generated code to file.
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.
This commit is contained in:
1 parent
54b50c0bbf
commit
a51c7c858c
1 file changed
+14
-1
@@ -95,7 +95,20 @@ std::ostream & OutputFile::stream ()
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user