diff options
author | Joern Rennecke <joern.rennecke@embecosm.com> | 2006-11-30 17:36:10 +0000 |
---|---|---|
committer | Joern Rennecke <joern.rennecke@embecosm.com> | 2006-11-30 17:36:10 +0000 |
commit | d8f813d40510580a04b30330c7d28fb57292c1ca (patch) | |
tree | 68a8985222695a89d22901ecf78edcd9d52515a9 | |
parent | 85411edae8f2463e9d5aa3c88a14c6ba6f1be5d7 (diff) | |
download | gdb-d8f813d40510580a04b30330c7d28fb57292c1ca.zip gdb-d8f813d40510580a04b30330c7d28fb57292c1ca.tar.gz gdb-d8f813d40510580a04b30330c7d28fb57292c1ca.tar.bz2 |
include:
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.
-rw-r--r-- | include/ChangeLog | 6 | ||||
-rw-r--r-- | include/libiberty.h | 7 | ||||
-rw-r--r-- | libiberty/ChangeLog | 10 | ||||
-rw-r--r-- | libiberty/make-relative-prefix.c | 49 |
4 files changed, 65 insertions, 7 deletions
diff --git a/include/ChangeLog b/include/ChangeLog index 8f827fa..e7e2895 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -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. diff --git a/include/libiberty.h b/include/libiberty.h index 1328d3e..27291c9 100644 --- a/include/libiberty.h +++ b/include/libiberty.h @@ -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; diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 592954b..4b27eb0 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -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. diff --git a/libiberty/make-relative-prefix.c b/libiberty/make-relative-prefix.c index 66ddcaa..4116ec9 100644 --- a/libiberty/make-relative-prefix.c +++ b/libiberty/make-relative-prefix.c @@ -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); +} + |