summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--Src/hist.c10
2 files changed, 13 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index ad588693a..41fddecc1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-03-18  Peter Stephenson  <p.w.stephenson@ntlworld.com>
+
+	* 26752: Src/hist.c: fix ../ removal in :a and metafication
+	in :a and :A modifiers.
+
 2009-03-18  Peter Stephenson  <pws@csr.com>
 
 	* Frank Terbeck: 26751: Functions/VCS_Info/vcs_info_setsys:
@@ -11438,5 +11443,5 @@
 
 *****************************************************
 * This is used by the shell to define $ZSH_PATCHLEVEL
-* $Revision: 1.4623 $
+* $Revision: 1.4624 $
 *****************************************************
diff --git a/Src/hist.c b/Src/hist.c
index c8625c7af..4a2c12530 100644
--- a/Src/hist.c
+++ b/Src/hist.c
@@ -1507,7 +1507,7 @@ chabspath(char **junkptr)
 	return 1;
 
     if (**junkptr != '/') {
-	*junkptr = zhtricat(zgetcwd(), "/", *junkptr);
+	*junkptr = zhtricat(metafy(zgetcwd(), -1, META_HEAPDUP), "/", *junkptr);
     }
 
     current = *junkptr;
@@ -1556,6 +1556,8 @@ chabspath(char **junkptr)
 		    if (dest[-1] != '/')
 			dest--;
 		    current += 2;
+		    if (*current == '/')
+			current++;
 		} else if (dest == *junkptr + 1) {
 		    /* This might break with Cygwin's leading double slashes? */
 		    current += 2;
@@ -1567,7 +1569,7 @@ chabspath(char **junkptr)
 	} else {
 	    while (*current != '/' && *current != '\0')
 		if ((*dest++ = *current++) == Meta)
-		    dest[-1] = *current++ ^ 32;
+		    *dest++ = *current++;
 	}
     }
     return 1;
@@ -1593,6 +1595,8 @@ chrealpath(char **junkptr)
     if (**junkptr != '/')
 	return 0;
 
+    unmetafy(*junkptr, NULL);
+
     lastpos = strend(*junkptr);
     nonreal = lastpos + 1;
 
@@ -1618,7 +1622,7 @@ chrealpath(char **junkptr)
 	str++;
     }
 
-    *junkptr = bicat(real, nonreal);
+    *junkptr = metafy(bicat(real, nonreal), -1, META_HEAPDUP);
 
     return 1;
 }