13389: normalize path in cd_do_chdir on Cygwin to get rid of DOS names

This commit is contained in:
Andrey Borzenkov 2001-01-26 12:47:37 +00:00
parent 193846af84
commit e28d948e92
2 changed files with 28 additions and 6 deletions

View file

@ -1,3 +1,8 @@
2001-01-26 Andrej Borsenkow <Andrej.Borsenkow@mow.siemens.ru>
* 13389: Src/builtin.c: on Cygwin convert path to posix form in
cd_do_chdir() to avoid dealing with driver letters
2001-01-25 Sven Wischnowsky <wischnow@zsh.org>
* 13388: Src/Zle/compmatch.c: fix for mergin two CLF_MID entries

View file

@ -836,14 +836,31 @@ cd_do_chdir(char *cnam, char *dest, int hard)
{
char **pp, *ret;
int hasdot = 0, eno = ENOENT;
/* nocdpath indicates that cdpath should not be used. This is the case iff
dest is a relative path whose first segment is . or .., but if the path is
absolute then cdpath won't be used anyway. */
int nocdpath = dest[0] == '.' &&
(dest[1] == '/' || !dest[1] || (dest[1] == '.' &&
/*
* nocdpath indicates that cdpath should not be used.
* This is the case iff dest is a relative path
* whose first segment is . or .., but if the path is
* absolute then cdpath won't be used anyway.
*/
int nocdpath;
#ifdef __CYGWIN__
/*
* Normalize path under Cygwin to avoid messing with
* DOS style names with drives in them
*/
static char buf[PATH_MAX];
void cygwin_conv_to_posix_path(const char *, char *);
cygwin_conv_to_posix_path(dest, buf);
dest = buf;
#endif
nocdpath = dest[0] == '.' &&
(dest[1] == '/' || !dest[1] || (dest[1] == '.' &&
(dest[2] == '/' || !dest[2])));
/* if we have an absolute path, use it as-is only */
/*
* If we have an absolute path, use it as-is only
*/
if (*dest == '/') {
if ((ret = cd_try_chdir(NULL, dest, hard)))
return ret;