Hi Folks,
I finally got down to looking at how to fix this in dash and came up
with the attached patch (against dash-0.5.7). It's simple enough and so
cd now works.
Please consider this for Cygwin.
Thanks!
-Edward
On 03/12/2011 5:11 PM, Eric Blake wrote:
On 03/05/2010 10:20 AM, Corinna Vinschen wrote:
Rounding out a (super-old) thread on my dash todo list...
$ dash
$ cd /c
$ ls -d W*
WINDOWS
$ cd c:/WINDOWS
cd: 3: can't cd to c:/WINDOWS
Let's rule out bash vs. dash complexities, and first focus on whether
cygwin1.dll might be at fault.
Works fine in Cygwin, I just tested it:
...
$ gcc -g -o chdir chdir.c
$ ./chdir C:/Windows
pwd: /cygdrive/c/Windows
It's a problem in dash apparently.
I finally spent time in gdb figuring out what's going on.
The problem is that dash tries to convert c:/windows to an absolute
path, since it doesn't start with /. I suppose I could teach dash to
recognize [letter]:/ as absolute paths, although that makes dash larger,
and puts a burden on me (since I can guarantee upstream dash won't
accept such a patch).
I just don't care enough for DOS paths so I won't fix.
Me neither. And since you can use /cygdrive/c, not c:/, I won't bother
to fix it.
--- src/cd.c 2011-03-15 03:18:06.000000000 -0400
+++ src/cd.new.c 2013-03-28 11:03:32.649576500 -0400
@@ -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,11 @@
char *cdcomppath;
const char *lim;
+#ifdef __CYGWIN__
+ char pathbuf[PATH_MAX + 1];
+ cygwin_conv_to_full_posix_path (dir, pathbuf);
+ dir = pathbuf;
+#endif
cdcomppath = sstrdup(dir);
STARTSTACKSTR(new);
if (*dir != '/') {
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple