This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

A patch to constify gcc.c


	This patch constifies gcc.c.

	Alas, I had to use casts in this one because in `struct
spec_list', there is a member which stores both constant strings as
well as dynamically allocated (malloc'ed) ones.  It uses member
alloc_p == 0/1 to mark whether it should free them.  The spots are all
marked with comments explaining this where it occured in the code.

	BTW in this case, I considered constant strings to be a `const
char*' as per what -Wwrite-strings does to illuminate uses of these
strings.  This is what necessitated the casts.

	Anway, okay to install?

		--Kaveh



Sun Jan 24 20:35:07 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gcc.c (print_file_name): Qualify a char* with the `const' keyword.
	(compiler_version, spec_version, spec_machine, cross_compile,
	read_specs, set_spec, lookup_compiler, build_search_list,
	putenv_from_prefixes, find_a_file, record_temp_file,
	delete_if_ordinary, handle_braces, do_spec, do_spec_1, find_file,
	is_directory, validate_switches, used_arg, default_arg,
	pfatal_with_name, perror_with_name, pfatal_pexecute, fatal, error,
	add_preprocessor_option, add_assembler_option, add_linker_option,
	lang_specific_driver, cpp_spec, cpp_predefines, cc1_spec,
	cc1plus_spec,  signed_char_spec, asm_spec, asm_final_spec,
	link_spec, lib_spec, libgcc_spec, endfile_spec, startfile_spec,
	switches_need_spaces, linker_name_spec, multilib_select,
	multilib_defaults, multilib_defaults_raw, compiler,
	link_command_spec, option_map, translate_options, spec_list,
	spec_list_1): Likewise.
	(init_spec): Assign a const-ptr to a nonconst one when alloc_p==0.
	(set_spec): Likewise.
	(programname): Qualify a char* with the `const' keyword.
	(path_prefix, standard_exec_prefix, standard_exec_prefix_1,
	md_exec_prefix, md_startfile_prefix, md_startfile_prefix_1,
	standard_startfile_prefix, standard_startfile_prefix_1,
	standard_startfile_prefix_2, tooldir_base_prefix): Likewise.
	(read_specs): Assign a const-ptr to a nonconst one when alloc_p==0.
	(temp_file): Qualify a char* with the `const' keyword.
	(switchstr, infile, outfiles, process_command, input_filename,
	input_basename, input_suffix, check_live_switch, main,
	validate_all_switches, mswitchstr, set_multilib_dir,
	print_multilib_info): Likewise.

	* genmultilib (multilib_raw, multilib_matches_raw,
 	multilib_extra): Likewise.
	
diff -rup orig/egcs-CVS19990123/gcc/gcc.c egcs-CVS19990123/gcc/gcc.c
--- orig/egcs-CVS19990123/gcc/gcc.c	Sat Jan 23 23:57:04 1999
+++ egcs-CVS19990123/gcc/gcc.c	Sun Jan 24 13:39:07 1999
@@ -91,7 +91,7 @@ static int print_search_dirs;
 /* Flag saying to print the full filename of this file
    as found through our usual search mechanism.  */
 
-static char *print_file_name = NULL;
+static const char *print_file_name = NULL;
 
 /* As print_file_name, but search for executable file.  */
 
@@ -123,23 +123,23 @@ static int save_temps_flag;
 
 /* The compiler version.  */
 
-static char *compiler_version;
+static const char *compiler_version;
 
 /* The target version specified with -V */
 
-static char *spec_version = DEFAULT_TARGET_VERSION;
+static const char *spec_version = DEFAULT_TARGET_VERSION;
 
 /* The target machine specified with -b.  */
 
-static char *spec_machine = DEFAULT_TARGET_MACHINE;
+static const char *spec_machine = DEFAULT_TARGET_MACHINE;
 
 /* Nonzero if cross-compiling.
    When -b is used, the value comes from the `specs' file.  */
 
 #ifdef CROSS_COMPILE
-static char *cross_compile = "1";
+static const char *cross_compile = "1";
 #else
