aboutsummaryrefslogtreecommitdiff
path: root/gcc/f/lex.c
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2004-02-15 14:27:14 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2004-02-15 14:27:14 +0000
commitfb264fec4885521a881dca835f2794636870a10c (patch)
treea1226b180bc26dd66429b7674063afc8a76e8bc8 /gcc/f/lex.c
parentaf1967542f8f4607594bc6494014a8b01bd94b9f (diff)
downloadgcc-fb264fec4885521a881dca835f2794636870a10c.zip
gcc-fb264fec4885521a881dca835f2794636870a10c.tar.gz
gcc-fb264fec4885521a881dca835f2794636870a10c.tar.bz2
re PR fortran/14129 ([g77] gcc/f/lex.c buffer size limitation.)
PR fortran/14129 * lex.c (ffelex_cfelex_): Avoid calling xrealloc on a local stack allocated array. From-SVN: r77849
Diffstat (limited to 'gcc/f/lex.c')
-rw-r--r--gcc/f/lex.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/gcc/f/lex.c b/gcc/f/lex.c
index 3be91b6..8475d2f 100644
--- a/gcc/f/lex.c
+++ b/gcc/f/lex.c
@@ -694,7 +694,13 @@ ffelex_cfelex_ (ffelexToken *xtoken, FILE *finput, int c)
register unsigned bytes_used = (p - q);
buffer_length *= 2;
- q = xrealloc (q, buffer_length);
+ if (q == &buff[0])
+ {
+ q = xmalloc (buffer_length);
+ memcpy (q, buff, bytes_used);
+ }
+ else
+ q = xrealloc (q, buffer_length);
p = &q[bytes_used];
r = &q[buffer_length];
}
@@ -754,7 +760,13 @@ ffelex_cfelex_ (ffelexToken *xtoken, FILE *finput, int c)
register unsigned bytes_used = (p - q);
buffer_length = bytes_used * 2;
- q = xrealloc (q, buffer_length);
+ if (q == &buff[0])
+ {
+ q = xmalloc (buffer_length);
+ memcpy (q, buff, bytes_used);
+ }
+ else
+ q = xrealloc (q, buffer_length);
p = &q[bytes_used];
r = &q[buffer_length];
}