* path.cc (chdir): Allow 'cd /cygdrive'.

This commit is contained in:
Christopher Faylor 2001-11-24 03:35:58 +00:00
parent c7cf3563f0
commit 4e5289d848
2 changed files with 17 additions and 6 deletions

View File

@ -1,3 +1,7 @@
2001-11-23 Christopher Faylor <cgf@redhat.com>
* path.cc (chdir): Allow 'cd /cygdrive'.
2001-11-23 Christopher Faylor <cgf@redhat.com> 2001-11-23 Christopher Faylor <cgf@redhat.com>
* dtable.cc (dtable::vfork_parent_restore): Add debugging statement. * dtable.cc (dtable::vfork_parent_restore): Add debugging statement.

View File

@ -3223,7 +3223,7 @@ chdir (const char *in_dir)
return -1; 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:. /* Check to see if path translates to something like C:.
If it does, append a \ to the native directory specification to 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. */ the last directory visited on the given drive. */
if (isdrive (native_dir) && !native_dir[2]) if (isdrive (native_dir) && !native_dir[2])
{ {
native_dir[2] = '\\'; path.get_win32 ()[2] = '\\';
native_dir[3] = '\0'; 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. /* If res < 0, we didn't change to a new directory.
Otherwise, set the current windows and posix directory cache from input. Otherwise, set the current windows and posix directory cache from input.
@ -3250,9 +3257,9 @@ chdir (const char *in_dir)
__seterrno (); __seterrno ();
else if (!path.has_symlinks () && strpbrk (dir, ":\\") == NULL else if (!path.has_symlinks () && strpbrk (dir, ":\\") == NULL
&& pcheck_case == PCHECK_RELAXED) && pcheck_case == PCHECK_RELAXED)
cygheap->cwd.set (path, dir); cygheap->cwd.set (native_dir, dir);
else 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 /* Note that we're accessing cwd.posix without a lock here. I didn't think
it was worth locking just for strace. */ it was worth locking just for strace. */