Patch to use xstrdup/concat in lieu of xmalloc/strcpy/etc.

Kaveh R. Ghazi ghazi@caip.rutgers.edu
Mon Jun 24 09:17:00 GMT 2002


This patch changes a few places where we were doing explicit xmalloc +
strcpy/strcat/memcpy/sprintf calls to use xstrdup or concat instead.

I tested it by bootstrapping on sparc-sun-solaris2.7 (minus ada) as
well as by building cc1 for cross-compilers targetted to
alpha-dec-vms, dsp16xx-unknown-elf and mcore-unknown-elf in order to
compile-test files not used in a solaris bootstrap.

Note the dsp16xx cross-target doesn't link cc1 because of an undefined
reference to dsp16xx_umulhi3_libcall, but that occurs without my patch
too.  I at least verified compiling dsp16xx.o since I touched that
file.

I couldn't build the vms-{cc,ld}.c files in a cross config, but I
double checked those by eyeball and also verified that they do in fact
link with libiberty in alpha/x-vms.  So it should be fine.

Ok to install?

		Thanks,
		--Kaveh


2002-06-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

ada:
	* adadecode.c (ada_demangle): Use xstrdup in lieu of
	xmalloc/strcpy.
	* misc.c (gnat_decode_option): Likewise.

gcc:

	* alpha/vms-cc.c (preprocess_args, main): Use xstrdup and/or
	concat in lieu of xmalloc/strcpy/memcpy/sprintf.
	* alpha/vms-ld.c (main): Likewise.
	* dsp16xx.c (double_reg_to_memory): Likewise.
	* mcore.c (mcore_expand_prolog): Likewise.
	* cppfiles.c (read_name_map): Likewise.
	* gensupport.c (process_rtx, identify_predicable_attribute,
	alter_test_for_insn): Likewise.
	* vmsdbgout.c (write_rtnbeg, vmsdbgout_init): Likewise.

f:
	* com.c (read_name_map): Use concat in lieu of xmalloc/strcpy.

diff -rup orig/egcc-CVS20020622/gcc/ada/adadecode.c egcc-CVS20020622/gcc/ada/adadecode.c
--- orig/egcc-CVS20020622/gcc/ada/adadecode.c	2002-03-14 07:31:02.000000000 -0500
+++ egcc-CVS20020622/gcc/ada/adadecode.c	2002-06-22 23:43:08.632301367 -0400
@@ -313,12 +313,7 @@ ada_demangle (coded_name)
      const char *coded_name;
 {
   char ada_name[2048];
-  char *result;
 
   __gnat_decode (coded_name, ada_name, 0);
-
-  result = (char *) xmalloc (strlen (ada_name) + 1);
-  strcpy (result, ada_name);
-
-  return result;
+  return xstrdup (ada_name);
 }
diff -rup orig/egcc-CVS20020622/gcc/ada/misc.c egcc-CVS20020622/gcc/ada/misc.c
--- orig/egcc-CVS20020622/gcc/ada/misc.c	2002-06-11 16:01:04.000000000 -0400
+++ egcc-CVS20020622/gcc/ada/misc.c	2002-06-22 23:43:08.632301367 -0400
@@ -227,10 +227,9 @@ gnat_decode_option (argc, argv)
 
   else if (!strncmp (p, "-gant", 5))
     {
-      char *q = (char *) xmalloc (strlen (p) + 1);
+      char *q = xstrdup (p);
 
       warning ("`-gnat' misspelled as `-gant'");
-      strcpy (q, p);
       q[2] = 'n', q[3] = 'a';
       p = q;
       return 1;
diff -rup orig/egcc-CVS20020622/gcc/config/alpha/vms-cc.c egcc-CVS20020622/gcc/config/alpha/vms-cc.c
--- orig/egcc-CVS20020622/gcc/config/alpha/vms-cc.c	2001-12-13 07:30:25.000000000 -0500
+++ egcc-CVS20020622/gcc/config/alpha/vms-cc.c	2002-06-23 11:15:03.221120716 -0400
@@ -109,16 +109,11 @@ preprocess_args (p_argc, argv)
       if (strcmp (argv[i], "-o") == 0)
 	{
 	  char *buff, *ptr;
-	  int out_len;
 
 	  i++;
 	  ptr = to_host_file_spec (argv[i]);
 	  objfilename = xstrdup (ptr);
-	  out_len = strlen (ptr);
-	  buff = xmalloc (out_len + 6);
-
-	  strcpy (buff, "/obj=");
-	  strcat (buff, ptr);
+	  buff = concat ("/obj=", ptr, NULL);
 	  addarg (buff);
 	}
     }
