From 0fcb564b72f58f8d3fa3351fbad33d32b63697ca Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 27 Feb 2013 08:28:48 +0100 Subject: [PATCH] incpath.c (add_standard_paths): Use reconcat instead of concat where appropriate and avoid leaking memory. * incpath.c (add_standard_paths): Use reconcat instead of concat where appropriate and avoid leaking memory. From-SVN: r196306 --- gcc/ChangeLog | 3 +++ gcc/incpath.c | 31 +++++++++++++++++++++---------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e7f05869e8d..86426e734cc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,8 @@ 2013-02-27 Jakub Jelinek + * incpath.c (add_standard_paths): Use reconcat instead of concat + where appropriate and avoid leaking memory. + * opts.h: Include obstack.h. (opts_concat): New prototype. (opts_obstack): New declaration. diff --git a/gcc/incpath.c b/gcc/incpath.c index 0e61b8b747a..018da982c14 100644 --- a/gcc/incpath.c +++ b/gcc/incpath.c @@ -149,12 +149,17 @@ add_standard_paths (const char *sysroot, const char *iprefix, { char *str = concat (iprefix, p->fname + len, NULL); if (p->multilib == 1 && imultilib) - str = concat (str, dir_separator_str, imultilib, NULL); + str = reconcat (str, str, dir_separator_str, + imultilib, NULL); else if (p->multilib == 2) { if (!imultiarch) - continue; - str = concat (str, dir_separator_str, imultiarch, NULL); + { + free (str); + continue; + } + str = reconcat (str, str, dir_separator_str, + imultiarch, NULL); } add_path (str, SYSTEM, p->cxx_aware, false); } @@ -183,6 +188,7 @@ add_standard_paths (const char *sysroot, const char *iprefix, && !filename_ncmp (p->fname, cpp_PREFIX, cpp_PREFIX_len)) { static const char *relocated_prefix; + char *ostr; /* If this path starts with the configure-time prefix, but the compiler has been relocated, replace it with the run-time prefix. The run-time exec prefix @@ -198,22 +204,27 @@ add_standard_paths (const char *sysroot, const char *iprefix, = make_relative_prefix (dummy, cpp_EXEC_PREFIX, cpp_PREFIX); + free (dummy); } - str = concat (relocated_prefix, - p->fname + cpp_PREFIX_len, - NULL); - str = update_path (str, p->component); + ostr = concat (relocated_prefix, + p->fname + cpp_PREFIX_len, + NULL); + str = update_path (ostr, p->component); + free (ostr); } else str = update_path (p->fname, p->component); if (p->multilib == 1 && imultilib) - str = concat (str, dir_separator_str, imultilib, NULL); + str = reconcat (str, str, dir_separator_str, imultilib, NULL); else if (p->multilib == 2) { if (!imultiarch) - continue; - str = concat (str, dir_separator_str, imultiarch, NULL); + { + free (str); + continue; + } + str = reconcat (str, str, dir_separator_str, imultiarch, NULL); } add_path (str, SYSTEM, p->cxx_aware, false);