aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteven G. Kargl <kargls@comcast.net>2005-08-19 11:05:03 +0200
committerTobias Schlüter <tobi@gcc.gnu.org>2005-08-19 11:05:03 +0200
commit200cfbe7b94cb12757dc3089401c20aa679a2c01 (patch)
tree76fe83ed6ce18e79b36af6aade13bf9037e75278 /gcc
parent4221d00ae06c662c15c8bf0d7ae64c94bf550604 (diff)
downloadgcc-200cfbe7b94cb12757dc3089401c20aa679a2c01.zip
gcc-200cfbe7b94cb12757dc3089401c20aa679a2c01.tar.gz
gcc-200cfbe7b94cb12757dc3089401c20aa679a2c01.tar.bz2
re PR fortran/23065 (MAXPATHLEN usage in fortran/{scanner,module}.c)
2005-08-19 Steven G. Kargl <kargls@comcast.net> PR fortran/23065 * gfortran.h: Remove PATH_MAX definition. * module.c (write_module, gfc_dump_module): Use alloca to allocate buffers. * scanner.s (gfc_release_include_path, form_from_filename): Ditto. From-SVN: r103271
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog10
-rw-r--r--gcc/fortran/gfortran.h7
-rw-r--r--gcc/fortran/module.c22
-rw-r--r--gcc/fortran/scanner.c15
4 files changed, 30 insertions, 24 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 87f6e12..84dc94a 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,11 @@
+2005-08-19 Steven G. Kargl <kargls@comcast.net>
+
+ PR fortran/23065
+ * gfortran.h: Remove PATH_MAX definition.
+ * module.c (write_module, gfc_dump_module): Use alloca to allocate
+ buffers.
+ * scanner.s (gfc_release_include_path, form_from_filename): Ditto.
+
2004-08-16 Huang Chun <chunhuang73@hotmail.com>
* trans-expr.c (gfc_conv_power_op): Evaluate the expression before
@@ -5,7 +13,7 @@
2005-08-14 Asher Langton <langton2@llnl.gov>
- * parse.c (match): Enclosed macro in do...while(0) and braces.
+ * parse.c (match): Enclose macro in do...while(0) and braces.
2005-08-14 Paul Thomas <pault@gcc.gnu.org>
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index 8ff8d5c..8c33274 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -517,13 +517,6 @@ typedef struct
#endif
-#include <limits.h>
-#ifndef PATH_MAX
-# include <sys/param.h>
-# define PATH_MAX MAXPATHLEN
-#endif
-
-
extern int gfc_suppress_error;
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index 58af479..db510fd 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -3479,14 +3479,22 @@ write_module (void)
void
gfc_dump_module (const char *name, int dump_flag)
{
- char filename[PATH_MAX], *p;
+ int n;
+ char *filename, *p;
time_t now;
- filename[0] = '\0';
+ n = strlen (name) + strlen (MODULE_EXTENSION) + 1;
if (gfc_option.module_dir != NULL)
- strcpy (filename, gfc_option.module_dir);
-
- strcat (filename, name);
+ {
+ filename = (char *) alloca (n + strlen (gfc_option.module_dir));
+ strcpy (filename, gfc_option.module_dir);
+ strcat (filename, name);
+ }
+ else
+ {
+ filename = (char *) alloca (n);
+ strcpy (filename, name);
+ }
strcat (filename, MODULE_EXTENSION);
if (!dump_flag)
@@ -3532,10 +3540,12 @@ gfc_dump_module (const char *name, int dump_flag)
void
gfc_use_module (void)
{
- char filename[GFC_MAX_SYMBOL_LEN + 5];
+ char *filename;
gfc_state_data *p;
int c, line;
+ filename = (char *) alloca(strlen(module_name) + strlen(MODULE_EXTENSION)
+ + 1);
strcpy (filename, module_name);
strcat (filename, MODULE_EXTENSION);
diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c
index d71d065..68af79d 100644
--- a/gcc/fortran/scanner.c
+++ b/gcc/fortran/scanner.c
@@ -164,7 +164,7 @@ gfc_release_include_path (void)
FILE *
gfc_open_included_file (const char *name)
{
- char fullname[PATH_MAX];
+ char *fullname;
gfc_directorylist *p;
FILE *f;
@@ -174,9 +174,7 @@ gfc_open_included_file (const char *name)
for (p = include_dirs; p; p = p->next)
{
- if (strlen (p->path) + strlen (name) + 1 > PATH_MAX)
- continue;
-
+ fullname = (char *) alloca(strlen (p->path) + strlen (name) + 1);
strcpy (fullname, p->path);
strcat (fullname, name);
@@ -1133,15 +1131,12 @@ form_from_filename (const char *filename)
const char *fileext;
int i;
- /* Find end of file name. */
+ /* Find end of file name. Note, filename is either a NULL pointer or
+ a NUL terminated string. */
i = 0;
- while ((i < PATH_MAX) && (filename[i] != '\0'))
+ while (filename[i] != '\0')
i++;
- /* Improperly terminated or too-long filename. */
- if (i == PATH_MAX)
- return FORM_UNKNOWN;
-
/* Find last period. */
while (i >= 0 && (filename[i] != '.'))
i--;