* listing.c (buffer_line): Open the source file with FOPEN_RB.
Manually process line ends.
This commit is contained in:
parent
352efb280d
commit
7e66d8acd2
2 changed files with 20 additions and 2 deletions
|
@ -1,3 +1,8 @@
|
|||
2008-10-03 Kazu Hirata <kazu@codesourcery.com>
|
||||
|
||||
* listing.c (buffer_line): Open the source file with FOPEN_RB.
|
||||
Manually process line ends.
|
||||
|
||||
2008-09-30 Wesley W. Terpstra <wesley@terpstra.ca>
|
||||
Nick Clifton <nickc@redhat.com>
|
||||
|
||||
|
|
|
@ -471,8 +471,10 @@ buffer_line (file_info_type *file, char *line, unsigned int size)
|
|||
fclose (last_open_file);
|
||||
}
|
||||
|
||||
/* Open the file in the binary mode so that ftell above can
|
||||
return a reliable value that we can feed to fseek below. */
|
||||
last_open_file_info = file;
|
||||
last_open_file = fopen (file->filename, FOPEN_RT);
|
||||
last_open_file = fopen (file->filename, FOPEN_RB);
|
||||
if (last_open_file == NULL)
|
||||
{
|
||||
file->at_end = 1;
|
||||
|
@ -489,7 +491,7 @@ buffer_line (file_info_type *file, char *line, unsigned int size)
|
|||
/* Leave room for null. */
|
||||
size -= 1;
|
||||
|
||||
while (c != EOF && c != '\n')
|
||||
while (c != EOF && c != '\n' && c != '\r')
|
||||
{
|
||||
if (count < size)
|
||||
*p++ = c;
|
||||
|
@ -498,6 +500,17 @@ buffer_line (file_info_type *file, char *line, unsigned int size)
|
|||
c = fgetc (last_open_file);
|
||||
|
||||
}
|
||||
|
||||
/* If '\r' is followed by '\n', swallow that. Likewise, if '\n'
|
||||
is followed by '\r', swallow that as well. */
|
||||
if (c == '\r' || c == '\n')
|
||||
{
|
||||
int next = fgetc (last_open_file);
|
||||
if ((c == '\r' && next != '\n')
|
||||
|| (c == '\n' && next != '\r'))
|
||||
ungetc (next, last_open_file);
|
||||
}
|
||||
|
||||
if (c == EOF)
|
||||
{
|
||||
file->at_end = 1;
|
||||
|
|
Loading…
Add table
Reference in a new issue