summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig A. Berry <craigberry@mac.com>2012-01-28 08:59:09 -0600
committerCraig A. Berry <craigberry@mac.com>2012-01-28 08:59:09 -0600
commit37769287773a12dbc22e9f93bf7f8c55068aafe2 (patch)
tree79dd6438cbfa0af944bf9024a245ff02b5261d98
parent656d3f9a2ce7fdcdbecec968ce50147d17c391e1 (diff)
downloadperl-37769287773a12dbc22e9f93bf7f8c55068aafe2.tar.gz
filelify shouldn't always escape dots.
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.
-rw-r--r--vms/vms.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/vms/vms.c b/vms/vms.c
index 9d3ed12381..507d3b4d7a 100644
--- 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;
}
- 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--) {