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