OSDN Git Service

* incpath.c (add_standard_paths): Use reconcat instead of concat
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 Feb 2013 07:28:48 +0000 (07:28 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 Feb 2013 07:28:48 +0000 (07:28 +0000)
where appropriate and avoid leaking memory.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@196306 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/incpath.c

index e7f0586..86426e7 100644 (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.
index 0e61b8b..018da98 100644 (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);