From b4bb31ad55c8e71e7a6e2568f7fba3f395d513ba Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Thu, 23 May 2002 20:01:46 +0000 Subject: [PATCH] * path.cc (path_conv::check): Make sure any trailing path component is part of potential normalized posix path. --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/path.cc | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index e05c12bbe..512fe72d8 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2002-05-23 Christopher Faylor + + * path.cc (path_conv::check): Make sure any trailing path component is + part of potential normalized posix path. + 2002-05-23 Christopher Faylor * smallprint.c (__small_vsprintf): Implement '%o' after all these diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index 2f2c19b61..9ae5df8c7 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -408,6 +408,7 @@ path_conv::check (const char *src, unsigned opt, bool need_directory = 0; bool saw_symlinks = 0; int is_relpath; + char *tail; sigframe thisframe (mainthread); #if 0 @@ -463,7 +464,7 @@ path_conv::check (const char *src, unsigned opt, if (error) return; - char *tail = strchr (path_copy, '\0'); // Point to end of copy + tail = strchr (path_copy, '\0'); // Point to end of copy char *path_end = tail; tail[1] = '\0'; @@ -726,8 +727,11 @@ path_conv::check (const char *src, unsigned opt, out: if (opt & PC_POSIX) { + if (tail[1] != '\0') + *tail = '/'; normalized_path = cstrdup (path_copy); debug_printf ("path_copy %s", path_copy); + opt ^= PC_POSIX; } /* Deal with Windows stupidity which considers filename\. to be valid even when "filename" is not a directory. */