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:
authorCorinna Vinschen <corinna@vinschen.de>2008-05-13 17:44:04 +0400
committerCorinna Vinschen <corinna@vinschen.de>2008-05-13 17:44:04 +0400
commita9e9da89fa1cb146f1dbefc67f71e74eb4e0e179 (patch)
tree136a1e8b214c5478774b58203414dca8981c54c7
parenta065930a3ad29db593857c3807ebe9deacb5321a (diff)
* path.cc (path_conv::set_normalized_path): Drop strip_tail argument.
Never strip trailing dots and spaces. * (path_conv::check): Accomodate above change. * path.h (path_conv::operator=): Ditto * dtable.cc (build_fh_dev): Ditto. * fhandler.h (fhandler_base::set_name): Ditto. * path.cc (transform_chars): Disable converting trailing dots and spaces. * path.cc (path_conv::check): Remove two disabled code snippets.
-rw-r--r--winsup/cygwin/ChangeLog14
-rw-r--r--winsup/cygwin/dtable.cc4
-rw-r--r--winsup/cygwin/fhandler.h2
-rw-r--r--winsup/cygwin/path.cc49
-rw-r--r--winsup/cygwin/path.h4
5 files changed, 26 insertions, 47 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index a1df7692d..d65a958ed 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,5 +1,19 @@
2008-05-13 Corinna Vinschen <corinna@vinschen.de>
+ * path.cc (path_conv::set_normalized_path): Drop strip_tail argument.
+ Never strip trailing dots and spaces.
+ * (path_conv::check): Accomodate above change.
+ * path.h (path_conv::operator=): Ditto
+ * dtable.cc (build_fh_dev): Ditto.
+ * fhandler.h (fhandler_base::set_name): Ditto.
+
+ * path.cc (transform_chars): Disable converting trailing dots and
+ spaces.
+
+ * path.cc (path_conv::check): Remove two disabled code snippets.
+
+2008-05-13 Corinna Vinschen <corinna@vinschen.de>
+
* random.cc (initstate): Align to POSIX definition.
(setstate): Ditto.
diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc
index 2192bcf09..7f997d479 100644
--- a/winsup/cygwin/dtable.cc
+++ b/winsup/cygwin/dtable.cc
@@ -396,9 +396,9 @@ build_fh_dev (const device& dev, const char *unix_name)
{
path_conv pc (dev);
if (unix_name)
- pc.set_normalized_path (unix_name, false);
+ pc.set_normalized_path (unix_name);
else
- pc.set_normalized_path (dev.name, false);
+ pc.set_normalized_path (dev.name);
return build_fh_pc (pc);
}
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index ee08ccd9f..89970b605 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -153,7 +153,7 @@ class fhandler_base
path_conv pc;
virtual void set_name (path_conv &pc);
- virtual void set_name (const char *s) {pc.set_normalized_path (s, false);}
+ virtual void set_name (const char *s) {pc.set_normalized_path (s);}
int error () const {return pc.error;}
void set_error (int error) {pc.error = error;}
bool exists () const {return pc.exists ();}
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index 01847c742..1c1217d9d 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -531,17 +531,9 @@ path_conv::fillin (HANDLE h)
}
void
-path_conv::set_normalized_path (const char *path_copy, bool strip_tail)
+path_conv::set_normalized_path (const char *path_copy)
{
char *p = strchr (path_copy, '\0');
-
- if (strip_tail)
- {
- while (*--p == '.' || *p == ' ')
- continue;
- *++p = '\0';
- }
-
size_t n = 1 + p - path_copy;
normalized_path = path + sizeof (path) - n;
@@ -605,10 +597,14 @@ transform_chars (PUNICODE_STRING upath, USHORT start_idx, bool managed)
for (buf += start_idx; buf <= end; ++buf)
if (*buf < 128)
*buf = tfx[*buf];
+#if 0
/* Win32 can't handle trailing dots and spaces. Transform the last of them
to the private use area, too, to create a valid Win32 filename. */
+ if (*end == L'\\')
+ --end;
if (*end == L'.' || *end == L' ')
*end |= 0xf000;
+#endif
}
PUNICODE_STRING
@@ -1171,7 +1167,6 @@ virtual_component_retry:
add_ext_from_sym (sym);
out:
- bool strip_tail = false;
if (dev.devn == FH_NETDRIVE && component)
{
/* This case indicates a non-existant resp. a non-retrievable
@@ -1203,35 +1198,10 @@ out:
{
if (strncmp (path, "\\\\.\\", 4))
{
-#if 0
- /* Windows ignores trailing dots and spaces in the last path
- component, and ignores exactly one trailing dot in inner
- path components. */
- char *tail = NULL;
- for (char *p = path; *p; p++)
- {
- if (*p != '.' && *p != ' ')
- tail = NULL;
- else if (!tail)
- tail = p;
- if (tail && p[1] == '\\')
- {
- if (p > tail || *tail != '.')
- {
- error = ENOENT;
- return;
- }
- tail = NULL;
- }
- }
-#endif
if (!tail || tail == path)
/* nothing */;
else if (tail[-1] != '\\')
- {
- *tail = '\0';
- strip_tail = true;
- }
+ *tail = '\0';
else
{
error = ENOENT;
@@ -1255,11 +1225,6 @@ out:
set_exec (0);
}
-#if 0
- if (issocket ())
- devn = FH_SOCKET;
-#endif
-
if (opt & PC_NOFULL)
{
if (is_relpath)
@@ -1296,7 +1261,7 @@ out:
{
if (tail < path_end && tail > path_copy + 1)
*tail = '/';
- set_normalized_path (path_copy, strip_tail);
+ set_normalized_path (path_copy);
if (is_msdos && !(opt & PC_NOWARN))
warn_msdos (src);
}
diff --git a/winsup/cygwin/path.h b/winsup/cygwin/path.h
index e121280ce..ab6dda79a 100644
--- a/winsup/cygwin/path.h
+++ b/winsup/cygwin/path.h
@@ -253,7 +253,7 @@ class path_conv
path_conv &operator =(path_conv &pc)
{
memcpy (this, &pc, pc.size ());
- set_normalized_path (pc.normalized_path, false);
+ set_normalized_path (pc.normalized_path);
wide_path = NULL;
return *this;
}
@@ -280,7 +280,7 @@ class path_conv
unsigned __stdcall ndisk_links (DWORD);
char *normalized_path;
size_t normalized_path_size;
- void set_normalized_path (const char *, bool) __attribute__ ((regparm (3)));
+ void set_normalized_path (const char *) __attribute__ ((regparm (2)));
DWORD get_symlink_length () { return symlink_length; };
private:
DWORD symlink_length;