]> sourceware.org Git - newlib-cygwin.git/commitdiff
* path.cc (dot_special_chars): New global variable.
authorChristopher Faylor <me@cgf.cx>
Wed, 29 Oct 2003 01:15:12 +0000 (01:15 +0000)
committerChristopher Faylor <me@cgf.cx>
Wed, 29 Oct 2003 01:15:12 +0000 (01:15 +0000)
(special_name): Make files ending in "." special.
(fnunmunge): Allow encoded ".".
(mount_item::fnmunge): Handle trailing ".".

winsup/cygwin/ChangeLog
winsup/cygwin/path.cc

index 746247e948daa6f45139dfab80fdea05179fb553..f152be832bf3554cd216b387cd947ba84ad3ad38 100644 (file)
@@ -1,3 +1,10 @@
+2003-10-28  Igor Pechtchanski  <pechtcha@cs.nyu.edu>
+
+       * path.cc (dot_special_chars): New global variable.
+       (special_name): Make files ending in "." special.
+       (fnunmunge): Allow encoded ".".
+       (mount_item::fnmunge): Handle trailing ".".
+
 2003-10-28  Christopher Faylor  <cgf@redhat.com>
 
        * include/stdint.h: Duplicate below effort for rest of *64_*.
index b759d611c15088462d926cc9ac6f3c515236d924..499ccd0970bee5475a5e2d35b3f79e41e8afd326 100644 (file)
@@ -1141,7 +1141,8 @@ set_flags (unsigned *flags, unsigned val)
     }
 }
 
-static char special_chars[] =
+static char dot_special_chars[] =
+    "."
     "\001" "\002" "\003" "\004" "\005" "\006" "\007" "\010"
     "\011" "\012" "\013" "\014" "\015" "\016" "\017" "\020"
     "\021" "\022" "\023" "\024" "\025" "\026" "\027" "\030"
@@ -1151,6 +1152,7 @@ static char special_chars[] =
     "I"    "J"    "K"    "L"    "M"    "N"    "O"    "P"
     "Q"    "R"    "S"    "T"    "U"    "V"    "W"    "X"
     "Y"    "Z";
+static char *special_chars = dot_special_chars + 1;
 static char special_introducers[] =
     "anpcl";
 
@@ -1178,6 +1180,11 @@ special_name (const char *s, int inc = 1)
   if (strpbrk (s, special_chars))
     return !strncasematch (s, "%2f", 3);
 
+  if (strcasematch (s, ".") || strcasematch (s, ".."))
+    return false;
+  if (s[strlen (s)-1] == '.')
+    return true;
+
   const char *p;
   if (strcasematch (s, "conin$") || strcasematch (s, "conout$"))
     return -1;
@@ -1212,7 +1219,7 @@ fnunmunge (char *dst, const char *src)
     }
 
   while (*src)
-    if (!(c = special_char (src)))
+    if (!(c = special_char (src, dot_special_chars)))
       *dst++ = *src++;
     else
       {
@@ -1243,6 +1250,12 @@ mount_item::fnmunge (char *dst, const char *src)
          *d++ = *src++;
        else
          d += __small_sprintf (d, "%%%02x", (unsigned char) *src++);
+
+      if (*--d != '.')
+       d++;
+      else
+       d += __small_sprintf (d, "%%%02x", (unsigned char) '.');
+
       *d = *src;
     }
 
This page took 0.039231 seconds and 5 git commands to generate.