xref: /titanic_50/usr/src/lib/libshell/misc/ERRATA.txt (revision 7c2fbfb345896881c631598ee3852ce9ce33fb07)
1da2e3ebdSchin#
2da2e3ebdSchin# CDDL HEADER START
3da2e3ebdSchin#
4da2e3ebdSchin# The contents of this file are subject to the terms of the
5da2e3ebdSchin# Common Development and Distribution License (the "License").
6da2e3ebdSchin# You may not use this file except in compliance with the License.
7da2e3ebdSchin#
8da2e3ebdSchin# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9da2e3ebdSchin# or http://www.opensolaris.org/os/licensing.
10da2e3ebdSchin# See the License for the specific language governing permissions
11da2e3ebdSchin# and limitations under the License.
12da2e3ebdSchin#
13da2e3ebdSchin# When distributing Covered Code, include this CDDL HEADER in each
14da2e3ebdSchin# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15da2e3ebdSchin# If applicable, add the following below this CDDL HEADER, with the
16da2e3ebdSchin# fields enclosed by brackets "[]" replaced with your own identifying
17da2e3ebdSchin# information: Portions Copyright [yyyy] [name of copyright owner]
18da2e3ebdSchin#
19da2e3ebdSchin# CDDL HEADER END
20da2e3ebdSchin#
21*7c2fbfb3SApril Chin
22da2e3ebdSchin#
23*7c2fbfb3SApril Chin# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
24*7c2fbfb3SApril Chin# Use is subject to license terms.
25da2e3ebdSchin#
26da2e3ebdSchin
27da2e3ebdSchin#
28da2e3ebdSchin# ERRATA.txt
29da2e3ebdSchin#
30da2e3ebdSchin# Errata/problems/notes about problems in the current sources
31da2e3ebdSchin#
32da2e3ebdSchin
33da2e3ebdSchin######## Errata #001: ########
34*7c2fbfb3SApril ChinThe usage of |posix_spawn()| has been manually disabled because there seems to be a
35*7c2fbfb3SApril Chinrace condition which cases sporadic failures like this:
36*7c2fbfb3SApril Chin-- snip --.
37*7c2fbfb3SApril Chin$ builtin | fgrep sum | fgrep sum
38*7c2fbfb3SApril Chin/usr/ast/bin/sum
39*7c2fbfb3SApril Chin/usr/bin/sum
40*7c2fbfb3SApril Chin$ builtin | fgrep sum | fgrep sum
41*7c2fbfb3SApril Chinfgrep: fgrep: cannot execute [Exec format error]
42*7c2fbfb3SApril Chin-- snip --.
43*7c2fbfb3SApril ChinThe following files have been changed:
44da2e3ebdSchin-- snip --
45*7c2fbfb3SApril ChinIndex: src/lib/libast/sparcv9/include/ast/ast_lib.h
46*7c2fbfb3SApril Chin===================================================================
47*7c2fbfb3SApril Chin--- src/lib/libast/sparcv9/include/ast/ast_lib.h	(revision 888)
48*7c2fbfb3SApril Chin+++ src/lib/libast/sparcv9/include/ast/ast_lib.h	(working copy)
49*7c2fbfb3SApril Chin@@ -160,7 +160,7 @@
50*7c2fbfb3SApril Chin #define _hdr_unistd	1	/* #include <unistd.h> ok */
51*7c2fbfb3SApril Chin #define _lib_vfork	1	/* vfork exists and it works */
52*7c2fbfb3SApril Chin #define _real_vfork	1	/* vfork child shares data with parent */
53*7c2fbfb3SApril Chin-#define _lib_posix_spawn	2	/* posix_spawn exists and it works and its worth using */
54*7c2fbfb3SApril Chin+#define _lib_posix_spawn	1	/* posix_spawn exists and it works and its worth using */
55*7c2fbfb3SApril Chin #define _stream_peek	1	/* ioctl(I_PEEK) works */
56*7c2fbfb3SApril Chin #define _socket_peek	1	/* recv(MSG_PEEK) works */
57*7c2fbfb3SApril Chin #define _hdr_string	1	/* #include <string.h> ok */
58*7c2fbfb3SApril ChinIndex: src/lib/libast/sparcv9/src/lib/libast/ast_lib.h
59*7c2fbfb3SApril Chin===================================================================
60*7c2fbfb3SApril Chin--- src/lib/libast/sparcv9/src/lib/libast/ast_lib.h	(revision 888)
61*7c2fbfb3SApril Chin+++ src/lib/libast/sparcv9/src/lib/libast/ast_lib.h	(working copy)
62*7c2fbfb3SApril Chin@@ -139,7 +139,7 @@
63*7c2fbfb3SApril Chin #define _hdr_unistd	1	/* #include <unistd.h> ok */
64*7c2fbfb3SApril Chin #define _lib_vfork	1	/* vfork exists and it works */
65*7c2fbfb3SApril Chin #define _real_vfork	1	/* vfork child shares data with parent */
66*7c2fbfb3SApril Chin-#define _lib_posix_spawn	2	/* posix_spawn exists and it works and its worth using */
67*7c2fbfb3SApril Chin+#define _lib_posix_spawn	1	/* posix_spawn exists and it works and its worth using */
68*7c2fbfb3SApril Chin #define _stream_peek	1	/* ioctl(I_PEEK) works */
69*7c2fbfb3SApril Chin #define _socket_peek	1	/* recv(MSG_PEEK) works */
70*7c2fbfb3SApril Chin #define _hdr_string	1	/* #include <string.h> ok */
71*7c2fbfb3SApril ChinIndex: src/lib/libast/sparcv9/src/lib/libast/FEATURE/lib
72*7c2fbfb3SApril Chin===================================================================
73*7c2fbfb3SApril Chin--- src/lib/libast/sparcv9/src/lib/libast/FEATURE/lib	(revision 888)
74*7c2fbfb3SApril Chin+++ src/lib/libast/sparcv9/src/lib/libast/FEATURE/lib	(working copy)
75*7c2fbfb3SApril Chin@@ -139,7 +139,7 @@
76*7c2fbfb3SApril Chin #define _hdr_unistd	1	/* #include <unistd.h> ok */
77*7c2fbfb3SApril Chin #define _lib_vfork	1	/* vfork exists and it works */
78*7c2fbfb3SApril Chin #define _real_vfork	1	/* vfork child shares data with parent */
79*7c2fbfb3SApril Chin-#define _lib_posix_spawn	2	/* posix_spawn exists and it works and its worth using */
80*7c2fbfb3SApril Chin+#define _lib_posix_spawn	1	/* posix_spawn exists and it works and its worth using */
81*7c2fbfb3SApril Chin #define _stream_peek	1	/* ioctl(I_PEEK) works */
82*7c2fbfb3SApril Chin #define _socket_peek	1	/* recv(MSG_PEEK) works */
83*7c2fbfb3SApril Chin #define _hdr_string	1	/* #include <string.h> ok */
84*7c2fbfb3SApril ChinIndex: src/lib/libast/sparc/include/ast/ast_lib.h
85*7c2fbfb3SApril Chin===================================================================
86*7c2fbfb3SApril Chin--- src/lib/libast/sparc/include/ast/ast_lib.h	(revision 888)
87*7c2fbfb3SApril Chin+++ src/lib/libast/sparc/include/ast/ast_lib.h	(working copy)
88*7c2fbfb3SApril Chin@@ -171,7 +171,7 @@
89*7c2fbfb3SApril Chin #define _hdr_unistd	1	/* #include <unistd.h> ok */
90*7c2fbfb3SApril Chin #define _lib_vfork	1	/* vfork exists and it works */
91*7c2fbfb3SApril Chin #define _real_vfork	1	/* vfork child shares data with parent */
92*7c2fbfb3SApril Chin-#define _lib_posix_spawn	2	/* posix_spawn exists and it works and its worth using */
93*7c2fbfb3SApril Chin+#define _lib_posix_spawn	1	/* posix_spawn exists and it works and its worth using */
94*7c2fbfb3SApril Chin #define _stream_peek	1	/* ioctl(I_PEEK) works */
95*7c2fbfb3SApril Chin #define _socket_peek	1	/* recv(MSG_PEEK) works */
96*7c2fbfb3SApril Chin #define _hdr_string	1	/* #include <string.h> ok */
97*7c2fbfb3SApril ChinIndex: src/lib/libast/sparc/src/lib/libast/ast_lib.h
98*7c2fbfb3SApril Chin===================================================================
99*7c2fbfb3SApril Chin--- src/lib/libast/sparc/src/lib/libast/ast_lib.h	(revision 888)
100*7c2fbfb3SApril Chin+++ src/lib/libast/sparc/src/lib/libast/ast_lib.h	(working copy)
101*7c2fbfb3SApril Chin@@ -150,7 +150,7 @@
102*7c2fbfb3SApril Chin #define _hdr_unistd	1	/* #include <unistd.h> ok */
103*7c2fbfb3SApril Chin #define _lib_vfork	1	/* vfork exists and it works */
104*7c2fbfb3SApril Chin #define _real_vfork	1	/* vfork child shares data with parent */
105*7c2fbfb3SApril Chin-#define _lib_posix_spawn	2	/* posix_spawn exists and it works and its worth using */
106*7c2fbfb3SApril Chin+#define _lib_posix_spawn	1	/* posix_spawn exists and it works and its worth using */
107*7c2fbfb3SApril Chin #define _stream_peek	1	/* ioctl(I_PEEK) works */
108*7c2fbfb3SApril Chin #define _socket_peek	1	/* recv(MSG_PEEK) works */
109*7c2fbfb3SApril Chin #define _hdr_string	1	/* #include <string.h> ok */
110*7c2fbfb3SApril ChinIndex: src/lib/libast/sparc/src/lib/libast/FEATURE/lib
111*7c2fbfb3SApril Chin===================================================================
112*7c2fbfb3SApril Chin--- src/lib/libast/sparc/src/lib/libast/FEATURE/lib	(revision 888)
113*7c2fbfb3SApril Chin+++ src/lib/libast/sparc/src/lib/libast/FEATURE/lib	(working copy)
114*7c2fbfb3SApril Chin@@ -150,7 +150,7 @@
115*7c2fbfb3SApril Chin #define _hdr_unistd	1	/* #include <unistd.h> ok */
116*7c2fbfb3SApril Chin #define _lib_vfork	1	/* vfork exists and it works */
117*7c2fbfb3SApril Chin #define _real_vfork	1	/* vfork child shares data with parent */
118*7c2fbfb3SApril Chin-#define _lib_posix_spawn	2	/* posix_spawn exists and it works and its worth using */
119*7c2fbfb3SApril Chin+#define _lib_posix_spawn	1	/* posix_spawn exists and it works and its worth using */
120*7c2fbfb3SApril Chin #define _stream_peek	1	/* ioctl(I_PEEK) works */
121*7c2fbfb3SApril Chin #define _socket_peek	1	/* recv(MSG_PEEK) works */
122*7c2fbfb3SApril Chin #define _hdr_string	1	/* #include <string.h> ok */
123*7c2fbfb3SApril ChinIndex: src/lib/libast/i386/include/ast/ast_lib.h
124*7c2fbfb3SApril Chin===================================================================
125*7c2fbfb3SApril Chin--- src/lib/libast/i386/include/ast/ast_lib.h	(revision 888)
126*7c2fbfb3SApril Chin+++ src/lib/libast/i386/include/ast/ast_lib.h	(working copy)
127*7c2fbfb3SApril Chin@@ -171,7 +171,7 @@
128*7c2fbfb3SApril Chin #define _hdr_unistd	1	/* #include <unistd.h> ok */
129*7c2fbfb3SApril Chin #define _lib_vfork	1	/* vfork exists and it works */
130*7c2fbfb3SApril Chin #define _real_vfork	1	/* vfork child shares data with parent */
131*7c2fbfb3SApril Chin-#define _lib_posix_spawn	2	/* posix_spawn exists and it works and its worth using */
132*7c2fbfb3SApril Chin+#define _lib_posix_spawn	1	/* posix_spawn exists and it works and its worth using */
133*7c2fbfb3SApril Chin #define _stream_peek	1	/* ioctl(I_PEEK) works */
134*7c2fbfb3SApril Chin #define _socket_peek	1	/* recv(MSG_PEEK) works */
135*7c2fbfb3SApril Chin #define _hdr_string	1	/* #include <string.h> ok */
136*7c2fbfb3SApril ChinIndex: src/lib/libast/i386/src/lib/libast/ast_lib.h
137*7c2fbfb3SApril Chin===================================================================
138*7c2fbfb3SApril Chin--- src/lib/libast/i386/src/lib/libast/ast_lib.h	(revision 888)
139*7c2fbfb3SApril Chin+++ src/lib/libast/i386/src/lib/libast/ast_lib.h	(working copy)
140*7c2fbfb3SApril Chin@@ -150,7 +150,7 @@
141*7c2fbfb3SApril Chin #define _hdr_unistd	1	/* #include <unistd.h> ok */
142*7c2fbfb3SApril Chin #define _lib_vfork	1	/* vfork exists and it works */
143*7c2fbfb3SApril Chin #define _real_vfork	1	/* vfork child shares data with parent */
144*7c2fbfb3SApril Chin-#define _lib_posix_spawn	2	/* posix_spawn exists and it works and its worth using */
145*7c2fbfb3SApril Chin+#define _lib_posix_spawn	1	/* posix_spawn exists and it works and its worth using */
146*7c2fbfb3SApril Chin #define _stream_peek	1	/* ioctl(I_PEEK) works */
147*7c2fbfb3SApril Chin #define _socket_peek	1	/* recv(MSG_PEEK) works */
148*7c2fbfb3SApril Chin #define _hdr_string	1	/* #include <string.h> ok */
149*7c2fbfb3SApril ChinIndex: src/lib/libast/i386/src/lib/libast/FEATURE/lib
150*7c2fbfb3SApril Chin===================================================================
151*7c2fbfb3SApril Chin--- src/lib/libast/i386/src/lib/libast/FEATURE/lib	(revision 888)
152*7c2fbfb3SApril Chin+++ src/lib/libast/i386/src/lib/libast/FEATURE/lib	(working copy)
153*7c2fbfb3SApril Chin@@ -150,7 +150,7 @@
154*7c2fbfb3SApril Chin #define _hdr_unistd	1	/* #include <unistd.h> ok */
155*7c2fbfb3SApril Chin #define _lib_vfork	1	/* vfork exists and it works */
156*7c2fbfb3SApril Chin #define _real_vfork	1	/* vfork child shares data with parent */
157*7c2fbfb3SApril Chin-#define _lib_posix_spawn	2	/* posix_spawn exists and it works and its worth using */
158*7c2fbfb3SApril Chin+#define _lib_posix_spawn	1	/* posix_spawn exists and it works and its worth using */
159*7c2fbfb3SApril Chin #define _stream_peek	1	/* ioctl(I_PEEK) works */
160*7c2fbfb3SApril Chin #define _socket_peek	1	/* recv(MSG_PEEK) works */
161*7c2fbfb3SApril Chin #define _hdr_string	1	/* #include <string.h> ok */
162*7c2fbfb3SApril ChinIndex: src/lib/libast/amd64/include/ast/ast_lib.h
163*7c2fbfb3SApril Chin===================================================================
164*7c2fbfb3SApril Chin--- src/lib/libast/amd64/include/ast/ast_lib.h	(revision 888)
165*7c2fbfb3SApril Chin+++ src/lib/libast/amd64/include/ast/ast_lib.h	(working copy)
166*7c2fbfb3SApril Chin@@ -160,7 +160,7 @@
167*7c2fbfb3SApril Chin #define _hdr_unistd	1	/* #include <unistd.h> ok */
168*7c2fbfb3SApril Chin #define _lib_vfork	1	/* vfork exists and it works */
169*7c2fbfb3SApril Chin #define _real_vfork	1	/* vfork child shares data with parent */
170*7c2fbfb3SApril Chin-#define _lib_posix_spawn	2	/* posix_spawn exists and it works and its worth using */
171*7c2fbfb3SApril Chin+#define _lib_posix_spawn	1	/* posix_spawn exists and it works and its worth using */
172*7c2fbfb3SApril Chin #define _stream_peek	1	/* ioctl(I_PEEK) works */
173*7c2fbfb3SApril Chin #define _socket_peek	1	/* recv(MSG_PEEK) works */
174*7c2fbfb3SApril Chin #define _hdr_string	1	/* #include <string.h> ok */
175*7c2fbfb3SApril ChinIndex: src/lib/libast/amd64/src/lib/libast/ast_lib.h
176*7c2fbfb3SApril Chin===================================================================
177*7c2fbfb3SApril Chin--- src/lib/libast/amd64/src/lib/libast/ast_lib.h	(revision 888)
178*7c2fbfb3SApril Chin+++ src/lib/libast/amd64/src/lib/libast/ast_lib.h	(working copy)
179*7c2fbfb3SApril Chin@@ -139,7 +139,7 @@
180*7c2fbfb3SApril Chin #define _hdr_unistd	1	/* #include <unistd.h> ok */
181*7c2fbfb3SApril Chin #define _lib_vfork	1	/* vfork exists and it works */
182*7c2fbfb3SApril Chin #define _real_vfork	1	/* vfork child shares data with parent */
183*7c2fbfb3SApril Chin-#define _lib_posix_spawn	2	/* posix_spawn exists and it works and its worth using */
184*7c2fbfb3SApril Chin+#define _lib_posix_spawn	1	/* posix_spawn exists and it works and its worth using */
185*7c2fbfb3SApril Chin #define _stream_peek	1	/* ioctl(I_PEEK) works */
186*7c2fbfb3SApril Chin #define _socket_peek	1	/* recv(MSG_PEEK) works */
187*7c2fbfb3SApril Chin #define _hdr_string	1	/* #include <string.h> ok */
188*7c2fbfb3SApril ChinIndex: src/lib/libast/amd64/src/lib/libast/FEATURE/lib
189*7c2fbfb3SApril Chin===================================================================
190*7c2fbfb3SApril Chin--- src/lib/libast/amd64/src/lib/libast/FEATURE/lib	(revision 888)
191*7c2fbfb3SApril Chin+++ src/lib/libast/amd64/src/lib/libast/FEATURE/lib	(working copy)
192*7c2fbfb3SApril Chin@@ -139,7 +139,7 @@
193*7c2fbfb3SApril Chin #define _hdr_unistd	1	/* #include <unistd.h> ok */
194*7c2fbfb3SApril Chin #define _lib_vfork	1	/* vfork exists and it works */
195*7c2fbfb3SApril Chin #define _real_vfork	1	/* vfork child shares data with parent */
196*7c2fbfb3SApril Chin-#define _lib_posix_spawn	2	/* posix_spawn exists and it works and its worth using */
197*7c2fbfb3SApril Chin+#define _lib_posix_spawn	1	/* posix_spawn exists and it works and its worth using */
198*7c2fbfb3SApril Chin #define _stream_peek	1	/* ioctl(I_PEEK) works */
199*7c2fbfb3SApril Chin #define _socket_peek	1	/* recv(MSG_PEEK) works */
200*7c2fbfb3SApril Chin #define _hdr_string	1	/* #include <string.h> ok */
201da2e3ebdSchin-- snip --
202da2e3ebdSchin
203da2e3ebdSchin
204da2e3ebdSchin######## Errata #002: ########
205*7c2fbfb3SApril ChinA workaround was added for a problem with the "multiline" editor mode which
206*7c2fbfb3SApril Chinoccurs when the edit line becomes longer than the terminal's width and the
207*7c2fbfb3SApril Chinterminal cursor is not at position 0 when PS1 is send to the terminal.
208da2e3ebdSchin
209*7c2fbfb3SApril ChinFor example: The user executes a $ printf "foo"<enter> # the prompt will start
210*7c2fbfb3SApril Chinat position 3 instead of 0. If the user enters a command which is longer than
211*7c2fbfb3SApril Chinthe terminal width and then removes enougth characters that the edit line fits
212*7c2fbfb3SApril Chinagain into one line the "foo" at the beginning will be overwritten with the
213*7c2fbfb3SApril Chinprompt.
214*7c2fbfb3SApril Chin
215*7c2fbfb3SApril ChinThe workaround is to add $(printf "%*s\r%s" COLUMNS "") at the beginning of
216*7c2fbfb3SApril ChinPS1 set by /etc/ksh.kshrc, this causes the shell to move to the beginning
217*7c2fbfb3SApril Chinof the next line if the terminal cursor is not at position 0.
218da2e3ebdSchin
219da2e3ebdSchin
220da2e3ebdSchin######## Errata #003: ########
221*7c2fbfb3SApril ChinA fix was backported to cure sporadic VSC test suite failures. The failures are
222*7c2fbfb3SApril Chingenerated when command substitutions+functions are executed in a nested manner
223*7c2fbfb3SApril Chin- sometimes the return code is non-zero even if the called function explicitly
224*7c2fbfb3SApril Chincontains a "return 0"-statement.
225*7c2fbfb3SApril ChinThe following files have been changed:
226da2e3ebdSchin-- snip --
227da2e3ebdSchinIndex: src/lib/libshell/common/sh/jobs.c
228da2e3ebdSchin===================================================================
229*7c2fbfb3SApril Chin--- src/lib/libshell/common/sh/jobs.c	(revision 1284)
230da2e3ebdSchin+++ src/lib/libshell/common/sh/jobs.c	(working copy)
231*7c2fbfb3SApril Chin@@ -1224,6 +1224,8 @@
232da2e3ebdSchin 	job_lock();
233*7c2fbfb3SApril Chin 	if(pid > 1)
234*7c2fbfb3SApril Chin 	{
235*7c2fbfb3SApril Chin+		if(pid==sh.spid)
236*7c2fbfb3SApril Chin+			sh.spid = 0;
237*7c2fbfb3SApril Chin 		if(!(pw=job_bypid(pid)))
238*7c2fbfb3SApril Chin 		{
239*7c2fbfb3SApril Chin 			/* check to see whether job status has been saved */
240da2e3ebdSchin-- snip --
241*7c2fbfb3SApril Chin
242da2e3ebdSchin#EOF.
243