charset.c (_cpp_convert_input): Check '\r' before inserting '\n' at the end.

* charset.c (_cpp_convert_input): Check '\r' before inserting
      '\n' at the end.
      * gcc.dg/cpp/mac-eol-at-eof.c: New test.

From-SVN: r95289
This commit is contained in:
Devang Patel 2005-02-19 11:48:02 -08:00 committed by Devang Patel
parent 332e7efe7f
commit 04c90eea07
4 changed files with 19 additions and 1 deletions

View File

@ -1,3 +1,7 @@
2005-02-19 Devang Patel <dpatel@apple.com>
* gcc.dg/cpp/mac-eol-at-eof.c: New test.
2005-02-19 Steven G. Kargl <kargls@comcast.net>
* gfortran.dg/achar_1.f90: New test.

View File

@ -0,0 +1 @@
/* Test no newline at eof warning when Mac line ending is used*/ /* { dg-do compile } */ int main() { return 0; }

View File

@ -1,3 +1,8 @@
2005-02-19 Devang Patel <dpatel@apple.com>
* charset.c (_cpp_convert_input): Check '\r' before inserting
'\n' at the end.
2005-02-15 Eric Christopher <echristo@redhat.com>
PR preprocessor/19077

View File

@ -1405,7 +1405,15 @@ _cpp_convert_input (cpp_reader *pfile, const char *input_charset,
if (to.len + 4096 < to.asize || to.len >= to.asize)
to.text = xrealloc (to.text, to.len + 1);
to.text[to.len] = '\n';
/* If the file is using old-school Mac line endings (\r only),
terminate with another \r, not an \n, so that we do not mistake
the \r\n sequence for a single DOS line ending and erroneously
issue the "No newline at end of file" diagnostic. */
if (to.text[to.len - 1] == '\r')
to.text[to.len] = '\r';
else
to.text[to.len] = '\n';
*st_size = to.len;
return to.text;
}