Commit ad43d46f by Kaveh R. Ghazi Committed by Kaveh Ghazi

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
parent b6fc7110
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.
......
......@@ -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
......
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,
......
......@@ -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. */
......
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,
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment