aboutsummaryrefslogtreecommitdiff
path: root/winsup/cygwin/path.cc
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2001-11-24 03:35:58 +0000
committerChristopher Faylor <me@cgf.cx>2001-11-24 03:35:58 +0000
commit4e5289d84836889b172e4a31c76afb618f168b31 (patch)
treebc9d067dd6494fa681880ab6a0c6597799ea77e6 /winsup/cygwin/path.cc
parentc7cf3563f0323153b364b7c95eedf67218ce3b26 (diff)
downloadnewlib-4e5289d84836889b172e4a31c76afb618f168b31.zip
newlib-4e5289d84836889b172e4a31c76afb618f168b31.tar.gz
newlib-4e5289d84836889b172e4a31c76afb618f168b31.tar.bz2
* path.cc (chdir): Allow 'cd /cygdrive'.
Diffstat (limited to 'winsup/cygwin/path.cc')
-rw-r--r--winsup/cygwin/path.cc19
1 files changed, 13 insertions, 6 deletions
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index 6efdf7d..e818ed9 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -3223,7 +3223,7 @@ chdir (const char *in_dir)
return -1;
}
- char *native_dir = path.get_win32 ();
+ const char *native_dir = path.get_win32 ();
/* Check to see if path translates to something like C:.
If it does, append a \ to the native directory specification to
@@ -3231,10 +3231,17 @@ chdir (const char *in_dir)
the last directory visited on the given drive. */
if (isdrive (native_dir) && !native_dir[2])
{
- native_dir[2] = '\\';
- native_dir[3] = '\0';
+ path.get_win32 ()[2] = '\\';
+ path.get_win32 ()[3] = '\0';
+ }
+ int res;
+ if (path.get_devn () != FH_CYGDRIVE)
+ res = SetCurrentDirectory (native_dir) ? 0 : -1;
+ else
+ {
+ native_dir = "c:\\";
+ res = 0;
}
- int res = SetCurrentDirectoryA (native_dir) ? 0 : -1;
/* If res < 0, we didn't change to a new directory.
Otherwise, set the current windows and posix directory cache from input.
@@ -3250,9 +3257,9 @@ chdir (const char *in_dir)
__seterrno ();
else if (!path.has_symlinks () && strpbrk (dir, ":\\") == NULL
&& pcheck_case == PCHECK_RELAXED)
- cygheap->cwd.set (path, dir);
+ cygheap->cwd.set (native_dir, dir);
else
- cygheap->cwd.set (path, NULL);
+ cygheap->cwd.set (native_dir, NULL);
/* Note that we're accessing cwd.posix without a lock here. I didn't think
it was worth locking just for strace. */