Commit d1e3d6ae by Jakub Jelinek Committed by Jakub Jelinek

scanner.c (load_line): Add pbuflen argument, don't make buflen static.

	* scanner.c (load_line): Add pbuflen argument, don't make
	buflen static.  If maxlen == 0 or preprocessor_flag,
	don't truncate at buflen, but at maxlen.  In xrealloc add
	1 byte at the end for the terminating '\0'.  Don't fill
	with spaces up to buflen, but gfc_option.fixed_line_length.
	(load_file): Adjust load_line caller.  Add line_len variable.

	* gfortran.dg/longline.f: New test.

From-SVN: r101718
parent 4c3a6ca1
2005-07-07 Jakub Jelinek <jakub@redhat.com> 2005-07-07 Jakub Jelinek <jakub@redhat.com>
* scanner.c (load_line): Add pbuflen argument, don't make
buflen static. If maxlen == 0 or preprocessor_flag,
don't truncate at buflen, but at maxlen. In xrealloc add
1 byte at the end for the terminating '\0'. Don't fill
with spaces up to buflen, but gfc_option.fixed_line_length.
(load_file): Adjust load_line caller. Add line_len variable.
* scanner.c (preprocessor_line): Only set current_file->line when errors * scanner.c (preprocessor_line): Only set current_file->line when errors
have not been encountered. Warn and don't crash if a file leave have not been encountered. Warn and don't crash if a file leave
preprocessor line has no corresponding entering line. Formatting. preprocessor line has no corresponding entering line. Formatting.
......
...@@ -683,11 +683,10 @@ gfc_gobble_whitespace (void) ...@@ -683,11 +683,10 @@ gfc_gobble_whitespace (void)
load_line returns wether the line was truncated. */ load_line returns wether the line was truncated. */
static int static int
load_line (FILE * input, char **pbuf) load_line (FILE * input, char **pbuf, int *pbuflen)
{ {
int c, maxlen, i, preprocessor_flag; int c, maxlen, i, preprocessor_flag, buflen = *pbuflen;
int trunc_flag = 0; int trunc_flag = 0;
static int buflen = 0;
char *buffer; char *buffer;
/* Determine the maximum allowed line length. */ /* Determine the maximum allowed line length. */
...@@ -753,15 +752,18 @@ load_line (FILE * input, char **pbuf) ...@@ -753,15 +752,18 @@ load_line (FILE * input, char **pbuf)
*buffer++ = c; *buffer++ = c;
i++; i++;
if (i >= buflen && (maxlen == 0 || preprocessor_flag)) if (maxlen == 0 || preprocessor_flag)
{ {
/* Reallocate line buffer to double size to hold the if (i >= buflen)
overlong line. */ {
buflen = buflen * 2; /* Reallocate line buffer to double size to hold the
*pbuf = xrealloc (*pbuf, buflen); overlong line. */
buffer = (*pbuf)+i; buflen = buflen * 2;
*pbuf = xrealloc (*pbuf, buflen + 1);
buffer = (*pbuf)+i;
}
} }
else if (i >= buflen) else if (i >= maxlen)
{ {
/* Truncate the rest of the line. */ /* Truncate the rest of the line. */
for (;;) for (;;)
...@@ -782,10 +784,11 @@ load_line (FILE * input, char **pbuf) ...@@ -782,10 +784,11 @@ load_line (FILE * input, char **pbuf)
&& gfc_option.fixed_line_length > 0 && gfc_option.fixed_line_length > 0
&& !preprocessor_flag && !preprocessor_flag
&& c != EOF) && c != EOF)
while (i++ < buflen) while (i++ < gfc_option.fixed_line_length)
*buffer++ = ' '; *buffer++ = ' ';
*buffer = '\0'; *buffer = '\0';
*pbuflen = buflen;
return trunc_flag; return trunc_flag;
} }
...@@ -1001,7 +1004,7 @@ load_file (char *filename, bool initial) ...@@ -1001,7 +1004,7 @@ load_file (char *filename, bool initial)
gfc_linebuf *b; gfc_linebuf *b;
gfc_file *f; gfc_file *f;
FILE *input; FILE *input;
int len; int len, line_len;
for (f = current_file; f; f = f->up) for (f = current_file; f; f = f->up)
if (strcmp (filename, f->filename) == 0) if (strcmp (filename, f->filename) == 0)
...@@ -1036,10 +1039,11 @@ load_file (char *filename, bool initial) ...@@ -1036,10 +1039,11 @@ load_file (char *filename, bool initial)
current_file = f; current_file = f;
current_file->line = 1; current_file->line = 1;
line = NULL; line = NULL;
line_len = 0;
for (;;) for (;;)
{ {
int trunc = load_line (input, &line); int trunc = load_line (input, &line, &line_len);
len = strlen (line); len = strlen (line);
if (feof (input) && len == 0) if (feof (input) && len == 0)
......
2005-07-07 Jakub Jelinek <jakub@redhat.com> 2005-07-07 Jakub Jelinek <jakub@redhat.com>
* gfortran.dg/longline.f: New test.
* gfortran.dg/badline.f: New test. * gfortran.dg/badline.f: New test.
2005-07-07 Feng Wang <fengwang@nudt.edu.cn> 2005-07-07 Feng Wang <fengwang@nudt.edu.cn>
......
# 1 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.f"
! { dg-do compile }
subroutine foo
character*10 cpnam
character*4 csig
write (34,808) csig,ilax,cpnam
808 format (/9X,4HTHE ,A4, 29HTIVE MINOS ERROR OF PARAMETER,I3, 2H
+, ,A10)
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment