summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Src/builtin.c16
2 files changed, 21 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 7c6a748da..c63e50bcd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-11-05  Peter Stephenson  <p.w.stephenson@ntlworld.com>
+
+	* 22968: Src/builtins.c: print -z and print -s didn't cope
+	with the fact that the arguments were unmetafied.
+
 2006-11-03  Peter Stephenson  <pws@csr.com>
 
 	* users/10928: send all "jobs" output to stdout, not shout.
diff --git a/Src/builtin.c b/Src/builtin.c
index 185365644..e4ca9b3d9 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -3454,6 +3454,14 @@ mod_export LinkList bufstack;
     else \
 	count += fprintf(fout, spec, width, VAL);
 
+/*
+ * Because of the use of getkeystring() to interpret the arguments,
+ * the elements of args spend a large part of the function unmetafied
+ * with the lengths in len.  This may have seemed a good idea once.
+ * As we are stuck with this for now, we need to be very careful
+ * deciding what state args is in.
+ */
+
 /**/
 int
 bin_print(char *name, char **args, Options ops, int func)
@@ -3727,6 +3735,14 @@ bin_print(char *name, char **args, Options ops, int func)
     
     /* normal output */
     if (!fmt) {
+	if (OPT_ISSET(ops, 'z') || OPT_ISSET(ops, 's')) {
+	    /*
+	     * We don't want the arguments unmetafied after all.
+	     */
+	    for (n = 0; n < argc; n++)
+		metafy(args[n], len[n], META_NOALLOC);
+	}
+
 	/* -z option -- push the arguments onto the editing buffer stack */
 	if (OPT_ISSET(ops,'z')) {
 	    queue_signals();