libiberty.h (reconcat): New function.

include:
	* libiberty.h (reconcat): New function.

libiberty:
	* concat.c (reconcat): New function.

gcc:
	* c-aux-info.c (affix_data_type): Use ATTRIBUTE_MALLOC.  Avoid
	leak by passing malloc'ed pointer to reconcat, not concat.

From-SVN: r45789
This commit is contained in:
Kaveh R. Ghazi 2001-09-24 22:38:22 +00:00 committed by Kaveh Ghazi
parent b6fc711089
commit ad43d46f3a
6 changed files with 50 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2001-09-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* c-aux-info.c (affix_data_type): Use ATTRIBUTE_MALLOC. Avoid
leak by passing malloc'ed pointer to reconcat, not concat.
2001-09-24 DJ Delorie <dj@redhat.com>
* varasm.c (array_size_for_constructor): Handle STRING_CSTs also.

View File

@ -39,7 +39,7 @@ typedef enum formals_style_enum formals_style;
static const char *data_type;
static char *affix_data_type PARAMS ((const char *));
static char *affix_data_type PARAMS ((const char *)) ATTRIBUTE_MALLOC;
static const char *gen_formal_list_for_type PARAMS ((tree, formals_style));
static int deserves_ellipsis PARAMS ((tree));
static const char *gen_formal_list_for_func_def PARAMS ((tree, formals_style));
@ -96,7 +96,8 @@ affix_data_type (param)
*p = '\0';
qualifiers_then_data_type = concat (type_or_decl, data_type, NULL);
*p = saved;
return concat (qualifiers_then_data_type, " ", p, NULL);
return reconcat (qualifiers_then_data_type,
qualifiers_then_data_type, " ", p, NULL);
}
/* Given a tree node which represents some "function type", generate the

View File

@ -1,3 +1,7 @@
2001-09-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* libiberty.h (reconcat): New function.
2001-09-18 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* libiberty.h (concat, concat_length, concat_copy, concat_copy2,

View File

@ -91,6 +91,15 @@ extern const char *lbasename PARAMS ((const char *));
extern char *concat PARAMS ((const char *, ...)) ATTRIBUTE_MALLOC;
/* Concatenate an arbitrary number of strings. You must pass NULL as
the last argument of this function, to terminate the list of
strings. Allocates memory using xmalloc. The first argument is
not one of the strings to be concatenated, but if not NULL is a
pointer to be freed after the new string is created, similar to the
way xrealloc works. */
extern char *reconcat PARAMS ((char *, const char *, ...)) ATTRIBUTE_MALLOC;
/* Determine the length of concatenating an arbitrary number of
strings. You must pass NULL as the last argument of this function,
to terminate the list of strings. */

View File

@ -1,3 +1,7 @@
2001-09-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* concat.c (reconcat): New function.
2001-09-17 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* concat.c (vconcat_length, vconcat_copy, concat_length,

View File

@ -171,6 +171,31 @@ concat VPARAMS ((const char *first, ...))
return newstr;
}
char *
reconcat VPARAMS ((char *optr, const char *first, ...))
{
char *newstr;
/* First compute the size of the result and get sufficient memory. */
VA_OPEN (args, first);
VA_FIXEDARG (args, char *, optr);
VA_FIXEDARG (args, const char *, first);
newstr = (char *) xmalloc (vconcat_length (first, args) + 1);
VA_CLOSE (args);
/* Now copy the individual pieces to the result string. */
VA_OPEN (args, first);
VA_FIXEDARG (args, char *, optr);
VA_FIXEDARG (args, const char *, first);
vconcat_copy (newstr, first, args);
VA_CLOSE (args);
if (optr)
free (optr);
return newstr;
}
#ifdef MAIN
#define NULLP (char *)0