Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Humblet <phumblet@phumblet.no-ip.org>2004-09-23 04:32:08 +0400
committerPierre Humblet <phumblet@phumblet.no-ip.org>2004-09-23 04:32:08 +0400
commit20e474d7b8f70fd92c6159b0d001dded6ab77225 (patch)
treea1daae5f122020605770d711b7395244b490efcb
parent602de582680a23990c59abde8347417a67196425 (diff)
2004-09-22 Pierre Humblet <pierre.humblet@ieee.org>
* path.cc (normalize_win32_path): Only look for : in second position. Avoid infinite loop with names starting in double dots. (mount_info::conv_to_win32_path): Do not worry about a trailing dot. (hash_path_name): Ditto.
-rw-r--r--winsup/cygwin/ChangeLog7
-rw-r--r--winsup/cygwin/path.cc12
2 files changed, 12 insertions, 7 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 9627b7893..84cc74923 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,10 @@
+2004-09-22 Pierre Humblet <pierre.humblet@ieee.org>
+
+ * path.cc (normalize_win32_path): Only look for : in second position.
+ Avoid infinite loop with names starting in double dots.
+ (mount_info::conv_to_win32_path): Do not worry about a trailing dot.
+ (hash_path_name): Ditto.
+
2004-09-20 Christopher Faylor <cgf@timesys.com>
* exceptions.cc (sig_handle_tty_stop): Set flag earlier.
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index 769c197c4..4b922d7e2 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -978,7 +978,7 @@ normalize_win32_path (const char *src, char *dst, char **tail)
src += 2;
}
}
- else if (strchr (src, ':') == NULL && *src != '/')
+ else if (!isdrive(src) && *src != '/')
{
if (beg_src_slash)
dst += cygheap->cwd.get_drive (dst);
@@ -1023,6 +1023,7 @@ normalize_win32_path (const char *src, char *dst, char **tail)
int n = strspn (src, ".");
if (!src[n] || isdirsep (src[n])) /* just dots... */
return ENOENT;
+ *dst++ = *src++;
}
}
/* Otherwise, add char to result. */
@@ -1454,8 +1455,7 @@ mount_info::conv_to_win32_path (const char *src_path, char *dst, device& dev,
int n = mount_table->cygdrive_len - 1;
int unit;
- if (!src_path[n] ||
- (src_path[n] == '/' && src_path[n + 1] == '.' && !src_path[n + 2]))
+ if (!src_path[n])
{
unit = 0;
dst[0] = '\0';
@@ -3249,15 +3249,13 @@ hash_path_name (__ino64_t hash, const char *name)
}
hashit:
- /* Build up hash. Ignore single trailing slash or \a\b\ != \a\b or
- \a\b\. but allow a single \ if that's all there is. */
+ /* Build up hash. Name is already normalized */
do
{
int ch = cyg_tolower (*name);
hash = ch + (hash << 6) + (hash << 16) - hash;
}
- while (*++name != '\0' &&
- !(*name == '\\' && (!name[1] || (name[1] == '.' && !name[2]))));
+ while (*++name != '\0');
return hash;
}