diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index e1cd49b94..e32840c6c 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,7 @@ +Fri Jun 15 14:34:19 2001 Christopher Faylor + + * path.cc (path_conv::check): Deal more robustly with foo/ behavior. + Fri Jun 15 11:15:00 2001 Corinna Vinschen * fhandler_tape.cc (fhandler_dev_tape::tape_status): Set size diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index cffbecebd..414efcf11 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -411,18 +411,18 @@ path_conv::check (const char *src, unsigned opt, { MALLOC_CHECK; assert (src); - char *p = strrchr (src, '/'); + + char *p = strrchr (src, '\0'); /* Detect if the user was looking for a directory. We have to strip the trailing slash initially and add it back on at the end due to Windows brain damage. */ - if (p) + if (--p > src) { - if (p[1] == '\0' || strcmp (p, "/.") == 0) + if (isdirsep (*p)) + need_directory = 1; + else if (--p > src && p[1] == '.' && isdirsep (*p)) need_directory = 1; } - else if ((p = strrchr (src, '\\')) && - (p[1] == '\0' || strcmp (p, "\\.") == 0)) - need_directory = 1; is_relpath = !isabspath (src); error = normalize_posix_path (src, path_copy);