This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Avoid static buffers for paths and EXTRA_SHLIB_EXTENSION fix


	* ldfile.c (ldfile_open_file_search): Use concat.
	(try_open): Don't use a fixed size pathname buffer.
	(ldfile_find_command_file): Likewise.
	* emultempl/elf32.em (gld${EMULATION_NAME}_open_dynamic_archive): If
	using EXTRA_SHLIB_EXTENSION, don't open twice.

Index: ld/ldfile.c
===================================================================
RCS file: /cvs/src/src/ld/ldfile.c,v
retrieving revision 1.45
diff -u -p -r1.45 ldfile.c
--- ld/ldfile.c	15 Feb 2008 03:35:53 -0000	1.45
+++ ld/ldfile.c	8 Aug 2008 07:29:52 -0000
@@ -343,19 +343,12 @@ ldfile_open_file_search (const char *arc
 	    }
 	}
 
-      string = xmalloc (strlen (search->name)
-			+ strlen (slash)
-			+ strlen (lib)
-			+ strlen (entry->filename)
-			+ strlen (arch)
-			+ strlen (suffix)
-			+ 1);
-
       if (entry->is_archive)
-	sprintf (string, "%s%s%s%s%s%s", search->name, slash,
-		 lib, entry->filename, arch, suffix);
+	string = concat (search->name, slash, lib, entry->filename,
+			 arch, suffix, (const char *) NULL);
       else
-	sprintf (string, "%s%s%s", search->name, slash, entry->filename);
+	string = concat (search->name, slash, entry->filename,
+			 (const char *) 0);
 
       if (ldfile_try_open_bfd (string, entry))
 	{
@@ -429,7 +422,6 @@ static FILE *
 try_open (const char *name, const char *exten)
 {
   FILE *result;
-  char buff[1000];
 
   result = fopen (name, "r");
 
@@ -446,7 +438,9 @@ try_open (const char *name, const char *
 
   if (*exten)
     {
-      sprintf (buff, "%s%s", name, exten);
+      char *buff;
+
+      buff = concat (name, exten, (const char *) NULL);
       result = fopen (buff, "r");
 
       if (trace_file_tries)
@@ -456,6 +450,7 @@ try_open (const char *name, const char *
 	  else
 	    info_msg (_("opened script file %s\n"), buff);
 	}
+      free (buff);
     }
 
   return result;
@@ -469,7 +464,6 @@ ldfile_find_command_file (const char *na
 {
   search_dirs_type *search;
   FILE *result;
-  char buffer[1000];
 
   /* First try raw name.  */
   result = try_open (name, "");
@@ -478,9 +472,11 @@ ldfile_find_command_file (const char *na
       /* Try now prefixes.  */
       for (search = search_head; search != NULL; search = search->next)
 	{
-	  sprintf (buffer, "%s%s%s", search->name, slash, name);
+	  char *buffer;
 
+	  buffer = concat (search->name, slash, name, (const char *) NULL);
 	  result = try_open (buffer, extend);
+	  free (buffer);
 	  if (result)
 	    break;
 	}
Index: ld/emultempl/elf32.em
===================================================================
RCS file: /cvs/src/src/ld/emultempl/elf32.em,v
retrieving revision 1.190
diff -u -p -r1.190 elf32.em
--- ld/emultempl/elf32.em	15 Feb 2008 03:35:53 -0000	1.190
+++ ld/emultempl/elf32.em	8 Aug 2008 07:29:53 -0000
@@ -1516,8 +1516,9 @@ gld${EMULATION_NAME}_open_dynamic_archiv
   /* Try the .so extension first.  If that fails build a new filename
      using EXTRA_SHLIB_EXTENSION.  */
   if (! ldfile_try_open_bfd (string, entry))
-    sprintf (string, "%s/lib%s%s%s", search->name,
-	     filename, arch, EXTRA_SHLIB_EXTENSION);
+    {
+      sprintf (string, "%s/lib%s%s%s", search->name,
+	       filename, arch, EXTRA_SHLIB_EXTENSION);
 #endif
 
   if (! ldfile_try_open_bfd (string, entry))
@@ -1525,6 +1526,9 @@ gld${EMULATION_NAME}_open_dynamic_archiv
       free (string);
       return FALSE;
     }
+#ifdef EXTRA_SHLIB_EXTENSION
+    }
+#endif
 
   entry->filename = string;
 
-- 
Alan Modra
Australia Development Lab, IBM


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]