summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--winsup/cygwin/ChangeLog5
-rw-r--r--winsup/cygwin/path.cc6
2 files changed, 10 insertions, 1 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index e05c12bbe..512fe72d8 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,5 +1,10 @@
2002-05-23 Christopher Faylor <cgf@redhat.com>
+ * path.cc (path_conv::check): Make sure any trailing path component is
+ part of potential normalized posix path.
+
+2002-05-23 Christopher Faylor <cgf@redhat.com>
+
* smallprint.c (__small_vsprintf): Implement '%o' after all these
years.
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. */