summaryrefslogtreecommitdiffstats
path: root/system/pdksh/patches/115_OpenBSD-echo-posix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'system/pdksh/patches/115_OpenBSD-echo-posix.patch')
-rw-r--r--system/pdksh/patches/115_OpenBSD-echo-posix.patch140
1 files changed, 140 insertions, 0 deletions
diff --git a/system/pdksh/patches/115_OpenBSD-echo-posix.patch b/system/pdksh/patches/115_OpenBSD-echo-posix.patch
new file mode 100644
index 0000000000..47a9f37826
--- /dev/null
+++ b/system/pdksh/patches/115_OpenBSD-echo-posix.patch
@@ -0,0 +1,140 @@
+From OpenBSD:
+
+2009-02-07 15:03 kili
+
+ * c_ksh.c (1.33):
+ Ensure that *wp isn't NULL.
+
+ ok otto@
+
+2009-02-07 08:24 guenther
+
+ * c_ksh.c (1.32), ksh.1 (1.124), sh.1 (1.78): Make built-in echo
+ behave according to POSIX when set -o posix is in effect: the
+ only option is -n, and only one of those is parsed.
+
+ diff from Ingo Schwarze ok otto@ kili@; manpage changes ok jmc@
+
+
+Index: pdksh-5.2.14/c_ksh.c
+===================================================================
+--- pdksh-5.2.14.orig/c_ksh.c 2009-09-19 11:22:34.000000000 +0200
++++ pdksh-5.2.14/c_ksh.c 2009-09-19 12:13:54.000000000 +0200
+@@ -247,23 +247,30 @@
+ * by default.
+ */
+ wp += 1;
+- while ((s = *wp) && *s == '-' && s[1]) {
+- while (*++s)
+- if (*s == 'n')
+- nflags &= ~PO_NL;
+- else if (*s == 'e')
+- nflags |= PO_EXPAND;
+- else if (*s == 'E')
+- nflags &= ~PO_EXPAND;
+- else
+- /* bad option: don't use nflags, print
+- * argument
+- */
++ if (Flag(FPOSIX)) {
++ if (*wp && strcmp(*wp, "-n") == 0) {
++ flags &= ~PO_NL;
++ wp++;
++ }
++ } else {
++ while ((s = *wp) && *s == '-' && s[1]) {
++ while (*++s)
++ if (*s == 'n')
++ nflags &= ~PO_NL;
++ else if (*s == 'e')
++ nflags |= PO_EXPAND;
++ else if (*s == 'E')
++ nflags &= ~PO_EXPAND;
++ else
++ /* bad option: don't use
++ * nflags, print argument
++ */
++ break;
++ if (*s)
+ break;
+- if (*s)
+- break;
+- wp++;
+- flags = nflags;
++ wp++;
++ flags = nflags;
++ }
+ }
+ } else {
+ int optc;
+Index: pdksh-5.2.14/ksh.Man
+===================================================================
+--- pdksh-5.2.14.orig/ksh.Man 2009-09-19 11:22:34.000000000 +0200
++++ pdksh-5.2.14/ksh.Man 2009-09-19 12:13:54.000000000 +0200
+@@ -1521,6 +1521,13 @@
+ In future, a new option (\fB\-v\fP perhaps) will be added to distinguish
+ the two behaviours.
+ .IP \ \ \(bu
++\fBecho\fP
++options.
++In POSIX mode, \fB\-e\fP and \fB\-E\fP
++are not treated as options, but printed like other arguments;
++in non-POSIX mode, these options control the interpretation
++of backslash sequences.
++.IP \ \ \(bu
+ \fBfg\fP exit status: in posix mode, the exit status is 0 if no errors occur;
+ in non-posix mode, the exit status is that of the last foregrounded job.
+ .IP \ \ \(bu
+@@ -1780,6 +1787,9 @@
+ \fB\-n\fP suppresses the trailing newline, \fB\-e\fP enables backslash
+ interpretation (a no-op, since this is normally done), and \fB\-E\fP which
+ suppresses backslash interpretation.
++If the \fIposix\fP
++option is set, only the first argument is treated as an option, and only
++if it is exactly \fB-n\fP.
+ .\"}}}
+ .\"{{{ eval command ...
+ .IP "\fBeval\fP \fIcommand ...\fP"
+Index: pdksh-5.2.14/tests/debian-115.t
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ pdksh-5.2.14/tests/debian-115.t 2009-09-19 12:18:11.000000000 +0200
+@@ -0,0 +1,38 @@
++name: debian-115-1
++description:
++ Check if echo does not accept -e in posix mode
++stdin:
++ set -o posix
++ echo -e test
++expected-stdout:
++ -e test
++---
++name: debian-115-2
++description:
++ Check if echo accepts -e in non-posix mode
++stdin:
++ set +o posix
++ echo -e test
++expected-stdout:
++ test
++---
++name: debian-115-3
++description:
++ Check if echo accepts -n in posix mode
++stdin:
++ set -o posix
++ echo -n test
++ echo " OK"
++expected-stdout:
++ test OK
++---
++name: debian-115-4
++description:
++ Check if echo accepts -n in non-posix mode
++stdin:
++ set +o posix
++ echo -n test
++ echo " OK"
++expected-stdout:
++ test OK
++---