From: cgf AT cygnus DOT com (Christopher G. Faylor) Subject: Patch to fix "excessive bash delays" 23 Aug 1998 19:37:40 GMT Message-ID: <6rpr24$t2u$1@cronkite.cygnus.com> X-Newsreader: trn 4.0-test63 (15 March 1998) I did some digging around today to determine where bash was adding an extra '/' when HOME=='/'. The patch below should solve a couple of such instances. Adding an extra '/' to the beginning of a file name is problematic for Windows because it causes Windows to interpret the filespec as a network share, which means that accessing the file can result in excessive delays. This was most noticeable if a cygwin user did not have a /etc/passwd file causing bash to set the HOME environment variable to '/'. In this scenario, bash would look for things like: '//.bashrc' and '//.bash_history'. Most annoyingly it also periodically checks the file '/unknown/I have no name!' for mail. If the is '/' then this will revert to '//unknown/I have no name!'. So, a work around for this problem is to either set up an /etc/passwd file or explicitly set HOME to some directory besides '/'. Additionally, the MAIL_CHECK variable should be 'unset'. Or, you can apply the patch below to bash and rebuild bash.exe This patch is against Cygnus's version of 2.02.0. I don't know if it will patch cleanly against any other version. Index: general.c =================================================================== RCS file: /cvs/cvsfiles/devo/bash/general.c,v retrieving revision 1.3 diff -u -p -r1.3 general.c --- general.c 1998/06/11 04:32:40 1.3 +++ general.c 1998/08/23 19:15:34 @@ -742,7 +742,8 @@ full_pathname (file) return ((char *)NULL); } dlen = strlen (current_dir); - current_dir[dlen++] = '/'; + if (dlen > 1) + current_dir[dlen++] = '/'; /* Turn /foo/./bar into /foo/bar. */ if (file[0] == '.' && file[1] == '/') Index: lib/readline/tilde.c =================================================================== RCS file: /cvs/cvsfiles/devo/bash/lib/readline/tilde.c,v retrieving revision 1.3 diff -u -p -r1.3 tilde.c --- tilde.c 1998/06/11 04:33:17 1.3 +++ tilde.c 1998/08/23 19:15:34 @@ -232,11 +232,14 @@ tilde_expand (string) free (tilde_word); len = strlen (expansion); - if ((result_index + len + 1) > result_size) - result = xrealloc (result, 1 + (result_size += (len + 20))); + if (len > 1 || *expansion != '/' || *string != '/') + { + if ((result_index + len + 1) > result_size) + result = xrealloc (result, 1 + (result_size += (len + 20))); - strcpy (result + result_index, expansion); - result_index += len; + strcpy (result + result_index, expansion); + result_index += len; + } free (expansion); } -- cgf AT cygnus DOT com "Everything has a boolean value, if you stand http://www.cygnus.com/ far enough away from it." -- Galena Alyson Canada