From 6e08ecd16c43f224aa7ed4f8fa213ad0e530da0f Mon Sep 17 00:00:00 2001
From: Andrew Pinski <apinski@apple.com>
Date: Mon, 6 Oct 2003 01:36:13 +0000
Subject: [PATCH] darwin.c (machopic_non_lazy_ptr_name): Change strcat to
 memcpy and add length together.

	* config/darwin.c (machopic_non_lazy_ptr_name):
	Change strcat to memcpy and add length together.
	(machopic_stub_name): Likewise.

From-SVN: r72129
---
 gcc/ChangeLog       |  6 ++++++
 gcc/config/darwin.c | 51 +++++++++++++++++++++++++++++++++------------
 2 files changed, 44 insertions(+), 13 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ac396db1b11b..ea5a5708b553 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2003-10-05  Andrew Pinski <apinski@apple.com>
+
+	* config/darwin.c (machopic_non_lazy_ptr_name): 
+	Change strcat to memcpy and add length together.
+	(machopic_stub_name): Likewise.
+
 2003-10-05  Kaz Kojima  <kkojima@gcc.gnu.org>
 
 	* config/sh/linux.h (MD_FALLBACK_FRAME_STATE_FOR): Handle new
diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c
index f701dcec7955..85c00ba2523a 100644
--- a/gcc/config/darwin.c
+++ b/gcc/config/darwin.c
@@ -294,20 +294,28 @@ machopic_non_lazy_ptr_name (const char *name)
 
   {
     char *buffer;
+    int namelen = strlen (name);
+    int bufferlen = 0;
     tree ptr_name;
 
-    buffer = alloca (strlen (name) + 20);
+    buffer = alloca (namelen + strlen("$non_lazy_ptr") + 5);
 
     strcpy (buffer, "&L");
+    bufferlen = 2;
     if (name[0] == '*')
-      strcat (buffer, name+1);
+      {
+        memcpy (buffer+bufferlen, name+1, namelen-1+1);
+        bufferlen += namelen-1;
+      }
     else
       {
-	strcat (buffer, "_");
-	strcat (buffer, name);
+	buffer[bufferlen] = '_';
+	memcpy (buffer+bufferlen+1, name, namelen+1);
+        bufferlen += namelen;
       }
 
-    strcat (buffer, "$non_lazy_ptr");
+    memcpy (buffer + bufferlen, "$non_lazy_ptr", strlen("$non_lazy_ptr")+1);
+    bufferlen += strlen("$non_lazy_ptr");
     ptr_name = get_identifier (buffer);
 
     machopic_non_lazy_pointers
@@ -351,29 +359,46 @@ machopic_stub_name (const char *name)
 
   {
     char *buffer;
+    int bufferlen = 0;
+    int namelen = strlen (name);
     tree ptr_name;
     int needs_quotes = name_needs_quotes (name);
 
-    buffer = alloca (strlen (name) + 20);
+    buffer = alloca (namelen + 20);
 
     if (needs_quotes)
-      strcpy (buffer, "&\"L");
+      {
+        strcpy (buffer, "&\"L");
+        bufferlen = strlen("&\"L");
+      }
     else
-      strcpy (buffer, "&L");
+      {
+        strcpy (buffer, "&L");
+        bufferlen = strlen("&L");
+      }
+    
     if (name[0] == '*')
       {
-	strcat (buffer, name+1);
+	memcpy (buffer + bufferlen, name+1, namelen - 1 +1);
+        bufferlen += namelen - 1;
       }
     else
       {
-	strcat (buffer, "_");
-	strcat (buffer, name);
+	buffer[bufferlen] = '_';
+	memcpy (buffer + bufferlen +1, name, namelen+1);
+        bufferlen += namelen;
       }
 
     if (needs_quotes)
-      strcat (buffer, "$stub\"");
+      {
+        memcpy (buffer + bufferlen, "$stub\"", strlen("$stub\""));
+        bufferlen += strlen("$stub\"");
+      }
     else
-      strcat (buffer, "$stub");
+      {
+        memcpy (buffer + bufferlen, "$stub", strlen("$stub"));
+        bufferlen += strlen("$stub");
+      }
     ptr_name = get_identifier (buffer);
 
     machopic_stubs = tree_cons (ptr_name, ident, machopic_stubs);
-- 
GitLab