This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
filelify shouldn't always escape dots.
authorCraig A. Berry <craigberry@mac.com>
Sat, 28 Jan 2012 14:59:09 +0000 (08:59 -0600)
committerCraig A. Berry <craigberry@mac.com>
Sat, 28 Jan 2012 14:59:09 +0000 (08:59 -0600)
Follow-up to a9fac63d75d9222a73fbf511ca58ae1d66cbf9a7.  It turns
out that the CRTL doesn't handle the escapes when the path is in
Unix syntax (even though it requires them in native syntax).

  stat('foo/bar.baz.dir;1')

is ok, but

  stat('foo/bar^.baz.dir;1')

fails.  So skip the escaping if there is a slash anywhere in the
path.

vms/vms.c

index 9d3ed12..507d3b4 100644 (file)
--- a/vms/vms.c
+++ b/vms/vms.c
@@ -6133,8 +6133,8 @@ int_fileify_dirspec(const char *dir, char *buf, int *utf8_fl)
                 /* The .dir for now, and fix this better later */
                 dirlen = cp2 - trndir;
             }
                 /* The .dir for now, and fix this better later */
                 dirlen = cp2 - trndir;
             }
-            if (decc_efs_charset) {
-                /* Dots are allowed in dir names, so escape them. */
+            if (decc_efs_charset && !strchr(trndir,'/')) {
+                /* Dots are allowed in dir names, so escape them if input not in Unix syntax. */
                 char *cp4 = is_dir ? (cp2 - 1) : cp2;
                   
                 for (; cp4 > cp1; cp4--) {
                 char *cp4 = is_dir ? (cp2 - 1) : cp2;
                   
                 for (; cp4 > cp1; cp4--) {