From c38b10fa101227162ec08b2ecf1cd977c9380c4f Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 14 Apr 2009 03:17:21 +0000 Subject: [PATCH] PR ld/10047 * ldfile.c (find_scripts_dir): Use make_relative_prefix to find ldscripts in build tree. Don't repeat search for ../lib/ldscripts. --- ld/ChangeLog | 6 ++++++ ld/ldfile.c | 46 ++++++++++------------------------------------ 2 files changed, 16 insertions(+), 36 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index 58144b6b82a..6e7f2e8a510 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2009-04-14 Alan Modra + + PR ld/10047 + * ldfile.c (find_scripts_dir): Use make_relative_prefix to find + ldscripts in build tree. Don't repeat search for ../lib/ldscripts. + 2009-04-13 H.J. Lu * ldfile.c (ldfile_find_command_file): Revert the last change. diff --git a/ld/ldfile.c b/ld/ldfile.c index 422416a8b44..3c59a208196 100644 --- a/ld/ldfile.c +++ b/ld/ldfile.c @@ -1,6 +1,6 @@ /* Linker file opening and searching. Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002, - 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. + 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of the GNU Binutils. @@ -477,15 +477,12 @@ check_for_scripts_dir (char *dir) SCRIPTDIR (passed from Makefile) (adjusted according to the current location of the binary) SCRIPTDIR (passed from Makefile) - the dir where this program is (for using it from the build tree) - the dir where this program is/../lib - (for installing the tool suite elsewhere). */ + the dir where this program is (for using it from the build tree). */ static char * find_scripts_dir (void) { - char *end, *dir; - size_t dirlen; + char *dir; dir = make_relative_prefix (program_name, BINDIR, SCRIPTDIR); if (dir) @@ -508,37 +505,14 @@ find_scripts_dir (void) return SCRIPTDIR; /* Look for "ldscripts" in the dir where our binary is. */ - end = strrchr (program_name, '/'); -#ifdef HAVE_DOS_BASED_FILE_SYSTEM - { - /* We could have \foo\bar, or /foo\bar. */ - char *bslash = strrchr (program_name, '\\'); - - if (end == NULL || (bslash != NULL && bslash > end)) - end = bslash; - } -#endif + dir = make_relative_prefix (program_name, ".", "."); + if (dir) + { + if (check_for_scripts_dir (dir)) + return dir; + free (dir); + } - if (end == NULL) - /* Don't look for ldscripts in the current directory. There is - too much potential for confusion. */ - return NULL; - - dirlen = end - program_name; - /* Make a copy of program_name in dir. - Leave room for later "/../lib". */ - dir = xmalloc (dirlen + sizeof ("/../lib")); - strncpy (dir, program_name, dirlen); - dir[dirlen] = '\0'; - - if (check_for_scripts_dir (dir)) - return dir; - - /* Look for "ldscripts" in /../lib. */ - strcpy (dir + dirlen, "/../lib"); - if (check_for_scripts_dir (dir)) - return dir; - free (dir); return NULL; } -- 2.30.2