@@ -202,11 +197,8 @@ main (argc, argv)
   strncpy (cwdev, cwd, devlen);
   cwdev [devlen] = '\0';
 
-  search_dirs = xmalloc (strlen (system_search_dirs) + 1);
-  strcpy (search_dirs, system_search_dirs);
-
-  defines = xmalloc (strlen (default_defines) + 1);
-  strcpy (defines, default_defines);
+  search_dirs = xstrdup (system_search_dirs);
+  defines = xstrdup (default_defines);
 
   addarg ("cc");
   preprocess_args (&argc , argv);
@@ -251,7 +243,6 @@ main (argc, argv)
 	{
 	  /* Assume filename arg */
 	  char buff [256], *ptr;
-	  int buff_len;
 
 	  ptr = to_host_file_spec (argv[i]);
 	  arg_len = strlen (ptr);
@@ -263,10 +254,7 @@ main (argc, argv)
 	  else
 	    sprintf (buff, "%s%s", cwd, ptr);
 
-	  buff_len = strlen (buff);
-	  ptr = xmalloc (buff_len + 1);
-
-	  strcpy (ptr, buff);
+	  ptr = xstrdup (buff);
 	  addarg (ptr);
 	}
     }
diff -rup orig/egcc-CVS20020622/gcc/config/alpha/vms-ld.c egcc-CVS20020622/gcc/config/alpha/vms-ld.c
--- orig/egcc-CVS20020622/gcc/config/alpha/vms-ld.c	2002-01-01 23:12:56.000000000 -0500
+++ egcc-CVS20020622/gcc/config/alpha/vms-ld.c	2002-06-23 11:17:42.779340103 -0400
@@ -396,8 +396,7 @@ main (argc, argv)
   strncpy (cwdev, cwd, devlen);
   cwdev [devlen] = '\0';
 
-  search_dirs = xmalloc (strlen (system_search_dirs) + 1);
-  strcpy (search_dirs, system_search_dirs);
+  search_dirs = xstrdup (system_search_dirs);
 
   addarg ("link");
 
diff -rup orig/egcc-CVS20020622/gcc/config/dsp16xx/dsp16xx.c egcc-CVS20020622/gcc/config/dsp16xx/dsp16xx.c
--- orig/egcc-CVS20020622/gcc/config/dsp16xx/dsp16xx.c	2002-06-04 07:03:00.000000000 -0400
+++ egcc-CVS20020622/gcc/config/dsp16xx/dsp16xx.c	2002-06-22 23:43:08.642301460 -0400
@@ -1691,8 +1691,6 @@ double_reg_to_memory (operands)
 void
 override_options ()
 {
-  char *tmp;
-
   if (chip_name == (char *) 0)
     chip_name = DEFAULT_CHIP_NAME;
 
@@ -1710,21 +1708,10 @@ override_options ()
   
   save_chip_name = xstrdup (chip_name);
 
-  rsect_text = tmp = (char *) xmalloc (strlen(".rsect ") + 
-				       strlen(text_seg_name) + 3);
-  sprintf (tmp, ".rsect \"%s\"", text_seg_name);
-
-  rsect_data = tmp = (char *) xmalloc (strlen(".rsect ") + 
-				       strlen(data_seg_name) + 3);
-  sprintf (tmp, ".rsect \"%s\"", data_seg_name);
-
-  rsect_bss = tmp = (char *) xmalloc (strlen(".rsect ") + 
-				      strlen(bss_seg_name) + 3);
-  sprintf (tmp,  ".rsect \"%s\"", bss_seg_name);
-
-  rsect_const = tmp = (char *) xmalloc (strlen(".rsect ") + 
-					strlen(const_seg_name) + 3);
-  sprintf (tmp, ".rsect \"%s\"", const_seg_name);
+  rsect_text = concat (".rsect \"", text_seg_name, "\"", NULL);
+  rsect_data = concat (".rsect \"", data_seg_name, "\"", NULL);
+  rsect_bss = concat (".rsect \"", bss_seg_name, "\"", NULL);
+  rsect_const = concat (".rsect \"", const_seg_name, "\"", NULL);
 }
 
 int
