diff -urN -x .build -x .inst -x .sinst zsh-4.2.0-orig/Doc/Makefile.in zsh-4.2.0/Doc/Makefile.in --- zsh-4.2.0-orig/Doc/Makefile.in 2003-10-25 10:38:19.000000000 -0700 +++ zsh-4.2.0/Doc/Makefile.in 2004-04-05 12:17:29.724238400 -0700 @@ -40,7 +40,7 @@ MAKEINFO = makeinfo TEXI2DVI = texi2dvi DVIPS = dvips -TEXI2HTML = texi2html -expand info -split chapter +TEXI2HTML = texi2html -expandinfo -split_chapter .SUFFIXES: .yo .1 @@ -303,7 +303,7 @@ # install HTML manual install.html: html ${SHELL} $(sdir_top)/mkinstalldirs $(DESTDIR)$(htmldir) - for file in zsh*.html; do \ + for file in ${sdir}/zsh*.html; do \ $(INSTALL_DATA) $$file $(DESTDIR)$(htmldir) || exit 1; \ done .PHONY: install.html diff -urN -x .build -x .inst -x .sinst zsh-4.2.0-orig/Src/builtin.c zsh-4.2.0/Src/builtin.c --- zsh-4.2.0-orig/Src/builtin.c 2004-03-18 03:31:40.000000000 -0800 +++ zsh-4.2.0/Src/builtin.c 2004-04-05 12:17:30.014656000 -0700 @@ -927,7 +927,9 @@ * DOS style names with drives in them */ static char buf[PATH_MAX]; +#ifndef _SYS_CYGWIN_H void cygwin_conv_to_posix_path(const char *, char *); +#endif cygwin_conv_to_posix_path(dest, buf); dest = buf; @@ -1031,7 +1033,15 @@ /* handle directory prefix */ if (pfix && *pfix) { if (*pfix == '/') +#ifdef __CYGWIN__ +/* NB: Don't turn "/"+"bin" into "//"+"bin" by mistake! "//bin" may * + * not be what user really wants (probably wants "/bin"), but * + * "//bin" could be valid too (see fixdir())! This is primarily for * + * handling CDPATH correctly. */ + buf = tricat(pfix, ( pfix[1] == '\0' ? "" : "/" ), dest); +#else buf = tricat(pfix, "/", dest); +#endif else { int pfl = strlen(pfix); dlen = strlen(pwd); diff -urN -x .build -x .inst -x .sinst zsh-4.2.0-orig/Src/exec.c zsh-4.2.0/Src/exec.c --- zsh-4.2.0-orig/Src/exec.c 2004-03-18 03:48:42.000000000 -0800 +++ zsh-4.2.0/Src/exec.c 2004-04-05 12:17:30.204929600 -0700 @@ -3662,6 +3662,7 @@ { char **pp, buf[PATH_MAX]; off_t len; + off_t rlen; char *d; Eprog r; int fd; @@ -3681,12 +3682,12 @@ if ((len = lseek(fd, 0, 2)) != -1) { d = (char *) zalloc(len + 1); lseek(fd, 0, 0); - if (read(fd, d, len) == len) { + if ((rlen = read(fd, d, len)) >= 0) { char *oldscriptname = scriptname; close(fd); - d[len] = '\0'; - d = metafy(d, len, META_REALLOC); + d[rlen] = '\0'; + d = metafy(d, rlen, META_REALLOC); scriptname = dupstring(s); r = parse_string(d); diff -urN -x .build -x .inst -x .sinst zsh-4.2.0-orig/Src/main.c zsh-4.2.0/Src/main.c --- zsh-4.2.0-orig/Src/main.c 2000-08-02 11:01:51.000000000 -0700 +++ zsh-4.2.0/Src/main.c 2004-04-05 12:17:30.445275200 -0700 @@ -30,6 +30,62 @@ #include "zsh.mdh" #include "main.pro" +/* + * Support for Cygwin binary/text mode filesystems. + * Peter A. Castro + * + * This deserves some explaination, because it uses Cygwin specific + * runtime functions. + * + * Cygwin supports the notion of binary or text mode access to files + * based on the mount attributes of the filesystem. If a file is on + * a binary mounted filesystem, you get exactly what's in the file, CRLF's + * and all. If it's on a text mounted filesystem, Cygwin will strip out + * the CRs. This presents a problem because zsh code doesn't allow for + * CRLF's as line terminators. So, we must force all open files to be + * in text mode reguardless of the underlying filesystem attributes. + * However, we only want to do this for reading, not writing as we still + * want to write files in the mode of the filesystem. To do this, + * we have two options: augment all {f}open() calls to have O_TEXT added to + * the list of file mode options, or have the Cygwin runtime do it for us. + * I choose the latter. :) + * + * Cygwin's runtime provides pre-execution hooks which allow you to set + * various attributes for the process which effect how the process functions. + * One of these attributes controls how files are opened. I've set + * it up so that all files opened RDONLY will have the O_TEXT option set, + * thus forcing line termination manipulation. This seems to solve the + * problem (at least the Test suite runs clean :). + * + * Note: this may not work in later implementations. This will override + * all mode options passed into open(). Cygwin (really Windows) doesn't + * support all that much in options, so for now this is OK, but later on + * it may not, in which case O_TEXT will have to be added to all opens calls + * appropriately. + * + * This function is actually a hook in the Cygwin runtime which + * is called before the main of a program. Because it's part of the program + * pre-startup, it must be located in the program main and not in a DLL. + * It must also be made an export so the linker resolves this function to + * our code instead of the default Cygwin stub routine. + */ + +/**/ +#ifdef __CYGWIN__ +/**/ +mod_export void +cygwin_premain0 (int argc, char **argv, void *myself) +{ + static struct __cygwin_perfile pf[] = + { + {"", O_RDONLY | O_TEXT}, + {NULL, 0} + }; + cygwin_internal (CW_PERFILE, pf); +} +/**/ +#endif /* __CYGWIN__ */ + /**/ int main(int argc, char **argv) diff -urN -x .build -x .inst -x .sinst zsh-4.2.0-orig/Src/system.h zsh-4.2.0/Src/system.h --- zsh-4.2.0-orig/Src/system.h 2004-02-24 05:02:12.000000000 -0800 +++ zsh-4.2.0/Src/system.h 2004-04-05 12:17:30.655577600 -0700 @@ -675,6 +675,7 @@ #endif #ifdef __CYGWIN__ +# include # define IS_DIRSEP(c) ((c) == '/' || (c) == '\\') #else # define IS_DIRSEP(c) ((c) == '/') diff -urN -x .build -x .inst -x .sinst zsh-4.2.0-orig/configure zsh-4.2.0/configure --- zsh-4.2.0-orig/configure 2004-03-15 11:10:03.000000000 -0800 +++ zsh-4.2.0/configure 2004-04-05 12:17:31.016096000 -0700 @@ -13547,8 +13547,10 @@ zsh_cv_shared_environ="${zsh_cv_shared_environ=yes}" elif test "$host_os" = cygwin; then DL_EXT="${DL_EXT=dll}" - DLLD="${DLLD=dllwrap}" - DLLDFLAGS="${DLLDFLAGS=--export-all-symbols}" +##DLLD="${DLLD=dllwrap}" + DLLD="${DLLD=$CC}" +##DLLDFLAGS="${DLLDFLAGS=--export-all-symbols}" + DLLDFLAGS=${DLLDFLAGS=-shared -Wl,--export-all-symbols} zsh_cv_func_dlsym_needs_underscore=no DLLDFLAGS=${DLLDFLAGS=} EXTRA_LDFLAGS=${EXTRA_LDFLAGS=} diff -urN -x .build -x .inst -x .sinst zsh-4.2.0-orig/configure.ac zsh-4.2.0/configure.ac --- zsh-4.2.0-orig/configure.ac 2004-03-15 11:08:25.000000000 -0800 +++ zsh-4.2.0/configure.ac 2004-04-05 12:17:31.226398400 -0700 @@ -1934,8 +1934,10 @@ zsh_cv_shared_environ="${zsh_cv_shared_environ=yes}" elif test "$host_os" = cygwin; then DL_EXT="${DL_EXT=dll}" - DLLD="${DLLD=dllwrap}" - DLLDFLAGS="${DLLDFLAGS=--export-all-symbols}" +##DLLD="${DLLD=dllwrap}" + DLLD="${DLLD=$CC}" +##DLLDFLAGS="${DLLDFLAGS=--export-all-symbols}" + DLLDFLAGS=${DLLDFLAGS=-shared -Wl,--export-all-symbols} zsh_cv_func_dlsym_needs_underscore=no DLLDFLAGS=${DLLDFLAGS=} EXTRA_LDFLAGS=${EXTRA_LDFLAGS=}