This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Avoid static buffers for paths and EXTRA_SHLIB_EXTENSION fix
- From: Alan Modra <amodra at bigpond dot net dot au>
- To: binutils at sourceware dot org
- Date: Fri, 8 Aug 2008 17:36:04 +0930
- Subject: 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