Hi!

Another file with memory leaks.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2013-02-26  Jakub Jelinek  <ja...@redhat.com>

        * incpath.c (add_standard_paths): Use reconcat instead of concat
        where appropriate and avoid leaking memory.

--- gcc/incpath.c.jj    2013-01-11 09:02:35.000000000 +0100
+++ gcc/incpath.c       2013-02-26 15:11:23.676815551 +0100
@@ -149,12 +149,17 @@ add_standard_paths (const char *sysroot,
                {
                  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,
                   && !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,
                    = 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);

        Jakub

Reply via email to