2006-05-03  Andrew Stubbs  <andrew.stubbs@st.com>
            J"orn Rennecke <joern.rennecke@st.com>

	PR driver/29931
	* libiberty.h (make_relative_prefix_ignore_links): Declare.

libiberty:
2006-05-03  Andrew Stubbs  <andrew.stubbs@st.com>
            J"orn Rennecke <joern.rennecke@st.com>

	PR driver/29931
	* make-relative-prefix.c (make_relative_prefix_1): New function,
	broken out of make_relative_prefix.  Make link resolution dependent
	on new parameter.
	(make_relative_prefix): Use make_relative_prefix_1.
	(make_relative_prefix_ignore_links): New function.
This commit is contained in:
Joern Rennecke 2006-11-30 17:36:10 +00:00
parent 85411edae8
commit d8f813d405
4 changed files with 65 additions and 7 deletions

View File

@ -1,3 +1,9 @@
2006-11-30 Andrew Stubbs <andrew.stubbs@st.com>
J"orn Rennecke <joern.rennecke@st.com>
PR driver/29931
* libiberty.h (make_relative_prefix_ignore_links): Declare.
2006-11-27 Bob Wilson <bob.wilson@acm.org>
* xtensa-config.h (XSHAL_ABI): New.

View File

@ -197,6 +197,13 @@ extern long get_run_time (void);
extern char *make_relative_prefix (const char *, const char *,
const char *) ATTRIBUTE_MALLOC;
/* Generate a relocated path to some installation directory without
attempting to follow any soft links. Allocates
return value using malloc. */
extern char *make_relative_prefix_ignore_links (const char *, const char *,
const char *) ATTRIBUTE_MALLOC;
/* Choose a temporary directory to use for scratch files. */
extern char *choose_temp_base (void) ATTRIBUTE_MALLOC;

View File

@ -1,3 +1,13 @@
2006-11-30 Andrew Stubbs <andrew.stubbs@st.com>
J"orn Rennecke <joern.rennecke@st.com>
PR driver/29931
* make-relative-prefix.c (make_relative_prefix_1): New function,
broken out of make_relative_prefix. Make link resolution dependent
on new parameter.
(make_relative_prefix): Use make_relative_prefix_1.
(make_relative_prefix_ignore_links): New function.
2006-11-08 Vladimir Prus <vladimir@codesourcery.com>
* pex-win32.c (no_suffixes): Remove.

View File

@ -1,6 +1,6 @@
/* Relative (relocatable) prefix support.
Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002 Free Software Foundation, Inc.
1999, 2000, 2001, 2002, 2006 Free Software Foundation, Inc.
This file is part of libiberty.
@ -217,9 +217,9 @@ free_split_directories (char **dirs)
If no relative prefix can be found, return NULL. */
char *
make_relative_prefix (const char *progname,
const char *bin_prefix, const char *prefix)
static char *
make_relative_prefix_1 (const char *progname, const char *bin_prefix,
const char *prefix, const int resolve_links)
{
char **prog_dirs, **bin_dirs, **prefix_dirs;
int prog_num, bin_num, prefix_num;
@ -289,9 +289,14 @@ make_relative_prefix (const char *progname,
}
}
full_progname = lrealpath (progname);
if (full_progname == NULL)
return NULL;
if ( resolve_links )
{
full_progname = lrealpath (progname);
if (full_progname == NULL)
return NULL;
}
else
full_progname = strdup(progname);
prog_dirs = split_directories (full_progname, &prog_num);
bin_dirs = split_directories (bin_prefix, &bin_num);
@ -387,3 +392,33 @@ make_relative_prefix (const char *progname,
return ret;
}
/* Do the full job, including symlink resolution.
This path will find files installed in the same place as the
program even when a soft link has been made to the program
from somwhere else. */
char *
make_relative_prefix (progname, bin_prefix, prefix)
const char *progname;
const char *bin_prefix;
const char *prefix;
{
return make_relative_prefix_1 (progname, bin_prefix, prefix, 1);
}
/* Make the relative pathname without attempting to resolve any links.
'..' etc may also be left in the pathname.
This will find the files the user meant the program to find if the
installation is patched together with soft links. */
char *
make_relative_prefix_ignore_links (progname, bin_prefix, prefix)
const char *progname;
const char *bin_prefix;
const char *prefix;
{
return make_relative_prefix_1 (progname, bin_prefix, prefix, 0);
}