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
This commit is contained in:
Jakub Jelinek 2013-02-27 08:28:48 +01:00 committed by Jakub Jelinek
parent dc3577989d
commit 0fcb564b72
2 changed files with 24 additions and 10 deletions

View File

@ -1,5 +1,8 @@
2013-02-27 Jakub Jelinek <jakub@redhat.com>
* 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.

View File

@ -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);