There are some problems with zsh's pathname handling that don't work when cygwin's (poorly thought out) drive letter hacks are in effect: 1) "///dir" is a valid path. builtin.c's fixdir() strips off double slashes, which breaks things. 2) If you chdir("..") while in //D you're put in "/" but "/D" is not a directory in "/". This breaks zgetdir(). (there is actually another bug in cygwin that breaks zgetdir(), but that is a moot point after my fix) The fixes: For #1, I just allow a leading // under cygwin. For #2, I just have zgetdir() call getcwd() under cygwin. I considered having zgetdir() use getcwd() for all systems that had it. I know the Linux kernel now has a getcwd() syscall, which is presumbably much faster than zgetdir(). But I backed down from this for fear that all the magic going on in zgetdir() works around bugs in some system's implementations of getcwd().