diff options
Diffstat (limited to 'libiberty/make-relative-prefix.c')
| -rw-r--r-- | libiberty/make-relative-prefix.c | 46 | 
1 files changed, 39 insertions, 7 deletions
| diff --git a/libiberty/make-relative-prefix.c b/libiberty/make-relative-prefix.c index 66ddcaa471bf..037809e34edf 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,30 @@ 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 (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 (const char *progname, +				   const char *bin_prefix, +				   const char *prefix) +{ +  return make_relative_prefix_1 (progname, bin_prefix, prefix, 0); +} + | 
