diff options
Diffstat (limited to 'lib/sh/makepath.c')
| -rw-r--r-- | lib/sh/makepath.c | 38 | 
1 files changed, 24 insertions, 14 deletions
diff --git a/lib/sh/makepath.c b/lib/sh/makepath.c index c496154..43dbab2 100644 --- a/lib/sh/makepath.c +++ b/lib/sh/makepath.c @@ -4,19 +4,19 @@     This file is part of GNU Bash, the Bourne Again SHell. -   Bash is free software; you can redistribute it and/or modify it under -   the terms of the GNU General Public License as published by the Free -   Software Foundation; either version 2, or (at your option) any later -   version. +   Bash is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. -   Bash is distributed in the hope that it will be useful, but WITHOUT ANY -   WARRANTY; without even the implied warranty of MERCHANTABILITY or -   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License -   for more details. +   Bash is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. -   You should have received a copy of the GNU General Public License along -   with Bash; see the file COPYING.  If not, write to the Free Software -   Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ +   You should have received a copy of the GNU General Public License +   along with Bash.  If not, see <http://www.gnu.org/licenses/>. +*/  #include <config.h> @@ -42,17 +42,21 @@  #  define MP_DOTILDE	0x01  #  define MP_DOCWD	0x02  #  define MP_RMDOT	0x04 +#  define MP_IGNDOT	0x08  #endif  extern char *get_working_directory __P((char *)); +static char *nullpath = ""; +  /* Take PATH, an element from, e.g., $CDPATH, and DIR, a directory name,     and paste them together into PATH/DIR.  Tilde expansion is performed on     PATH if (flags & MP_DOTILDE) is non-zero.  If PATH is NULL or the empty     string, it is converted to the current directory.  A full pathname is     used if (flags & MP_DOCWD) is non-zero, otherwise `./' is used.  If     (flags & MP_RMDOT) is non-zero, any `./' is removed from the beginning -   of DIR. */ +   of DIR.  If (flags & MP_IGNDOT) is non-zero, a PATH that is "." or "./" +   is ignored. */  #define MAKEDOT() \    do { \ @@ -89,6 +93,12 @@ sh_makepath (path, dir, flags)        else  	MAKEDOT();      } +  else if ((flags & MP_IGNDOT) && path[0] == '.' && (path[1] == '\0' || +						     path[1] == '/' && path[2] == '\0')) +    { +      xpath = nullpath; +      pathlen = 0; +    }    else      {        xpath = ((flags & MP_DOTILDE) && *path == '~') ? bash_tilde_expand (path, 0) : (char *)path; @@ -107,12 +117,12 @@ sh_makepath (path, dir, flags)    s = xpath;    while (*s)      *r++ = *s++; -  if (s[-1] != '/') +  if (s > xpath && s[-1] != '/')      *r++ = '/';          s = xdir;    while (*r++ = *s++)      ; -  if (xpath != path) +  if (xpath != path && xpath != nullpath)      free (xpath);    return (ret);  }  | 
