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:
parent
b6fc711089
commit
ad43d46f3a
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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. */
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user