-static char *cross_compile = "0";
+static const char *cross_compile = "0";
 #endif
 
 /* The number of errors that have occurred; the link phase will not be
@@ -163,47 +163,51 @@ extern char *version_string;
 struct path_prefix;
 
 static void init_spec		PROTO((void));
-static void read_specs		PROTO((char *, int));
-static void set_spec		PROTO((char *, char *));
-static struct compiler *lookup_compiler PROTO((char *, size_t, char *));
-static char *build_search_list	PROTO((struct path_prefix *, char *, int));
-static void putenv_from_prefixes PROTO((struct path_prefix *, char *));
-static char *find_a_file	PROTO((struct path_prefix *, char *, int));
+static void read_specs		PROTO((const char *, int));
+static void set_spec		PROTO((const char *, const char *));
+static struct compiler *lookup_compiler PROTO((const char *, size_t, const char *));
+static char *build_search_list	PROTO((struct path_prefix *, const char *, int));
+static void putenv_from_prefixes PROTO((struct path_prefix *, const char *));
+static char *find_a_file	PROTO((struct path_prefix *, const char *, int));
 static void add_prefix		PROTO((struct path_prefix *, const char *,
 				       const char *, int, int, int *));
 static char *skip_whitespace	PROTO((char *));
-static void record_temp_file	PROTO((char *, int, int));
-static void delete_if_ordinary	PROTO((char *));
+static void record_temp_file	PROTO((const char *, int, int));
+static void delete_if_ordinary	PROTO((const char *));
 static void delete_temp_files	PROTO((void));
 static void delete_failure_queue PROTO((void));
 static void clear_failure_queue PROTO((void));
 static int check_live_switch	PROTO((int, int));
-static char *handle_braces	PROTO((char *));
+static const char *handle_braces	PROTO((const char *));
 static char *save_string	PROTO((const char *, int));
-extern int do_spec		PROTO((char *));
-static int do_spec_1		PROTO((char *, int, char *));
-static char *find_file		PROTO((char *));
-static int is_directory		PROTO((char *, char *, int));
-static void validate_switches	PROTO((char *));
+extern int do_spec		PROTO((const char *));
+static int do_spec_1		PROTO((const char *, int, const char *));
+static const char *find_file   	PROTO((const char *));
+static int is_directory		PROTO((const char *, const char *, int));
+static void validate_switches	PROTO((const char *));
 static void validate_all_switches PROTO((void));
 static void give_switch		PROTO((int, int, int));
-static int used_arg		PROTO((char *, int));
-static int default_arg		PROTO((char *, int));
+static int used_arg		PROTO((const char *, int));
+static int default_arg		PROTO((const char *, int));
 static void set_multilib_dir	PROTO((void));
 static void print_multilib_info	PROTO((void));
-static void pfatal_with_name	PROTO((char *)) ATTRIBUTE_NORETURN;
-static void perror_with_name	PROTO((char *));
-static void pfatal_pexecute	PROTO((char *, char *)) ATTRIBUTE_NORETURN;
-static void fatal		PVPROTO((char *, ...))
+static void pfatal_with_name	PROTO((const char *)) ATTRIBUTE_NORETURN;
+static void perror_with_name	PROTO((const char *));
+static void pfatal_pexecute	PROTO((const char *, const char *))
+  ATTRIBUTE_NORETURN;
+static void fatal		PVPROTO((const char *, ...))
   ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF_1;
-static void error		PVPROTO((char *, ...)) ATTRIBUTE_PRINTF_1;
+static void error		PVPROTO((const char *, ...)) ATTRIBUTE_PRINTF_1;
 static void display_help 	PROTO((void));
+static void add_preprocessor_option	PROTO ((const char *, int));
+static void add_assembler_option	PROTO ((const char *, int));
+static void add_linker_option		PROTO ((const char *, int));
 
 void fancy_abort		PROTO((void)) ATTRIBUTE_NORETURN;
 
 #ifdef LANG_SPECIFIC_DRIVER
 /* Called before processing to change/add/remove arguments. */
-extern void lang_specific_driver PROTO ((void (*) PVPROTO((char *, ...)), int *, char ***, int *));
+extern void lang_specific_driver PROTO ((void (*) PVPROTO((const char *, ...)), int *, char ***, int *));
 
 /* Called before linking.  Returns 0 on success and -1 on failure. */
 extern int lang_specific_pre_link ();
@@ -452,28 +456,28 @@ proper position among the other output f
 #define LINKER_NAME "collect2"
 #endif
 
-static char *cpp_spec = CPP_SPEC;
-static char *cpp_predefines = CPP_PREDEFINES;
-static char *cc1_spec = CC1_SPEC;
-static char *cc1plus_spec = CC1PLUS_SPEC;
-static char *signed_char_spec = SIGNED_CHAR_SPEC;
-static char *asm_spec = ASM_SPEC;
-static char *asm_final_spec = ASM_FINAL_SPEC;
-static char *link_spec = LINK_SPEC;
-static char *lib_spec = LIB_SPEC;
-static char *libgcc_spec = LIBGCC_SPEC;
-static char *endfile_spec = ENDFILE_SPEC;
-static char *startfile_spec = STARTFILE_SPEC;
-static char *switches_need_spaces = SWITCHES_NEED_SPACES;
-static char *linker_name_spec = LINKER_NAME;
+static const char *cpp_spec = CPP_SPEC;
+static const char *cpp_predefines = CPP_PREDEFINES;
+static const char *cc1_spec = CC1_SPEC;
+static const char *cc1plus_spec = CC1PLUS_SPEC;
+static const char *signed_char_spec = SIGNED_CHAR_SPEC;
+static const char *asm_spec = ASM_SPEC;
+static const char *asm_final_spec = ASM_FINAL_SPEC;
+static const char *link_spec = LINK_SPEC;
+static const char *lib_spec = LIB_SPEC;
+static const char *libgcc_spec = LIBGCC_SPEC;
+static const char *endfile_spec = ENDFILE_SPEC;
+static const char *startfile_spec = STARTFILE_SPEC;
+static const char *switches_need_spaces = SWITCHES_NEED_SPACES;
+static const char *linker_name_spec = LINKER_NAME;
 
 /* Some compilers have limits on line lengths, and the multilib_select
    and/or multilib_matches strings can be very long, so we build them at
    run time.  */
 static struct obstack multilib_obstack;
-static char *multilib_select;
+static const char *multilib_select;
 static char *multilib_matches;
-static char *multilib_defaults;
+static const char *multilib_defaults;
 #include "multilib.h"
 
 /* Check whether a particular argument is a default argument.  */
@@ -482,7 +486,7 @@ static char *multilib_defaults;
 #define MULTILIB_DEFAULTS { "" }
 #endif
 
-static char *multilib_defaults_raw[] = MULTILIB_DEFAULTS;
+static const char *multilib_defaults_raw[] = MULTILIB_DEFAULTS;
 
 struct user_specs {
   struct user_specs *next;
@@ -534,10 +538,10 @@ static struct user_specs *user_specs_hea
 
 struct compiler
 {
-  char *suffix;			/* Use this compiler for input files
+  const char *suffix;		/* Use this compiler for input files
 				   whose names end in this suffix.  */
 
-  char *spec[4];		/* To use this compiler, concatenate these
+  const char *spec[4];		/* To use this compiler, concatenate these
 				   specs and pass to do_spec.  */
 };
 
@@ -719,12 +723,12 @@ static int n_default_compilers
 #ifdef LINK_COMMAND_SPEC
 /* Provide option to override link_command_spec from machine specific
    configuration files.  */
-static char *link_command_spec = 
+static const char *link_command_spec = 
 	LINK_COMMAND_SPEC;
 #else
 #ifdef LINK_LIBGCC_SPECIAL
 /* Don't generate -L options.  */
-static char *link_command_spec = "\
+static const char *link_command_spec = "\
 %{!fsyntax-only: \
  %{!c:%{!M:%{!MM:%{!E:%{!S:%(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \
 			%{r} %{s} %{t} %{u*} %{x} %{z} %{Z}\
@@ -736,7 +740,7 @@ static char *link_command_spec = "\
 			\n }}}}}}";
 #else
 /* Use -L.  */
-static char *link_command_spec = "\
+static const char *link_command_spec = "\
 %{!fsyntax-only: \
  %{!c:%{!M:%{!MM:%{!E:%{!S:%(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \
 			%{r} %{s} %{t} %{u*} %{x} %{z} %{Z}\
@@ -773,15 +777,15 @@ static char **preprocessor_options;
 struct option_map
 {
   /* The long option's name.  */
-  char *name;
+  const char *name;
   /* The equivalent short option.  */
-  char *equivalent;
+  const char *equivalent;
   /* Argument info.  A string of flag chars; NULL equals no options.
      a => argument required.
      o => argument optional.
      j => join argument to equivalent, making one word.
      * => require other text after NAME as an argument.  */
-  char *arg_info;
+  const char *arg_info;
 };
 
 /* This is the table of mappings.  Mappings are tried sequentially
@@ -873,12 +877,13 @@ struct option_map option_map[] =
 static void
 translate_options (argcp, argvp)
      int *argcp;
-     char ***argvp;
+     const char ***argvp;
 {
   int i;
   int argc = *argcp;
-  char **argv = *argvp;
-  char **newv = (char **) xmalloc ((argc + 2) * 2 * sizeof (char *));
+  const char **argv = *argvp;
+  const char **newv = (const char **)
+    xmalloc ((argc + 2) * 2 * sizeof (char *));
   int newindex = 0;
 
   i = 0;
@@ -896,14 +901,14 @@ translate_options (argcp, argvp)
 	      size_t optlen = strlen (option_map[j].name);
 	      size_t arglen = strlen (argv[i]);
 	      size_t complen = arglen > optlen ? optlen : arglen;
-	      char *arginfo = option_map[j].arg_info;
+	      const char *arginfo = option_map[j].arg_info;
 
 	      if (arginfo == 0)
 		arginfo = "";
 
 	      if (!strncmp (argv[i], option_map[j].name, complen))
 		{
-		  char *arg = 0;
+		  const char *arg = 0;
 
 		  if (arglen < optlen)
 		    {
@@ -992,7 +997,7 @@ translate_options (argcp, argvp)
 	 with their arguments.  */
       else if (argv[i][0] == '-')
 	{
-	  char *p = argv[i] + 1;
+	  const char *p = argv[i] + 1;
 	  int c = *p;
 	  int nskip = 1;
 
@@ -1083,8 +1088,8 @@ struct spec_list
 {
 				/* The following 2 fields must be first */
 				/* to allow EXTRA_SPECS to be initialized */
-  char *name;			/* name of the spec.  */
-  char *ptr;			/* available ptr if no static pointer */
+  const char *name;		/* name of the spec.  */
+  const char *ptr;		/* available ptr if no static pointer */
 
 				/* The following fields are not initialized */
 				/* by EXTRA_SPECS */
@@ -1095,7 +1100,8 @@ struct spec_list
 };
 
 #define INIT_STATIC_SPEC(NAME,PTR) \
-{ NAME, NULL_PTR, PTR, (struct spec_list *)0, sizeof (NAME)-1, 0 }
+{ NAME, NULL_PTR, (char **)PTR, (struct spec_list *)0, sizeof (NAME)-1, 0 }
+/* The cast in macro INIT_STATIC_SPEC is okay since alloc_p = 0. */
 
 /* List of statically defined specs */
 static struct spec_list static_specs[] = {
@@ -1126,8 +1132,8 @@ static struct spec_list static_specs[] =
    That is all that the EXTRA_SPECS macro gives us. */
 struct spec_list_1
 {
-  char *name;
-  char *ptr;
+  const char *name;
+  const char *ptr;
 };
 
 static struct spec_list_1 extra_specs_1[] = { EXTRA_SPECS };
@@ -1168,7 +1174,7 @@ init_spec ()
       sl->ptr = extra_specs_1[i].ptr;
       sl->next = next;
       sl->name_len = strlen (sl->name);
-      sl->ptr_spec = &sl->ptr;
+      sl->ptr_spec = (char **) &sl->ptr; /* Cast is okay since alloc_p = 0. */
       next = sl;
     }
 #endif
@@ -1190,8 +1196,8 @@ init_spec ()
 
 static void
 set_spec (name, spec)
-     char *name;
-     char *spec;
+  const char *name;
+  const char *spec;
 {
   struct spec_list *sl;
   char *old_spec;
@@ -1223,9 +1229,9 @@ set_spec (name, spec)
       sl = (struct spec_list *) xmalloc (sizeof (struct spec_list));
       sl->name = save_string (name, strlen (name));
       sl->name_len = name_len;
-      sl->ptr_spec = &sl->ptr;
+      sl->ptr_spec = (char **) &sl->ptr; /* Cast is okay since alloc_p = 0. */
       sl->alloc_p = 0;
-      *(sl->ptr_spec) = "";
+      *(sl->ptr_spec) = (char *)""; /* The cast is okay since alloc_p = 0. */
       sl->next = specs;
       specs = sl;
     }
@@ -1292,7 +1298,7 @@ static int signal_count;
 
 /* Name with which this program was invoked.  */
 
-static char *programname;
+static const char *programname;
 
 /* Structures to keep track of prefixes to try when looking for files.  */
 
@@ -1309,7 +1315,7 @@ struct path_prefix
 {
   struct prefix_list *plist;  /* List of prefixes to try */
   int max_len;                /* Max length of a prefix in PLIST */
-  char *name;                 /* Name of this list (used in config stuff) */
+  const char *name;           /* Name of this list (used in config stuff) */
 };
 
 /* List of prefixes to try when looking for executables.  */
@@ -1350,10 +1356,10 @@ static char *gcc_exec_prefix;
 #define STANDARD_EXEC_PREFIX "/usr/local/lib/gcc-lib/"
 #endif /* !defined STANDARD_EXEC_PREFIX */
 
-static char *standard_exec_prefix = STANDARD_EXEC_PREFIX;
-static char *standard_exec_prefix_1 = "/usr/lib/gcc/";
+static const char *standard_exec_prefix = STANDARD_EXEC_PREFIX;
+static const char *standard_exec_prefix_1 = "/usr/lib/gcc/";
 #ifdef MD_EXEC_PREFIX
-static char *md_exec_prefix = MD_EXEC_PREFIX;
+static const char *md_exec_prefix = MD_EXEC_PREFIX;
 #endif
 
 #ifndef STANDARD_STARTFILE_PREFIX
@@ -1361,19 +1367,19 @@ static char *md_exec_prefix = MD_EXEC_PR
 #endif /* !defined STANDARD_STARTFILE_PREFIX */
 
 #ifdef MD_STARTFILE_PREFIX
-static char *md_startfile_prefix = MD_STARTFILE_PREFIX;
+static const char *md_startfile_prefix = MD_STARTFILE_PREFIX;
 #endif
 #ifdef MD_STARTFILE_PREFIX_1
-static char *md_startfile_prefix_1 = MD_STARTFILE_PREFIX_1;
+static const char *md_startfile_prefix_1 = MD_STARTFILE_PREFIX_1;
 #endif
-static char *standard_startfile_prefix = STANDARD_STARTFILE_PREFIX;
-static char *standard_startfile_prefix_1 = "/lib/";
-static char *standard_startfile_prefix_2 = "/usr/lib/";
+static const char *standard_startfile_prefix = STANDARD_STARTFILE_PREFIX;
+static const char *standard_startfile_prefix_1 = "/lib/";
+static const char *standard_startfile_prefix_2 = "/usr/lib/";
 
 #ifndef TOOLDIR_BASE_PREFIX
 #define TOOLDIR_BASE_PREFIX "/usr/local/"
 #endif
-static char *tooldir_base_prefix = TOOLDIR_BASE_PREFIX;
+static const char *tooldir_base_prefix = TOOLDIR_BASE_PREFIX;
 static char *tooldir_prefix;
 
 /* Subdirectory to use for locating libraries.  Set by
@@ -1425,8 +1431,8 @@ store_arg (arg, delete_always, delete_fa
 
 static void
 read_specs (filename, main_p)
-     char *filename;
-     int main_p;
+  const char *filename;
+  int main_p;
 {
   int desc;
   int readlen;
@@ -1581,8 +1587,8 @@ read_specs (filename, main_p)
 	      if (sl->alloc_p)
 		free (*(sl->ptr_spec));
 
-	      *(sl->ptr_spec) = "";
-	      sl->alloc_p = 0;
+	      *(sl->ptr_spec) = (char *) "";
+	      sl->alloc_p = 0; /* The cast above is okay since alloc_p = 0. */
 	      continue;
 	    }
 	  else
@@ -1694,7 +1700,7 @@ static int temp_filename_length;
 
 struct temp_file
 {
-  char *name;
+  const char *name;
   struct temp_file *next;
 };
 
@@ -1711,9 +1717,9 @@ static struct temp_file *failure_delete_
 
 static void
 record_temp_file (filename, always_delete, fail_delete)
-     char *filename;
-     int always_delete;
-     int fail_delete;
+  const char *filename;
+  int always_delete;
+  int fail_delete;
 {
   register char *name;
   name = xmalloc (strlen (filename) + 1);
@@ -1754,7 +1760,7 @@ record_temp_file (filename, always_delet
 
 static void
 delete_if_ordinary (name)
-     char *name;
+  const char *name;
 {
   struct stat st;
 #ifdef DEBUG
@@ -1865,9 +1871,9 @@ putenv (str)
 
 static char *
 build_search_list (paths, prefix, check_dir_p)
-     struct path_prefix *paths;
-     char *prefix;
-     int check_dir_p;
+  struct path_prefix *paths;
+  const char *prefix;
+  int check_dir_p;
 {
   int suffix_len = (machine_suffix) ? strlen (machine_suffix) : 0;
   int just_suffix_len
@@ -1926,8 +1932,8 @@ build_search_list (paths, prefix, check_
 
 static void
 putenv_from_prefixes (paths, env_var)
-     struct path_prefix *paths;
-     char *env_var;
+  struct path_prefix *paths;
+  const char *env_var;
 {
   putenv (build_search_list (paths, env_var, 1));
 }
@@ -1938,12 +1944,12 @@ putenv_from_prefixes (paths, env_var)
 
 static char *
 find_a_file (pprefix, name, mode)
-     struct path_prefix *pprefix;
-     char *name;
-     int mode;
+  struct path_prefix *pprefix;
+  const char *name;
+  int mode;
 {
   char *temp;
-  char *file_suffix = ((mode & X_OK) != 0 ? EXECUTABLE_SUFFIX : "");
+  const char *file_suffix = ((mode & X_OK) != 0 ? EXECUTABLE_SUFFIX : "");
   struct prefix_list *pl;
   int len = pprefix->max_len + strlen (name) + strlen (file_suffix) + 1;
 
@@ -2339,7 +2345,7 @@ execute ()
 
 struct switchstr
 {
-  char *part1;
+  const char *part1;
   char **args;
   int live_cond;
   int valid;
@@ -2351,8 +2357,8 @@ static int n_switches;
 
 struct infile
 {
-  char *name;
-  char *language;
+  const char *name;
+  const char *language;
 };
 
 /* Also a vector of input files specified.  */
@@ -2368,7 +2374,7 @@ static int added_libraries;
 
 /* And a vector of corresponding output files is made up later.  */
 
-static char **outfiles;
+static const char **outfiles;
 
 /* Used to track if none of the -B paths are used.  */
 static int warn_B;
@@ -2480,8 +2486,8 @@ display_help ()
 
 static void 								
 add_preprocessor_option (option, len)					
-     char * option;							
-     int    len;							
+  const char * option;							
+  int len;							
 {									
   n_preprocessor_options++;							
 									
@@ -2498,8 +2504,8 @@ add_preprocessor_option (option, len)			
      
 static void 								
 add_assembler_option (option, len)					
-     char * option;							
-     int    len;							
+  const char * option;							
+  int len;							
 {									
   n_assembler_options++;							
 									
@@ -2516,8 +2522,8 @@ add_assembler_option (option, len)					
      
 static void 								
 add_linker_option (option, len)					
-     char * option;							
-     int    len;							
+  const char * option;							
+  int len;							
 {									
   n_linker_options++;							
 									
@@ -2541,7 +2547,8 @@ process_command (argc, argv)
      char **argv;
 {
   register int i;
-  char *temp;
+  const char *temp;
+  char * temp1;
   char *spec_lang = 0;
   int last_language_n_infiles;
   int have_c = 0;
@@ -2556,12 +2563,13 @@ process_command (argc, argv)
 
   /* Figure compiler version from version string.  */
 
-  compiler_version = save_string (version_string, strlen (version_string));
-  for (temp = compiler_version; *temp; ++temp)
+  compiler_version = temp1 =
+    save_string (version_string, strlen (version_string));
+  for (; *temp1; ++temp1)
     {
-      if (*temp == ' ')
+      if (*temp1 == ' ')
 	{
-	  *temp = '\0';
+	  *temp1 = '\0';
 	  break;
 	}
     }
@@ -2594,7 +2602,7 @@ process_command (argc, argv)
   GET_ENV_PATH_LIST (temp, "COMPILER_PATH");
   if (temp)
     {
-      char *startp, *endp;
+      const char *startp, *endp;
       char *nstore = (char *) alloca (strlen (temp) + 3);
 
       startp = endp = temp;
@@ -2628,7 +2636,7 @@ process_command (argc, argv)
   GET_ENV_PATH_LIST (temp, "LIBRARY_PATH");
   if (temp && *cross_compile == '0')
     {
-      char *startp, *endp;
+      const char *startp, *endp;
       char *nstore = (char *) alloca (strlen (temp) + 3);
 
       startp = endp = temp;
@@ -2661,7 +2669,7 @@ process_command (argc, argv)
   GET_ENV_PATH_LIST (temp, "LPATH");
   if (temp && *cross_compile == '0')
     {
-      char *startp, *endp;
+      const char *startp, *endp;
       char *nstore = (char *) alloca (strlen (temp) + 3);
 
       startp = endp = temp;
@@ -2927,7 +2935,7 @@ process_command (argc, argv)
 		 The format of the version string is
 		 ([^0-9]*-)?[0-9]+[.][0-9]+([.][0-9]+)?([- ].*)?  */
 	      {
-		char *v = compiler_version;
+		const char *v = compiler_version;
 
 		/* Ignore leading non-digits.  i.e. "foo-" in "foo-2.7.2".  */
 		while (! ISDIGIT (*v))
@@ -3290,12 +3298,12 @@ process_command (argc, argv)
    sans all directory names, and basename_length is the number
    of characters starting there excluding the suffix .c or whatever.  */
 
-char *input_filename;
+const char *input_filename;
 static int input_file_number;
 size_t input_filename_length;
 static int basename_length;
-static char *input_basename;
-static char *input_suffix;
+static const char *input_basename;
+static const char *input_suffix;
 
 /* These are variables used within do_spec and do_spec_1.  */
 
@@ -3324,7 +3332,7 @@ static int input_from_pipe;
 
 int
 do_spec (spec)
-     char *spec;
+  const char *spec;
 {
   int value;
 
@@ -3365,14 +3373,14 @@ do_spec (spec)
 
 static int
 do_spec_1 (spec, inswitch, soft_matched_part)
-     char *spec;
-     int inswitch;
-     char *soft_matched_part;
+  const char *spec;
+  int inswitch;
+  const char *soft_matched_part;
 {
-  register char *p = spec;
+  register const char *p = spec;
   register int c;
   int i;
-  char *string;
+  const char *string;
   int value;
 
   while ((c = *p++))
@@ -3596,7 +3604,7 @@ do_spec_1 (spec, inswitch, soft_matched_
 	    /* {...:%efoo} means report an error with `foo' as error message
 	       and don't execute any more commands for this file.  */
 	    {
-	      char *q = p;
+	      const char *q = p;
 	      char *buf;
 	      while (*p != 0 && *p != '\n') p++;
 	      buf = (char *) alloca (p - q + 1);
@@ -3624,7 +3632,7 @@ do_spec_1 (spec, inswitch, soft_matched_
 		   In 2.4, do something about that.  */
 		struct temp_name *t;
 		int suffix_length;
-		char *suffix = p;
+		const char *suffix = p;
 
 		if (p[0] == '%' && p[1] == 'O')
 		  {
@@ -3760,7 +3768,7 @@ do_spec_1 (spec, inswitch, soft_matched_
 	  /* %x{OPTION} records OPTION for %X to output.  */
 	  case 'x':
 	    {
-	      char *p1 = p;
+	      const char *p1 = p;
 	      char *string;
 
 	      /* Skip past the option value and make a copy.  */
@@ -3880,7 +3888,7 @@ do_spec_1 (spec, inswitch, soft_matched_
 	    {
 	      char *x = (char *) alloca (strlen (cpp_predefines) + 1);
 	      char *buf = x;
-	      char *y;
+	      const char *y;
 
 	      /* Copy all of the -D options in CPP_PREDEFINES into BUF.  */
 	      y = cpp_predefines;
@@ -3910,7 +3918,7 @@ do_spec_1 (spec, inswitch, soft_matched_
 	    {
 	      char *x = (char *) alloca (strlen (cpp_predefines) * 4 + 1);
 	      char *buf = x;
-	      char *y;
+	      const char *y;
 
 	      /* Copy all of CPP_PREDEFINES into BUF,
 		 but put __ after every -D and at the end of each arg.  */
@@ -4057,7 +4065,7 @@ do_spec_1 (spec, inswitch, soft_matched_
 	    error ("Warning: use of obsolete %%[ operator in specs");
 	  case '(':
 	    {
-	      char *name = p;
+	      const char *name = p;
 	      struct spec_list *sl;
 	      int len;
 
@@ -4090,7 +4098,7 @@ do_spec_1 (spec, inswitch, soft_matched_
 		    {
 		      char *x = (char *) alloca (strlen (name) * 2 + 1);
 		      char *buf = x;
-		      char *y = name;
+		      const char *y = name;
 		      int flag = 0;
 
 		      /* Copy all of NAME into BUF, but put __ after
@@ -4136,8 +4144,8 @@ do_spec_1 (spec, inswitch, soft_matched_
 	  case 'v':
 	    {
 	      int c1 = *p++;  /* Select first or second version number.  */
-	      char *v = compiler_version;
-	      char *q;
+	      const char *v = compiler_version;
+	      const char *q;
 
 	      /* The format of the version string is
 		 ([^0-9]*-)?[0-9]+[.][0-9]+([.][0-9]+)?([- ].*)?  */
@@ -4198,11 +4206,11 @@ do_spec_1 (spec, inswitch, soft_matched_
 
 /* Return 0 if we call do_spec_1 and that returns -1.  */
 
-static char *
+static const char *
 handle_braces (p)
-     register char *p;
+  register const char *p;
 {
-  char *filter, *body = NULL, *endbody;
+  const char *filter, *body = NULL, *endbody = NULL;
   int pipe_p = 0;
   int negate;
   int suffix;
@@ -4247,7 +4255,7 @@ next_member:
       if (*p != '}')
         {
 	  register int count = 1;
-	  register char *q = p;
+	  register const char *q = p;
 
 	  while (*q++ != ':') continue;
 	  body = q;
@@ -4302,7 +4310,7 @@ next_member:
       if (p[-1] == '*' && !negate)
 	{
 	  int substitution;
-	  char *r = body;
+	  const char *r = body;
 
 	  /* First see whether we have %*.  */
 	  substitution = 0;
@@ -4413,7 +4421,7 @@ check_live_switch (switchnum, prefix_len
      int switchnum;
      int prefix_length;
 {
-  char *name = switches[switchnum].part1;
+  const char *name = switches[switchnum].part1;
   int i;
 
   /* In the common case of {<at-most-one-letter>*}, a negating
@@ -4518,9 +4526,9 @@ give_switch (switchnum, omit_first_word,
    user's -B prefix and some standard ones.
    Return the absolute file name found.  If nothing is found, return NAME.  */
 
-static char *
+static const char *
 find_file (name)
-     char *name;
+  const char *name;
 {
   char *newname;
 
@@ -4553,9 +4561,9 @@ find_file (name)
 
 static int
 is_directory (path1, path2, linker)
-     char *path1;
-     char *path2;
-     int linker;
+  const char *path1;
+  const char *path2;
+  int linker;
 {
   int len1 = strlen (path1);
   int len2 = strlen (path2);
@@ -4618,7 +4626,7 @@ main (argc, argv)
   int linker_was_run = 0;
   char *explicit_link_files;
   char *specs_file;
-  char *p;
+  const char *p;
   struct user_specs *uptr;
 
   p = argv[0] + strlen (argv[0]);
@@ -4646,7 +4654,7 @@ main (argc, argv)
   /* Build multilib_select, et. al from the separate lines that make up each
      multilib selection.  */
   {
-    char **q = multilib_raw;
+    const char **q = multilib_raw;
     int need_space;
 
     obstack_init (&multilib_obstack);
@@ -4718,7 +4726,7 @@ main (argc, argv)
     for (i = 0; (int)i < n_switches; i++)
       {
 	char **args;
-	char *p, *q;
+	const char *p, *q;
 	if (!first_time)
 	  obstack_grow (&collect_obstack, " ", 1);
 
@@ -4977,7 +4985,7 @@ main (argc, argv)
 #ifdef LANG_SPECIFIC_DRIVER
   i += lang_specific_extra_outfiles;
 #endif
-  outfiles = (char **) xmalloc (i * sizeof (char *));
+  outfiles = (const char **) xmalloc (i * sizeof (char *));
   bzero ((char *) outfiles, i * sizeof (char *));
 
   /* Record which files were specified explicitly as link input.  */
@@ -5009,7 +5017,7 @@ main (argc, argv)
 	{
 	  /* Ok, we found an applicable compiler.  Run its spec.  */
 	  /* First say how much of input_filename to substitute for %b  */
-	  register char *p;
+	  register const char *p;
 	  int len;
 
 	  if (cp->spec[0][0] == '#')
@@ -5039,18 +5047,20 @@ main (argc, argv)
 	    if (cp->spec[j])
 	      len += strlen (cp->spec[j]);
 
-	  p = (char *) xmalloc (len + 1);
-
-	  len = 0;
-	  for (j = 0; j < sizeof cp->spec / sizeof cp->spec[0]; j++)
-	    if (cp->spec[j])
-	      {
-		strcpy (p + len, cp->spec[j]);
-		len += strlen (cp->spec[j]);
-	      }
+	  {
+	    char *p1 = (char *) xmalloc (len + 1);
 
-	  value = do_spec (p);
-	  free (p);
+	    len = 0;
+	    for (j = 0; j < sizeof cp->spec / sizeof cp->spec[0]; j++)
+	      if (cp->spec[j])
+		{
+		  strcpy (p1 + len, cp->spec[j]);
+		  len += strlen (cp->spec[j]);
+		}
+	    
+	    value = do_spec (p1);
+	    free (p1);
+	  }
 	  if (value < 0)
 	    this_file_error = 1;
 	}
@@ -5144,9 +5154,9 @@ main (argc, argv)
 
 static struct compiler *
 lookup_compiler (name, length, language)
-     char *name;
-     size_t length;
-     char *language;
+  const char *name;
+  size_t length;
+  const char *language;
 {
   struct compiler *cp;
 
@@ -5247,22 +5257,22 @@ save_string (s, len)
 
 static void
 pfatal_with_name (name)
-     char *name;
+  const char *name;
 {
   fatal ("%s: %s", name, xstrerror (errno));
 }
 
 static void
 perror_with_name (name)
-     char *name;
+  const char *name;
 {
   error ("%s: %s", name, xstrerror (errno));
 }
 
 static void
 pfatal_pexecute (errmsg_fmt, errmsg_arg)
-     char *errmsg_fmt;
-     char *errmsg_arg;
+  const char *errmsg_fmt;
+  const char *errmsg_arg;
 {
   int save_errno = errno;
 
@@ -5289,17 +5299,17 @@ fancy_abort ()
 /* Output an error message and exit */
 
 static void
-fatal VPROTO((char *format, ...))
+fatal VPROTO((const char *format, ...))
 {
 #ifndef ANSI_PROTOTYPES
-  char *format;
+  const char *format;
 #endif
   va_list ap;
 
   VA_START (ap, format);
 
 #ifndef ANSI_PROTOTYPES
-  format = va_arg (ap, char *);
+  format = va_arg (ap, const char *);
 #endif
 
   fprintf (stderr, "%s: ", programname);
@@ -5311,17 +5321,17 @@ fatal VPROTO((char *format, ...))
 }
 
 static void
-error VPROTO((char *format, ...))
+error VPROTO((const char *format, ...))
 {
 #ifndef ANSI_PROTOTYPES
-  char *format;
+  const char *format;
 #endif
   va_list ap;
 
   VA_START (ap, format);
 
 #ifndef ANSI_PROTOTYPES
-  format = va_arg (ap, char *);
+  format = va_arg (ap, const char *);
 #endif
 
   fprintf (stderr, "%s: ", programname);
@@ -5335,7 +5345,7 @@ static void
 validate_all_switches ()
 {
   struct compiler *comp;
-  register char *p;
+  register const char *p;
   register char c;
   struct spec_list *spec;
 
@@ -5374,10 +5384,10 @@ validate_all_switches ()
 
 static void
 validate_switches (start)
-     char *start;
+  const char *start;
 {
-  register char *p = start;
-  char *filter;
+  register const char *p = start;
+  const char *filter;
   register int i;
   int suffix = 0;
 
@@ -5420,12 +5430,12 @@ validate_switches (start)
 
 static int
 used_arg (p, len)
-     char *p;
-     int len;
+  const char *p;
+  int len;
 {
   struct mswitchstr {
-    char *str;
-    char *replace;
+    const char *str;
+    const char *replace;
     int len;
     int rep_len;
   };
@@ -5508,10 +5518,10 @@ used_arg (p, len)
 
 static int
 default_arg (p, len)
-     char *p;
-     int len;
+  const char *p;
+  int len;
 {
-  char *start, *end;
+  const char *start, *end;
 
   for (start = multilib_defaults; *start != '\0'; start = end+1)
     {
@@ -5545,9 +5555,9 @@ default_arg (p, len)
 static void
 set_multilib_dir ()
 {
-  char *p = multilib_select;
+  const char *p = multilib_select;
   int this_path_len;
-  char *this_path, *this_arg;
+  const char *this_path, *this_arg;
   int not_arg;
   int ok;
 
@@ -5646,8 +5656,8 @@ set_multilib_dir ()
 static void
 print_multilib_info ()
 {
-  char *p = multilib_select;
-  char *last_path = 0, *this_path;
+  const char *p = multilib_select;
+  const char *last_path = 0, *this_path;
   int skip;
   int last_path_len = 0;
 
@@ -5681,12 +5691,12 @@ print_multilib_info ()
 	 this one which does not require that default argument.  */
       if (! skip)
 	{
-	  char *q;
+	  const char *q;
 
 	  q = p + 1;
 	  while (*q != ';')
 	    {
-	      char *arg;
+	      const char *arg;
 
 	      if (*q == '\0')
 		abort ();
@@ -5717,7 +5727,7 @@ print_multilib_info ()
 
       if (! skip)
 	{
-	  char *p1;
+	  const char *p1;
 
 	  for (p1 = last_path; p1 < p; p1++)
 	    putchar (*p1);
@@ -5762,7 +5772,7 @@ print_multilib_info ()
 	  if (multilib_extra && *multilib_extra)
 	    {
 	      int print_at = TRUE;
-	      char *q;
+	      const char *q;
 
 	      for (q = multilib_extra; *q != '\0'; q++)
 		{
diff -rup orig/egcs-CVS19990123/gcc/genmultilib egcs-CVS19990123/gcc/genmultilib
--- orig/egcs-CVS19990123/gcc/genmultilib	Sat Jan 23 23:57:28 1999
+++ egcs-CVS19990123/gcc/genmultilib	Sun Jan 24 13:04:21 1999
@@ -86,7 +86,7 @@ matches=$3
 exceptions=$4
 extra=$5
 
-echo "static char *multilib_raw[] = {"
+echo "static const char *multilib_raw[] = {"
 
 # What we want to do is select all combinations of the sets in
 # options.  Each combination which includes a set of mutually
@@ -247,7 +247,7 @@ echo "};"
 # Note, the format of the matches is reversed compared
 # to what we want, so switch them around.
 echo ""
-echo "static char *multilib_matches_raw[] = {"
+echo "static const char *multilib_matches_raw[] = {"
 for match in ${matches}; do
   l=`echo ${match} | sed -e 's/=.*$//' -e 's/?/=/g'`
   r=`echo ${match} | sed -e 's/^.*=//' -e 's/?/=/g'`
@@ -263,7 +263,7 @@ echo "};"
 
 # Output the default options now
 echo ""
-echo "static char *multilib_extra = \"${extra}\";"
+echo "static const char *multilib_extra = \"${extra}\";"
 rm -f tmpmultilib2
 
 exit 0


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]