diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cd.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/cd.c b/src/cd.c index 2d9d4b5..a4e024d 100644 --- a/src/cd.c +++ b/src/cd.c @@ -38,6 +38,9 @@ #include <string.h> #include <unistd.h> #include <limits.h> +#ifdef __CYGWIN__ +#include <sys/cygwin.h> +#endif /* * The cd and pwd commands. @@ -194,6 +197,17 @@ updatepwd(const char *dir) char *cdcomppath; const char *lim; +#ifdef __CYGWIN__ + /* On cygwin, thanks to drive letters, some absolute paths do + not begin with slash; but cygwin includes a function that + forces normalization to the posix form */ + char pathbuf[PATH_MAX]; + if (cygwin_conv_path(CCP_WIN_A_TO_POSIX | CCP_RELATIVE, dir, pathbuf, + sizeof(pathbuf)) < 0) + sh_error("can't normalize %s", dir); + dir = pathbuf; +#endif + cdcomppath = sstrdup(dir); STARTSTACKSTR(new); if (*dir != '/') { |