diff -rup orig/egcc-CVS20020622/gcc/config/mcore/mcore.c egcc-CVS20020622/gcc/config/mcore/mcore.c
--- orig/egcc-CVS20020622/gcc/config/mcore/mcore.c	2002-06-04 07:03:14.000000000 -0400
+++ egcc-CVS20020622/gcc/config/mcore/mcore.c	2002-06-22 23:43:08.652301573 -0400
@@ -2341,7 +2341,6 @@ mcore_expand_prolog ()
     {
       /* Emit a symbol for this routine's frame size.  */
       rtx x;
-      int len;
 
       x = DECL_RTL (current_function_decl);
       
@@ -2356,10 +2355,7 @@ mcore_expand_prolog ()
       if (mcore_current_function_name)
 	free (mcore_current_function_name);
       
-      len = strlen (XSTR (x, 0)) + 1;
-      mcore_current_function_name = (char *) xmalloc (len);
-      
-      memcpy (mcore_current_function_name, XSTR (x, 0), len);
+      mcore_current_function_name = xstrdup (XSTR (x, 0));
       
       ASM_OUTPUT_CG_NODE (asm_out_file, mcore_current_function_name, space_allocated);
 
diff -rup orig/egcc-CVS20020622/gcc/cppfiles.c egcc-CVS20020622/gcc/cppfiles.c
--- orig/egcc-CVS20020622/gcc/cppfiles.c	2002-05-22 23:10:21.000000000 -0400
+++ egcc-CVS20020622/gcc/cppfiles.c	2002-06-22 23:43:08.662301506 -0400
@@ -931,10 +931,7 @@ read_name_map (pfile, dirname)
 	    ptr->map_to = to;
 	  else
 	    {
-	      ptr->map_to = xmalloc (dirlen + strlen (to) + 2);
-	      strcpy (ptr->map_to, dirname);
-	      ptr->map_to[dirlen] = '/';
-	      strcpy (ptr->map_to + dirlen + 1, to);
+	      ptr->map_to = concat (dirname, "/", to, NULL);
 	      free (to);
 	    }
 
diff -rup orig/egcc-CVS20020622/gcc/f/com.c egcc-CVS20020622/gcc/f/com.c
--- orig/egcc-CVS20020622/gcc/f/com.c	2002-06-20 13:03:16.000000000 -0400
+++ egcc-CVS20020622/gcc/f/com.c	2002-06-22 23:43:08.702301242 -0400
@@ -15310,10 +15310,10 @@ read_name_map (dirname)
 
   dirlen = strlen (dirname);
   separator_needed = dirlen != 0 && dirname[dirlen - 1] != '/';
-  name = (char *) xmalloc (dirlen + strlen (FILE_NAME_MAP_FILE) + 2);
-  strcpy (name, dirname);
-  name[dirlen] = '/';
-  strcpy (name + dirlen + separator_needed, FILE_NAME_MAP_FILE);
+  if (separator_needed)
+    name = concat (dirname, "/", FILE_NAME_MAP_FILE, NULL);
+  else
+    name = concat (dirname, FILE_NAME_MAP_FILE, NULL);
   f = fopen (name, "r");
   free (name);
   if (!f)
@@ -15343,10 +15343,10 @@ read_name_map (dirname)
 	    ptr->map_to = to;
 	  else
 	    {
-	      ptr->map_to = xmalloc (dirlen + strlen (to) + 2);
-	      strcpy (ptr->map_to, dirname);
-	      ptr->map_to[dirlen] = '/';
-	      strcpy (ptr->map_to + dirlen + separator_needed, to);
+	      if (separator_needed)
+		ptr->map_to = concat (dirname, "/", to, NULL);
+	      else
+		ptr->map_to = concat (dirname, to, NULL);
 	      free (to);
 	    }
 
diff -rup orig/egcc-CVS20020622/gcc/gensupport.c egcc-CVS20020622/gcc/gensupport.c
--- orig/egcc-CVS20020622/gcc/gensupport.c	2002-06-07 16:00:32.000000000 -0400
+++ egcc-CVS20020622/gcc/gensupport.c	2002-06-22 23:43:08.712301476 -0400
@@ -308,18 +308,7 @@ process_rtx (desc, lineno)
 	   insn condition to create the new split condition.  */
 	split_cond = XSTR (desc, 4);
 	if (split_cond[0] == '&' && split_cond[1] == '&')
-	  {
-	    const char *insn_cond = XSTR (desc, 2);
-	    size_t insn_cond_len = strlen (insn_cond);
-	    size_t split_cond_len = strlen (split_cond);
-	    char *combined;
-
-	    combined = (char *) xmalloc (insn_cond_len + split_cond_len + 1);
-	    memcpy (combined, insn_cond, insn_cond_len);
-	    memcpy (combined + insn_cond_len, split_cond, split_cond_len + 1);
-
-	    split_cond = combined;
-	  }
+	  split_cond = concat (XSTR (desc, 2), split_cond, NULL);
 	XSTR (split, 1) = split_cond;
 	XVEC (split, 2) = XVEC (desc, 5);
 	XSTR (split, 3) = XSTR (desc, 6);
@@ -439,7 +428,6 @@ identify_predicable_attribute ()
   struct queue_elem *elem;
   char *p_true, *p_false;
   const char *value;
-  size_t len;
 
   /* Look for the DEFINE_ATTR for `predicable', which must exist.  */
   for (elem = define_attr_queue; elem ; elem = elem->next)
@@ -453,10 +441,7 @@ identify_predicable_attribute ()
 
  found:
   value = XSTR (elem->data, 1);
-  len = strlen (value);
-  p_false = (char *) xmalloc (len + 1);
-  memcpy (p_false, value, len + 1);
-
+  p_false = xstrdup (value);
   p_true = strchr (p_false, ',');
   if (p_true == NULL || strchr (++p_true, ',') != NULL)
     {
@@ -674,8 +659,6 @@ alter_test_for_insn (ce_elem, insn_elem)
      struct queue_elem *ce_elem, *insn_elem;
 {
   const char *ce_test, *insn_test;
-  char *new_test;
-  size_t len, ce_len, insn_len;
 
   ce_test = XSTR (ce_elem->data, 1);
   insn_test = XSTR (insn_elem->data, 2);
@@ -684,14 +667,7 @@ alter_test_for_insn (ce_elem, insn_elem)
   if (!insn_test || *insn_test == '\0')
     return ce_test;
 
-  ce_len = strlen (ce_test);
-  insn_len = strlen (insn_test);
-  len = 1 + ce_len + 1 + 4 + 1 + insn_len + 1 + 1;
-  new_test = (char *) xmalloc (len);
-
-  sprintf (new_test, "(%s) && (%s)", ce_test, insn_test);
-
-  return new_test;
+  return concat ("(", ce_test, ") && (", insn_test, ")", NULL);
 }
 
 /* Adjust all of the operand numbers in OLD to match the shift they'll
diff -rup orig/egcc-CVS20020622/gcc/vmsdbgout.c egcc-CVS20020622/gcc/vmsdbgout.c
--- orig/egcc-CVS20020622/gcc/vmsdbgout.c	2002-06-17 16:00:40.000000000 -0400
+++ egcc-CVS20020622/gcc/vmsdbgout.c	2002-06-22 23:43:08.722302644 -0400
@@ -797,7 +797,7 @@ write_rtnbeg (rtnnum, dosizeonly)
      int dosizeonly;
 {
   char *rtnname;
-  int rtnnamelen, rtnentrynamelen;
+  int rtnnamelen;
   char *rtnentryname;
   int totsize = 0;
   char label[MAX_ARTIFICIAL_LABEL_BYTES];
@@ -806,10 +806,7 @@ write_rtnbeg (rtnnum, dosizeonly)
 
   rtnname = func_table[rtnnum];
   rtnnamelen = strlen (rtnname);
-  rtnentrynamelen = rtnnamelen + 4; /* "..en" */
-  rtnentryname = (char *) xmalloc (rtnentrynamelen + 1);
-  strcpy (rtnentryname, rtnname);
-  strcat (rtnentryname, "..en");
+  rtnentryname = concat (rtnname, "..en", NULL);
 
   if (!strcmp (rtnname, "main"))
     {
@@ -1637,10 +1634,7 @@ vmsdbgout_init (main_input_filename)
   else
     module_language = DST_K_UNKNOWN;
 
-  module_producer
-    = (char *) xmalloc (strlen (language_string) + 1
-			+ strlen (version_string) + 1);
-  sprintf (module_producer, "%s %s", language_string, version_string);
+  module_producer = concat (language_string, " ", version_string, NULL);
 
   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
 



More information about the Gcc-patches mailing list