Remove unnecessary calls to strchr.
authorIlya Tocar <ilya.tocar@intel.com>
Tue, 25 Nov 2014 13:56:03 +0000 (13:56 +0000)
committerIlya Tocar <tocarip@gcc.gnu.org>
Tue, 25 Nov 2014 13:56:03 +0000 (16:56 +0300)
gcc/
* gcc.c (handle_foffload_option): Remove unnecessary calls to strchr,
strlen, strncpy.
* lto-wrapper.c (append_offload_options): Likewise.

Co-Authored-By: Jakub Jelinek <jakub@redhat.com>
From-SVN: r218044

gcc/ChangeLog
gcc/gcc.c
gcc/lto-wrapper.c

index bed7cb86ed3d370fc8d391986020551210e29c12..a8b9f75af7fbd1e0088f9ff8f6e766189b4eda41 100644 (file)
@@ -1,3 +1,10 @@
+2014-11-25  Ilya Tocar  <ilya.tocar@intel.com>
+           Jakub Jelinek  <jakub@redhat.com>
+
+       * gcc.c (handle_foffload_option): Remove unnecessary calls to strchr,
+       strlen, strncpy.
+       * lto-wrapper.c (append_offload_options): Likewise.
+
 2014-11-25  Eric Botcazou  <ebotcazou@adacore.com>
 
        * config/rs6000/rs6000.c (rs6000_call_aix): For the AIX ABI, do not
index c6d1baf58dfeeffbc8c36f3245958e6ad0921598..b730ba53d7e33a051565643c397170c60e37a8ce 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -3384,11 +3384,11 @@ handle_foffload_option (const char *arg)
     {
       next = strchr (cur, ',');
       if (next == NULL)
-       next = strchr (cur, '\0');
+       next = end;
       next = (next > end) ? end : next;
 
       target = XNEWVEC (char, next - cur + 1);
-      strncpy (target, cur, next - cur);
+      memcpy (target, cur, next - cur);
       target[next - cur] = '\0';
 
       /* If 'disable' is passed to the option, stop parsing the option and clean
@@ -3408,8 +3408,7 @@ handle_foffload_option (const char *arg)
          if (n == NULL)
            n = strchr (c, '\0');
 
-         if (strlen (target) == (size_t) (n - c)
-             && strncmp (target, c, n - c) == 0)
+         if (next - cur == n - c && strncmp (target, c, n - c) == 0)
            break;
 
          c = *n ? n + 1 : NULL;
@@ -3420,7 +3419,10 @@ handle_foffload_option (const char *arg)
                     target);
 
       if (!offload_targets)
-       offload_targets = xstrdup (target);
+       {
+         offload_targets = target;
+         target = NULL;
+       }
       else
        {
          /* Check that the target hasn't already presented in the list.  */
@@ -3431,8 +3433,7 @@ handle_foffload_option (const char *arg)
              if (n == NULL)
                n = strchr (c, '\0');
 
-             if (strlen (target) == (size_t) (n - c)
-                 && strncmp (c, target, n - c) == 0)
+             if (next - cur == n - c && strncmp (c, target, n - c) == 0)
                break;
 
              c = n + 1;
@@ -3442,12 +3443,13 @@ handle_foffload_option (const char *arg)
          /* If duplicate is not found, append the target to the list.  */
          if (c > n)
            {
+             size_t offload_targets_len = strlen (offload_targets);
              offload_targets
                = XRESIZEVEC (char, offload_targets,
-                             strlen (offload_targets) + strlen (target) + 2);
-             if (strlen (offload_targets) != 0)
-               strcat (offload_targets, ":");
-             strcat (offload_targets, target);
+                             offload_targets_len + next - cur + 2);
+             if (offload_targets_len)
+               offload_targets[offload_targets_len++] = ':';
+             memcpy (offload_targets + offload_targets_len, target, next - cur);
            }
        }
 
index 6b417821295daad7183a1639849a85f052c44485..9a540b4ede5b128a669824171ba795cb47552df1 100644 (file)
@@ -587,7 +587,7 @@ append_offload_options (obstack *argv_obstack, const char *target,
            {
              next = strchr (cur, ',');
              if (next == NULL)
-               next = strchr (cur, '\0');
+               next = opts;
              next = (next > opts) ? opts : next;
 
              if (strlen (target) == (size_t) (next - cur)