From 5524af6e9bf23505139adf7152a22b4a0a65f66d Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Sun, 19 Dec 2004 02:40:40 +0000 Subject: * child_info.h (CURR_CHILD_INFO_MAGIC): Use updated value. * path.cc (path_conv::check): Check the output Win32 path for trailing spaces and dots, not the input path. Disallow all use of foo./bar since consistently getting this right is time consuming. Remove strange test for "unc\" since no one seems to know what it's for. --- winsup/cygwin/path.cc | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) (limited to 'winsup/cygwin/path.cc') diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index 2e4c725c7..55b40020e 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -546,25 +546,12 @@ path_conv::check (const char *src, unsigned opt, /* Detect if the user was looking for a directory. We have to strip the trailing slash initially while trying to add extensions but take it into account during processing */ - if (tail > path_copy + 1) + if (tail > path_copy + 1 && isslash (tail[-1])) { - if (isslash (tail[-1])) - { - need_directory = 1; - tail--; - } - /* Remove trailing dots and spaces which are ignored by Win32 functions but - not by native NT functions. */ - while (tail[-1] == '.' || tail[-1] == ' ') - tail--; - if (tail > path_copy + 1 && isslash (tail[-1])) - { - error = ENOENT; - return; - } + need_directory = 1; + *--tail = '\0'; } path_end = tail; - *tail = '\0'; /* Scan path_copy from right to left looking either for a symlink or an actual existing file. If an existing file is found, just @@ -835,6 +822,32 @@ out: if (dev.devn == FH_FS) { + if (strncmp (path, "\\\\.\\", 4)) + { + /* Windows ignores trailing dots and spaces */ + char *tail = NULL; + for (char *p = path; *p; p++) + if (*p != '.' && *p != ' ') + tail = NULL; + else if (p[1] == '\\') + { + error = ENOENT; + return; + } + else if (!tail) + tail = p; + + if (!tail) + /* nothing */; + else if (tail[-1] != '\\') + *tail = '\0'; + else + { + error = ENOENT; + return; + } + } + if (fs.update (path)) { debug_printf ("this->path(%s), has_acls(%d)", path, fs.has_acls ()); -- cgit v1.2.3