From 4ab1eb56da9e51d7afaf7663e76680cf1e618834 Mon Sep 17 00:00:00 2001 From: "Craig A. Berry" Date: Sat, 14 Jan 2012 22:40:24 -0600 Subject: [PATCH] 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. --- vms/ext/filespec.t | 4 ++-- vms/vms.c | 9 ++------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/vms/ext/filespec.t b/vms/ext/filespec.t index f2344e1..c5bf12b 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 13d2fe2..95b69a9 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; -- 2.7.4