diff options
author | Steven G. Kargl <kargls@comcast.net> | 2005-08-19 11:05:03 +0200 |
---|---|---|
committer | Tobias Schlüter <tobi@gcc.gnu.org> | 2005-08-19 11:05:03 +0200 |
commit | 200cfbe7b94cb12757dc3089401c20aa679a2c01 (patch) | |
tree | 76fe83ed6ce18e79b36af6aade13bf9037e75278 /gcc | |
parent | 4221d00ae06c662c15c8bf0d7ae64c94bf550604 (diff) | |
download | gcc-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/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/fortran/gfortran.h | 7 | ||||
-rw-r--r-- | gcc/fortran/module.c | 22 | ||||
-rw-r--r-- | gcc/fortran/scanner.c | 15 |
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--; |