summaryrefslogtreecommitdiff
path: root/vms
diff options
context:
space:
mode:
authorCraig A. Berry <craigberry@mac.com>2012-01-14 22:40:24 -0600
committerCraig A. Berry <craigberry@mac.com>2012-01-14 22:40:24 -0600
commit4ab1eb56da9e51d7afaf7663e76680cf1e618834 (patch)
treebf99c104192a014673e0fdc9b387f2d06f31711e /vms
parentd3a16da4332bc355764973b70da72fc54272f32b (diff)
downloadperl-4ab1eb56da9e51d7afaf7663e76680cf1e618834.tar.gz
In vmsify, leave ../ path components alone.
Way back in 08c7cbbb0fc466967038dcb56ca4f1b828b96269, we started eliminating ../ components when converting paths from Unix syntax to VMS syntax. No corresponding change was made when converting in the opposite direction, so this was inconsistent. We should get a valid path either way, but doing more interpretation than necessary seems uncalled for, so this patch restores the previous behavior. This also paves the way to eliminate some inconsistencies between what we do when Extended Filename Syntax (EFS) is in effect and when it's not.
Diffstat (limited to 'vms')
-rwxr-xr-xvms/ext/filespec.t4
-rw-r--r--vms/vms.c9
2 files changed, 4 insertions, 9 deletions
diff --git a/vms/ext/filespec.t b/vms/ext/filespec.t
index f2344e1022..c5bf12bd3e 100755
--- a/vms/ext/filespec.t
+++ b/vms/ext/filespec.t
@@ -112,7 +112,7 @@ __lyrics_:[__are_.__very_^.__sappy_]__but_^.__rhymes_^.__are_.__true_ unixify
/__some_/__where_/__over_/__the_.__rainbow_ vmsify __some_:[__where_.__over_]__the_.__rainbow_ ^
__some_/__where_/__over_/__the_.__rainbow_ vmsify [.__some_.__where_.__over_]__the_.__rainbow_ ^
../__some_/__where_/__over_/__the_.__rainbow_ vmsify [-.__some_.__where_.__over_]__the_.__rainbow_ ^
-__some_/../../__where_/__over_/__the_.__rainbow_ vmsify [-.__where_.__over_]__the_.__rainbow_ [.__some_.--.__where_.__over_]__the_.__rainbow_
+__some_/../../__where_/__over_/__the_.__rainbow_ vmsify [.__some_.--.__where_.__over_]__the_.__rainbow_ ^
.../__some_/__where_/__over_/__the_.__rainbow_ vmsify [...__some_.__where_.__over_]__the_.__rainbow_ [.^.^.^..__some_.__where_.__over_]__the_.__rainbow_
__some_/.../__where_/__over_/__the_.__rainbow_ vmsify [.__some_...__where_.__over_]__the_.__rainbow_ [.__some_.^.^.^..__where_.__over_]__the_.__rainbow_
/__some_/.../__where_/__over_/__the_.__rainbow_ vmsify __some_:[...__where_.__over_]__the_.__rainbow_ __some_:[^.^.^..__where_.__over_]__the_.__rainbow_
@@ -169,7 +169,7 @@ __path_ vmspath [.__path_] ^
/sys$scratch vmspath sys$scratch: ^
# Redundant characters in Unix paths
-//__some_/__where_//__over_/../__the_.__rainbow_ vmsify __some_:[__where_]__the_.__rainbow_ __some_:[__where_.__over_.-]__the_.__rainbow_
+//__some_/__where_//__over_/../__the_.__rainbow_ vmsify __some_:[__where_.__over_.-]__the_.__rainbow_ ^
/__some_/__where_//__over_/./__the_.__rainbow_ vmsify __some_:[__where_.__over_]__the_.__rainbow_ ^
..//../ vmspath [--] ^
./././ vmspath [] ^
diff --git a/vms/vms.c b/vms/vms.c
index 13d2fe2972..95b69a97e0 100644
--- a/vms/vms.c
+++ b/vms/vms.c
@@ -8616,13 +8616,8 @@ static char *int_tovmsspec
else if (*(cp2+1) == '.' && (*(cp2+2) == '/' || *(cp2+2) == '\0')) {
if (*(cp1-1) == '-' || *(cp1-1) == '[') *(cp1++) = '-'; /* handle "../" */
else if (*(cp1-2) == '[') *(cp1-1) = '-';
- else { /* back up over previous directory name */
- cp1--;
- while (*(cp1-1) != '.' && *(cp1-1) != '[') cp1--;
- if (*(cp1-1) == '[') {
- memcpy(cp1,"000000.",7);
- cp1 += 7;
- }
+ else {
+ *(cp1++) = '-';
}
cp2 += 2;
if (cp2 == dirend) break;