On 6/29/07, Glenn Fowler <gsf at research.att.com> wrote:
>
> the AT&T Software Technology ast 2007-06-28 source release
> has been posted to the download site
> http://www.research.att.com/sw/download/
> the notes and changes link has details on the release
>
> this is a final source release (not beta) and includes the
> final release for ksh93s+
>
> thanks to all who contributed bug reports and test cases
>
> 2007-06-28 binary packages will be posted in two weeks
patch diff from 20070515 to 20070628 attached
--
_ Felix Schulte
_|_|_ mailto:felix.schulte at gmail.com
(0 0)
ooO--(_)--Ooo
-------------- next part --------------
diff -r -N -u ksh93_2007_05_15/lib/package/ast-ksh.html
ksh93_2007_06_28/lib/package/ast-ksh.html
--- ksh93_2007_05_15/lib/package/ast-ksh.html 2007-05-16 05:16:01.000000000
+0200
+++ ksh93_2007_06_28/lib/package/ast-ksh.html 2007-06-29 07:09:07.000000000
+0200
@@ -193,17 +193,31 @@
<P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="ksh93
changes">ksh93 changes</A></H3></FONT></FONT></CENTER>
<PRE>
-07-05-15 --- Release ksh93s+ ---
+07-06-28 --- Release ksh93s+ ---
+07-06-25 In vi insert mode, ksh no longer emits a backspace character
+ before the carraige return when the newline is entered.
+07-06-25 A bug in which pipefail would cause a command to return 0
+ when the pipeline was the last command and the failure happened
+ on a component other than the last has been fixed.
+07-06-25 A bug in the expansion of ${var/pattern/rep} when pattern or rep
+ contained a left parenthesis in single quotes has been fixed.
+07-06-18 The braces for a subscripted variable with ${var[sub]}
are now
+ optional when inside [[...]], ((...)) or as a
subscript.
+07-05-28 A bug in brace expansion in which single and double quotes did
+ not treat the comma as a literal character has been fixed.
+07-05-24 The -p option of whence now disables -v.
+07-05-23 Several bug fixes in compound variables and arrays of arrays
+ have been made.
07-05-15 A bug in which the %B format of printf was affected by the
locale has been fixed.
07-05-14 A bug in which was not removed in the replacement pattern with
${var/pattern/rep} when it was not followed by or a digit has
been fixed.
-07-05-10 A bug in which ksh -R file core dumped if no script was sepcifed
+07-05-10 A bug in which ksh -R file core dumped if no script was specified
has been fixed. it not displays an error message.
07-05-07 Added additional Solaris signals to signal table.
07-04-30 A bug in which a pipeline with command substitution inside a
- function could cause a pipline that invokes this function to
+ function could cause a pipeline that invokes this function to
hang when the pipefail option is on has been fixed.
07-04-30 Added -q to whence.
07-04-18 A small memory leak with each redirection of a non-builtin has
@@ -1666,6 +1680,7 @@
<P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libast
changes">libast changes</A></H3></FONT></FONT></CENTER>
<PRE>
+07-05-21 tm/tmxfmt.c,tmxscan.c: %F => %L (TM_DEFAULT); %F => %Y-%m-%d
07-05-15 sfio/sfvprintf.c: %h? and SFFMT_SHORT => raw bytes
07-05-09 features/signal.c,features/siglist: use kill -l & strsignal()
07-04-25 misc/optctx.c: add for opt_info switching
@@ -3106,6 +3121,8 @@
<P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libcmd
changes">libcmd changes</A></H3></FONT></FONT></CENTER>
<PRE>
+07-05-20 cmd.h: handle msvc's balk at if(0)0=0;
+07-05-20 cksum.c: #include <modex.h>
07-05-11 cmd.h: add _CMD_CONTEXT_OK() to verify >= 20070511 context
07-05-09 fds.c: handle ipv6 sockets
07-05-09 cmd.h: <shbltin.h> : cmdquit() => sh_checksig(context)
@@ -3396,7 +3413,7 @@
<TR>
<TD align=left></TD>
<TD align=center></TD>
-<TD align=right>May 15, 2007</TD>
+<TD align=right>June 29, 2007</TD>
</TR>
</TABLE>
<P>
diff -r -N -u ksh93_2007_05_15/lib/package/ast-ksh.README
ksh93_2007_06_28/lib/package/ast-ksh.README
--- ksh93_2007_05_15/lib/package/ast-ksh.README 2007-05-16 05:16:00.000000000
+0200
+++ ksh93_2007_06_28/lib/package/ast-ksh.README 2007-06-29 07:09:07.000000000
+0200
@@ -92,17 +92,31 @@
:::::::: ksh93 ::::::::
-07-05-15 --- Release ksh93s+ ---
+07-06-28 --- Release ksh93s+ ---
+07-06-25 In vi insert mode, ksh no longer emits a backspace character
+ before the carraige return when the newline is entered.
+07-06-25 A bug in which pipefail would cause a command to return 0
+ when the pipeline was the last command and the failure happened
+ on a component other than the last has been fixed.
+07-06-25 A bug in the expansion of ${var/pattern/rep} when pattern or rep
+ contained a left parenthesis in single quotes has been fixed.
+07-06-18 The braces for a subscripted variable with ${var[sub]} are now
+ optional when inside [[...]], ((...)) or as a subscript.
+07-05-28 A bug in brace expansion in which single and double quotes did
+ not treat the comma as a literal character has been fixed.
+07-05-24 The -p option of whence now disables -v.
+07-05-23 Several bug fixes in compound variables and arrays of arrays
+ have been made.
07-05-15 A bug in which the %B format of printf was affected by the
locale has been fixed.
07-05-14 A bug in which \ was not removed in the replacement pattern with
${var/pattern/rep} when it was not followed by \ or a digit has
been fixed.
-07-05-10 A bug in which ksh -R file core dumped if no script was sepcifed
+07-05-10 A bug in which ksh -R file core dumped if no script was specified
has been fixed. it not displays an error message.
07-05-07 Added additional Solaris signals to signal table.
07-04-30 A bug in which a pipeline with command substitution inside a
- function could cause a pipline that invokes this function to
+ function could cause a pipeline that invokes this function to
hang when the pipefail option is on has been fixed.
07-04-30 Added -q to whence.
07-04-18 A small memory leak with each redirection of a non-builtin has
@@ -1562,6 +1576,7 @@
:::::::: libast ::::::::
+07-05-21 tm/tmxfmt.c,tmxscan.c: %F => %L (TM_DEFAULT); %F => %Y-%m-%d
07-05-15 sfio/sfvprintf.c: %h? and SFFMT_SHORT => raw bytes
07-05-09 features/signal.c,features/siglist: use kill -l & strsignal()
07-04-25 misc/optctx.c: add for opt_info switching
@@ -2999,6 +3014,8 @@
:::::::: libcmd ::::::::
+07-05-20 cmd.h: handle msvc's balk at if(0)0=0;
+07-05-20 cksum.c: #include <modex.h>
07-05-11 cmd.h: add _CMD_CONTEXT_OK() to verify >= 20070511 context
07-05-09 fds.c: handle ipv6 sockets
07-05-09 cmd.h: <shbltin.h> : cmdquit() => sh_checksig(context)
diff -r -N -u ksh93_2007_05_15/lib/package/ast-ksh.ver
ksh93_2007_06_28/lib/package/ast-ksh.ver
--- ksh93_2007_05_15/lib/package/ast-ksh.ver 2007-05-15 07:49:57.000000000
+0200
+++ ksh93_2007_06_28/lib/package/ast-ksh.ver 2007-06-28 22:08:31.000000000
+0200
@@ -1 +1 @@
-ast-ksh 2007-05-15 2007-05-15 1
+ast-ksh 2007-06-28 2007-06-28 1
diff -r -N -u ksh93_2007_05_15/lib/package/ksh.ver
ksh93_2007_06_28/lib/package/ksh.ver
--- ksh93_2007_05_15/lib/package/ksh.ver 2007-03-29 19:07:07.000000000
+0200
+++ ksh93_2007_06_28/lib/package/ksh.ver 2007-06-29 07:09:06.000000000
+0200
@@ -1 +1 @@
-ksh 2007-03-28 2007-03-28 1
+ksh 2007-06-28 2007-06-28 1
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/bltins/whence.c
ksh93_2007_06_28/src/cmd/ksh93/bltins/whence.c
--- ksh93_2007_05_15/src/cmd/ksh93/bltins/whence.c 2007-04-24
22:12:48.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/bltins/whence.c 2007-05-24
14:55:12.000000000 +0200
@@ -112,6 +112,7 @@
break;
case 'p':
flags |= P_FLAG;
+ flags &= ~V_FLAG;
break;
case 'q':
flags |= Q_FLAG;
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/data/builtins.c
ksh93_2007_06_28/src/cmd/ksh93/data/builtins.c
--- ksh93_2007_05_15/src/cmd/ksh93/data/builtins.c 2007-05-15
05:07:06.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/data/builtins.c 2007-05-24
14:54:05.000000000 +0200
@@ -1802,7 +1802,7 @@
"[a?Displays all uses for each \aname\a rather than the first.]"
"[f?Do not check for functions.]"
"[p?Do not check to see if \aname\a is a reserved word, a built-in, "
- "an alias, or a function.]"
+ "an alias, or a function. This turns off the \b-v\b option.]"
"[q?Quiet mode. Returns 0 if all arguments are built-ins, functions, or are "
"programs found on the path.]"
"[v?For each name you specify, the shell displays a line that indicates "
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/data/lexstates.c
ksh93_2007_06_28/src/cmd/ksh93/data/lexstates.c
--- ksh93_2007_05_15/src/cmd/ksh93/data/lexstates.c 2006-08-11
21:00:24.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/data/lexstates.c 2007-05-24
18:17:21.000000000 +0200
@@ -360,7 +360,7 @@
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, S_QUOTE,0, S_DOL, 0, S_PAT, S_LIT,
- S_PAT, S_PAT, S_PAT, 0, 0, 0, 0, S_SLASH,
+ S_PAT, S_PAT, S_PAT, 0, S_COM, 0, 0, S_SLASH,
0, S_DIG, S_DIG, S_DIG, S_DIG, S_DIG, S_DIG, S_DIG,
S_DIG, S_DIG, S_COLON,0, 0, S_EQ, 0, S_PAT,
0, 0, 0, 0, 0, 0, 0, 0,
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/edit/vi.c
ksh93_2007_06_28/src/cmd/ksh93/edit/vi.c
--- ksh93_2007_05_15/src/cmd/ksh93/edit/vi.c 2007-01-08 18:25:48.000000000
+0100
+++ ksh93_2007_06_28/src/cmd/ksh93/edit/vi.c 2007-06-26 04:52:48.000000000
+0200
@@ -1472,6 +1472,7 @@
if( mode != SEARCH )
save_last(vp);
refresh(vp,INPUT);
+ last_phys++;
return;
case '\t': /** command completion **/
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/include/argnod.h
ksh93_2007_06_28/src/cmd/ksh93/include/argnod.h
--- ksh93_2007_05_15/src/cmd/ksh93/include/argnod.h 2006-07-19
20:58:17.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/include/argnod.h 2007-06-18
17:44:19.000000000 +0200
@@ -123,6 +123,7 @@
#define ARG_OPTIMIZE 0x200 /* try to optimize */
#define ARG_NOGLOB 0x400 /* no file name expansion */
#define ARG_LET 0x800 /* processing let command arguments */
+#define ARG_ARRAYOK 0x1000 /* $x[sub] ==> ${x[sub]} */
extern char **sh_argbuild(int*,const struct comnod*,int);
extern struct dolnod *sh_argcreate(char*[]);
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/include/jobs.h
ksh93_2007_06_28/src/cmd/ksh93/include/jobs.h
--- ksh93_2007_05_15/src/cmd/ksh93/include/jobs.h 2007-04-10
23:07:19.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/include/jobs.h 2007-05-17
23:47:17.000000000 +0200
@@ -64,6 +64,7 @@
pid_t p_fgrp; /* process group when stopped */
short p_job; /* job number of process */
unsigned short p_exit; /* exit value or signal number */
+ unsigned short p_exitmin; /* minimum exit value for xargs */
unsigned short p_flag; /* flags - see below */
int p_env; /* subshell environment number */
#ifdef JOBS
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/Makefile
ksh93_2007_06_28/src/cmd/ksh93/Makefile
--- ksh93_2007_05_15/src/cmd/ksh93/Makefile 2007-05-15 19:05:05.000000000
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/Makefile 2007-06-26 21:43:34.000000000
+0200
@@ -104,7 +104,7 @@
elif CC.HOSTTYPE != "sgi.mips*"
LIBS_opt += +lsocket +lnsl
end
-if CC.HOSTTYPE == "linux.sparc"
+if CC.HOSTTYPE == "linux.sparc*"
/* the linux.sparc linker still has some problems */
LIBS_opt += -ldll
end
@@ -153,7 +153,7 @@
trestore.c waitevent.c xec.c env.c $(DATAFILES) $(FILES_opt) \
-lcmd -last -lm
-"sol*.i386" :NOOPTIMIZE: main.c
+"sol*.i386*" :NOOPTIMIZE: main.c
"win32*" :NOOPTIMIZE: trestore.c
if CC.HOSTTYPE == "win32*"
@@ -190,9 +190,9 @@
shopen.mk shopen.c
:: shtests \
- alias.sh append.sh arith.sh arrays.sh attributes.sh basic.sh \
- bracket.sh builtins.sh case.sh comvar.sh coprocess.sh exit.sh \
- expand.sh functions.sh glob.sh grep.sh heredoc.sh io.sh \
+ alias.sh append.sh arith.sh arrays.sh arrays2.sh attributes.sh \
+ basic.sh bracket.sh builtins.sh case.sh comvar.sh coprocess.sh \
+ exit.sh expand.sh functions.sh glob.sh grep.sh heredoc.sh io.sh \
nameref.sh options.sh path.sh quoting.sh quoting2.sh restricted.sh \
return.sh select.sh substring.sh tilde.sh variables.sh
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/Mamfile
ksh93_2007_06_28/src/cmd/ksh93/Mamfile
--- ksh93_2007_05_15/src/cmd/ksh93/Mamfile 2007-05-16 05:16:02.000000000
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/Mamfile 2007-06-29 07:09:09.000000000
+0200
@@ -1,4 +1,4 @@
-info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-03-26
+info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-06-21
setv INSTALLROOT ../../..
setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
setv PACKAGE_ast_LIB ${INSTALLROOT}/lib
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/RELEASE
ksh93_2007_06_28/src/cmd/ksh93/RELEASE
--- ksh93_2007_05_15/src/cmd/ksh93/RELEASE 2007-05-16 04:40:29.000000000
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/RELEASE 2007-06-29 05:39:32.000000000
+0200
@@ -1,14 +1,28 @@
-07-05-15 --- Release ksh93s+ ---
+07-06-28 --- Release ksh93s+ ---
+07-06-25 In vi insert mode, ksh no longer emits a backspace character
+ before the carraige return when the newline is entered.
+07-06-25 A bug in which pipefail would cause a command to return 0
+ when the pipeline was the last command and the failure happened
+ on a component other than the last has been fixed.
+07-06-25 A bug in the expansion of ${var/pattern/rep} when pattern or rep
+ contained a left parenthesis in single quotes has been fixed.
+07-06-18 The braces for a subscripted variable with ${var[sub]} are now
+ optional when inside [[...]], ((...)) or as a subscript.
+07-05-28 A bug in brace expansion in which single and double quotes did
+ not treat the comma as a literal character has been fixed.
+07-05-24 The -p option of whence now disables -v.
+07-05-23 Several bug fixes in compound variables and arrays of arrays
+ have been made.
07-05-15 A bug in which the %B format of printf was affected by the
locale has been fixed.
07-05-14 A bug in which \ was not removed in the replacement pattern with
${var/pattern/rep} when it was not followed by \ or a digit has
been fixed.
-07-05-10 A bug in which ksh -R file core dumped if no script was sepcifed
+07-05-10 A bug in which ksh -R file core dumped if no script was specified
has been fixed. it not displays an error message.
07-05-07 Added additional Solaris signals to signal table.
07-04-30 A bug in which a pipeline with command substitution inside a
- function could cause a pipline that invokes this function to
+ function could cause a pipeline that invokes this function to
hang when the pipefail option is on has been fixed.
07-04-30 Added -q to whence.
07-04-18 A small memory leak with each redirection of a non-builtin has
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/array.c
ksh93_2007_06_28/src/cmd/ksh93/sh/array.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/array.c 2007-03-15 21:58:02.000000000
+0100
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/array.c 2007-05-24 01:19:53.000000000
+0200
@@ -37,8 +37,7 @@
#define array_clrbit(cp, n) (cp[(n)/CHAR_BIT] &= ~(1<<(((n)&(CHAR_BIT-1)))))
#define array_isbit(cp, n) (cp[(n)/CHAR_BIT] & 1<<(((n)&(CHAR_BIT-1))))
#define NV_CHILD NV_EXPORT
-
-static char Empty[] = "";
+#define Empty ((char*)(e_sptbnl+3))
struct index_array
{
@@ -81,10 +80,12 @@
* but <= ARRAY_MAX) is returned.
*
*/
-static int arsize(register int maxi)
+static int arsize(struct index_array *ap, register int maxi)
{
- register int i = roundof(maxi,ARRAY_INCR);
- return (i>ARRAY_MAX?ARRAY_MAX:i);
+ if(ap && maxi < 2*ap->maxi)
+ maxi = 2*ap->maxi;
+ maxi = roundof(maxi,ARRAY_INCR);
+ return (maxi>ARRAY_MAX?ARRAY_MAX:maxi);
}
static struct index_array *array_grow(Namval_t*, struct index_array*,int);
@@ -323,6 +324,8 @@
Namfun_t *nfp;
if(nfp = nv_disc(np,(Namfun_t*)ap,NV_POP))
free((void*)nfp);
+ if(np->nvalue.cp==Empty)
+ np->nvalue.cp = 0;
}
}
@@ -348,7 +351,7 @@
{
register struct index_array *ap;
register int i=0;
- register int newsize = arsize(maxi+1);
+ register int newsize = arsize(arp,maxi+1);
if (maxi >= ARRAY_MAX)
errormsg(SH_DICT,ERROR_exit(1),e_subscript,
fmtbase((long)maxi,10,0));
ap = new_of(struct index_array,(newsize-1)*sizeof(union
Value*)+newsize/CHAR_BIT);
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/fault.c
ksh93_2007_06_28/src/cmd/ksh93/sh/fault.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/fault.c 2007-05-02 16:22:55.000000000
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/fault.c 2007-05-29 02:30:35.000000000
+0200
@@ -360,7 +360,12 @@
int sav_trapnote = sh.trapnote;
sh.trapnote &= ~SH_SIGSET;
if(sh.st.trap[SH_ERRTRAP])
- sh_trap(sh.st.trap[SH_ERRTRAP],0);
+ {
+ trap = sh.st.trap[SH_ERRTRAP];
+ sh.st.trap[SH_ERRTRAP] = 0;
+ sh_trap(trap,0);
+ sh.st.trap[SH_ERRTRAP] = trap;
+ }
sh.trapnote = sav_trapnote;
if(sh_isoption(SH_ERREXIT))
{
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/io.c
ksh93_2007_06_28/src/cmd/ksh93/sh/io.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/io.c 2007-03-20 21:22:35.000000000
+0100
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/io.c 2007-05-17 16:07:41.000000000
+0200
@@ -458,6 +458,8 @@
{
Sfdisc_t *dp;
sfset(iop,SF_MALLOC,1);
+ if(!(status&IOWRITE))
+ sfset(iop,SF_IOCHECK,1);
{
dp = newof(0,Sfdisc_t,1,0);
dp->exceptf = slowexcept;
@@ -1456,6 +1458,10 @@
return(0);
n=1;
}
+ else
+ n = 0;
+ if(sh.bltinfun && sh.bltindata.sigset)
+ return(-1);
errno = 0;
if(sh.trapnote&SH_SIGSET)
{
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/jobs.c
ksh93_2007_06_28/src/cmd/ksh93/sh/jobs.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/jobs.c 2007-04-26 14:41:21.000000000
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/jobs.c 2007-06-28 15:53:36.000000000
+0200
@@ -229,6 +229,7 @@
pw = &dummy;
pw->p_exit = 0;
pw->p_pgrp = 0;
+ pw->p_exitmin = 0;
if(job.toclear)
job_clear();
if(bck.count++ > sh.lim.child_max)
@@ -260,17 +261,14 @@
px->p_nxtjob = job.pwlist;
job.pwlist = px;
}
- pw->p_exit = WSTOPSIG(wstat);
pw->p_flag |= (P_NOTIFY|P_SIGNALLED|P_STOPPED);
+ pw->p_exit = WSTOPSIG(wstat);
if(pw->p_pgrp && pw->p_pgrp==job.curpgid &&
sh_isstate(SH_STOPOK))
sh_fault(pw->p_exit);
continue;
}
else if (WIFCONTINUED(wstat) && wcontinued)
- {
pw->p_flag &= ~(P_NOTIFY|P_SIGNALLED|P_STOPPED);
- pw->p_exit = 0;
- }
else
#endif /* SIGTSTP */
{
@@ -303,7 +301,8 @@
else
{
pw->p_flag |= (P_DONE|P_NOTIFY);
- if(WEXITSTATUS(wstat) > pw->p_exit)
+ pw->p_exit = pw->p_exitmin;
+ if(WEXITSTATUS(wstat) > pw->p_exitmin)
pw->p_exit = WEXITSTATUS(wstat);
}
if(pw->p_pgrp==0)
@@ -1058,8 +1057,8 @@
pw->p_env = sh.curenv;
pw->p_pid = pid;
pw->p_flag = P_EXITSAVE;
- pw->p_exit = sh.xargexit;
- sh.xargexit = 0;
+ pw->p_exitmin = sh.xargexit;
+ pw->p_exit = 0;
if(sh_isstate(SH_MONITOR))
{
if(killpg(job.curpgid,0)<0 && errno==ESRCH)
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/lex.c
ksh93_2007_06_28/src/cmd/ksh93/sh/lex.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/lex.c 2007-03-21 19:24:38.000000000
+0100
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/lex.c 2007-06-25 17:17:32.000000000
+0200
@@ -686,7 +686,7 @@
mode = ST_NORM;
continue;
case S_LIT:
- if(oldmode()==ST_NONE) /* in ((...)) */
+ if(oldmode()==ST_NONE && !lexd.noarg) /* in
((...)) */
{
if((c=fcpeek(0))==LPAREN || c==RPAREN
|| c=='$' || c==LBRACE || c==RBRACE || c=='[' || c==']')
{
@@ -804,7 +804,7 @@
if(shlex.kiafile)
refvar(0);
#endif /* SHOPT_KIA */
- if(lexd.warn && c==LBRACT)
+ if(lexd.warn && c==LBRACT && !lex.intest &&
!lexd.arith && oldmode()!= ST_NESTED)
errormsg(SH_DICT,ERROR_warn(0),e_lexusebrace,shp->inlineno);
fcseek(-1);
mode = oldmode();
@@ -1153,6 +1153,11 @@
return(0);
}
breakloop:
+ if(lexd.nocopy)
+ {
+ lexd.balance = 0;
+ return(0);
+ }
if(lexd.dolparen)
{
lexd.balance = 0;
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/macro.c
ksh93_2007_06_28/src/cmd/ksh93/sh/macro.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/macro.c 2007-05-14 17:08:10.000000000
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/macro.c 2007-06-25 17:28:03.000000000
+0200
@@ -43,6 +43,7 @@
#include "national.h"
#include "streval.h"
+
#undef STR_GROUP
#ifndef STR_GROUP
# define STR_GROUP 0
@@ -71,6 +72,7 @@
char arith; /* set for ((...)) */
char let; /* set when expanding let arguments */
char zeros; /* strip leading zeros when set */
+ char arrayok; /* $x[] ok for arrays */
void *nvwalk; /* for name space walking*/
} Mac_t;
@@ -208,6 +210,7 @@
mp->split = !(flag&ARG_ASSIGN);
mp->assign = !mp->split;
mp->pattern = mp->split && !(flag&ARG_NOGLOB) &&
!sh_isoption(SH_NOGLOB);
+ mp->arrayok = mp->arith || (flag&ARG_ARRAYOK);
str = argp->argval;
fcsopen(str);
mp->fields = 0;
@@ -388,7 +391,7 @@
arg->argchn.ap=0;
if(!(sp=arg->argchn.cp))
{
- sh_macexpand(arg,NIL(struct argnod**),flags);
+ sh_macexpand(arg,NIL(struct argnod**),flags|ARG_ARRAYOK);
sp = arg->argchn.cp;
if(!(flags&ARG_OPTIMIZE) || !(arg->argflag&ARG_MAKE))
arg->argchn.cp = 0;
@@ -655,6 +658,17 @@
--paren;
}
goto pattern;
+ case S_COM:
+ if(mp->pattern==4 && (mp->quote || mp->lit))
+ {
+ if(c)
+ {
+ stakwrite(first,c);
+ first = fcseek(c);
+ }
+ stakputc(ESCAPE);
+ }
+ break;
case S_BRACE:
if(!(mp->quote || mp->lit))
{
@@ -880,13 +894,16 @@
int xpattern = mp->pattern;
int loc = staktell();
int xarith = mp->arith;
+ int arrayok = mp->arrayok;
mp->split = 0;
mp->arith = 0;
mp->pattern = flag?4:0;
+ mp->arrayok=1;
copyto(mp,RBRACT,0);
mp->pattern = xpattern;
mp->split = split;
mp->arith = xarith;
+ mp->arrayok = arrayok;
return(loc);
}
@@ -1035,7 +1052,7 @@
do
stakputc(c);
while(((c=fcget()),(c>0x7f||isaname(c)))||type &&
c=='.');
- while(c==LBRACT && type)
+ while(c==LBRACT && (type||mp->arrayok))
{
sh.argaddr=0;
if((c=fcget(),isastchar(c)) &&
fcpeek(0)==RBRACT)
@@ -1107,7 +1124,7 @@
ap = np?nv_arrayptr(np):0;
if(type)
{
- if(ap && isastchar(mode) && !(ap->nelem&ARRAY_SCAN))
+ if(ap && (isastchar(mode)||type==M_TREE) &&
!(ap->nelem&ARRAY_SCAN))
nv_putsub(np,NIL(char*),ARRAY_SCAN);
if(!isbracechar(c))
goto nosub;
@@ -1119,7 +1136,7 @@
if((type==M_VNAME||type==M_SUBNAME) && sh.argaddr &&
strcmp(nv_name(np),id))
sh.argaddr = 0;
c = (type>M_BRACE && isastchar(mode));
- if(np && (!c || !ap))
+ if(np && (type==M_TREE || !c || !ap))
{
if(type==M_VNAME)
{
@@ -1129,11 +1146,7 @@
#ifdef SHOPT_TYPEDEF
else if(type==M_TYPE)
{
-#if 0
Namval_t *nq = nv_type(np);
-#else
- Namval_t *nq = 0;
-#endif
type = M_BRACE;
if(nq)
v = nv_name(nq);
@@ -1628,6 +1641,12 @@
nv_close(np);
return(1);
nosub:
+ if(type==M_BRACE && sh_lexstates[ST_NORM][c]==S_BREAK)
+ {
+ fcseek(-1);
+ comsubst(mp,2);
+ return(1);
+ }
if(type)
mac_error(np);
fcseek(-1);
@@ -1709,6 +1728,7 @@
sh.inlineno = error_info.line+sh.st.firstline;
t = (Shnode_t*)sh_parse(mp->shp, sp,SH_EOF|SH_NL);
sh.inlineno = c;
+ type = 1;
}
#if KSHELL
if(t)
@@ -1741,7 +1761,7 @@
sp =
sfnew(NIL(Sfio_t*),(char*)malloc(IOBSIZE+1),IOBSIZE,fd,SF_READ|SF_MALLOC);
}
else
- sp = sh_subshell(t,sh_isstate(SH_ERREXIT),1);
+ sp = sh_subshell(t,sh_isstate(SH_ERREXIT),type);
fcrestore(&save);
}
else
@@ -2290,8 +2310,10 @@
register int c;
while(c = *cp++)
{
- if(c==ESCAPE && (!rep || (*cp && !isadigit(*cp) &&
*cp!=ESCAPE)))
+ if(c==ESCAPE && (!rep || (*cp && strchr("&|()[]*?",*cp))))
+ {
c = *cp++;
+ }
else if(!rep && c=='/')
{
cp[-1] = 0;
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/name.c
ksh93_2007_06_28/src/cmd/ksh93/sh/name.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/name.c 2007-03-28 07:19:13.000000000
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/name.c 2007-06-29 05:39:19.000000000
+0200
@@ -34,6 +34,7 @@
#include "FEATURE/externs"
#include "streval.h"
+#define Empty ((char*)(e_sptbnl+3))
static char *savesub = 0;
#if !_lib_pathnative && _lib_uwin_path
@@ -60,9 +61,11 @@
struct adata
{
- char **argnam;
- int attsize;
- char *attval;
+ Shell_t *sh;
+ Namval_t *tp;
+ char **argnam;
+ int attsize;
+ char *attval;
};
char nv_local = 0;
@@ -192,7 +195,7 @@
{
Namval_t *mp;
stakseek(0);
- if(*arg->argval==0 && arg->argchn.ap &&
!(arg->argflag&~(ARG_APPEND|ARG_QUOTED)))
+ if(*arg->argval==0 && arg->argchn.ap &&
!(arg->argflag&~(ARG_APPEND|ARG_QUOTED|ARG_MESSAGE)))
{
int flag = (NV_VARNAME|NV_ARRAY|NV_ASSIGN);
struct fornod *fp=(struct
fornod*)arg->argchn.ap;
@@ -213,7 +216,7 @@
sh.prefix = prefix;
if(np)
{
- if(!nv_isarray(np))
+ if(nv_isvtree(np) &&
!nv_isarray(np))
{
stakputc('.');
stakputs(cp);
@@ -268,6 +271,18 @@
}
if(tp->tre.tretyp==TLST || !tp->com.comset ||
tp->com.comset->argval[0]!='[')
{
+ if(tp->tre.tretyp!=TLST &&
tp->com.comset && tp->com.comset->argval[0]==0 && tp->com.comset->argchn.ap)
+ {
+ if(prefix)
+ cp =
stakcopy(nv_name(np));
+ sh.prefix = cp;
+
nv_setlist(tp->com.comset,flags);
+ sh.prefix = prefix;
+
if(tp->com.comset->argval[1]!='[')
+ nv_setvtree(np);
+ nv_close(np);
+ continue;
+ }
if(*cp!='.' && *cp!='[' &&
strchr(cp,'['))
{
nv_close(np);
@@ -303,8 +318,10 @@
}
cp = arg->argval;
}
+#if 0
if(sh.prefix && *cp=='.' && cp[1]=='=')
cp++;
+#endif
np = nv_open(cp,sh.var_tree,flags);
if(!np->nvfun)
{
@@ -502,7 +519,7 @@
sh.argaddr = 0;
else if(flags&NV_NOREF)
{
- if(c)
+ if(c && !(flags&NV_NOADD))
nv_unref(np);
return(np);
}
@@ -535,6 +552,8 @@
flags |= NV_NOREF;
}
sh.last_root = root;
+ if(c=='.' && (cp[1]==0 || cp[1]=='=' || cp[1]=='+'))
+ return(np);
do
{
if(!np)
@@ -570,8 +589,7 @@
}
else
cp = sp;
- if((c = *cp)=='.' || c=='[' ||
(n&ARRAY_FILL))
-
+ if((c = *cp)=='.' || (c=='[' &&
nv_isarray(np)) || (n&ARRAY_FILL))
{
int m = cp-sp;
char *sub = m?nv_getsub(np):0;
@@ -611,14 +629,16 @@
}
else if(c==0 && mode &&
(n=nv_aindex(np))>0)
nv_putsub(np,(char*)0,n|ARRAY_FILL);
- else if(n==0 && c==0)
+ else if(n==0 && (c==0 || (c=='[' &&
!nv_isarray(np))))
{
/* subscript must be 0*/
cp[-1] = 0;
- c = sh_arith(sp+1);
+ n = sh_arith(sp+1);
cp[-1] = ']';
- if(c)
+ if(n)
return(0);
+ if(c)
+ sp = cp;
}
dp->last = cp;
if(nv_isarray(np) && (c=='[' || c=='.'
|| (flags&NV_ARRAY)))
@@ -628,8 +648,16 @@
*sp = c;
if(nq && nv_isnull(nq))
nq =
nv_arraychild(np,nq,c);
- if(!(np=nq))
- return(np);
+ if(nq)
+ np = nq;
+ else if(memcmp(cp,"[0]",3))
+ return(nq);
+ else
+ {
+ /* ignore [0] */
+ dp->last = cp += 3;
+ c = *cp;
+ }
}
}
else if(nv_isarray(np))
@@ -771,10 +799,18 @@
np = nv_search(name, funroot, c);
*fname = 0;
}
- else if(*cp=='+' && cp[1]=='=')
+ else
{
- append=NV_APPEND;
- cp++;
+ if(*cp=='.')
+ {
+ append |= NV_NODISC;
+ cp++;
+ }
+ if(*cp=='+' && cp[1]=='=')
+ {
+ append |= NV_APPEND;
+ cp++;
+ }
}
c = *cp;
skip:
@@ -789,12 +825,14 @@
}
else
{
- char *sub=0;
+ char *sub=0, *prefix= sh.prefix;
+ sh.prefix = 0;
if(sh_isoption(SH_XTRACE) && nv_isarray(np))
sub = nv_getsub(np);
c = msg==e_aliname? 0: (append | (flags&NV_EXPORT));
nv_putval(np, cp, c);
savesub = sub;
+ sh.prefix = prefix;
}
nv_onattr(np, flags&NV_ATTRIBUTES);
}
@@ -845,7 +883,7 @@
sh.argaddr = 0;
if(sh.subshell && !nv_local)
np = sh_assignok(np,1);
- if(np->nvfun && !nv_isattr(np,NV_REF))
+ if(np->nvfun && !(flags&NV_NODISC) && !nv_isattr(np,NV_REF))
{
/* This function contains disc */
if(!nv_local)
@@ -1327,6 +1365,8 @@
{
register int flag = np->nvflag;
register struct adata *ap = (struct adata*)data;
+ ap->sh = &sh;
+ ap->tp = 0;
if(!(flag&NV_EXPORT) || (flag&NV_FUNCT))
return;
flag &=
(NV_RDONLY|NV_UTOL|NV_LTOU|NV_RJUST|NV_LJUST|NV_ZFILL|NV_INTEGER);
@@ -1354,6 +1394,8 @@
{
register char *value;
register struct adata *ap = (struct adata*)data;
+ ap->sh = &sh;
+ ap->tp = 0;
if(nv_isattr(np,NV_IMPORT))
{
if(np->nvenv)
@@ -1394,6 +1436,8 @@
register int namec;
register char *cp;
struct adata data;
+ data.sh = &sh;
+ data.tp = 0;
/* L_ARGNOD gets generated automatically as full path name of command */
nv_offattr(L_ARGNOD,NV_EXPORT);
data.attsize = 6;
@@ -1421,7 +1465,6 @@
void *scandata;
};
-
static int scanfilter(Dt_t *dict, void *arg, void *data)
{
register Namval_t *np = (Namval_t*)arg;
@@ -1430,7 +1473,7 @@
NOT_USED(dict);
if(sp->scanmask?(k&sp->scanmask)==sp->scanflags:(!sp->scanflags ||
(k&sp->scanflags)))
{
- if(!np->nvalue.cp && !nv_isattr(np,~NV_DEFAULT))
+ if(!np->nvalue.cp && !np->nvfun && !nv_isattr(np,~NV_DEFAULT))
return(0);
if(sp->scanfn)
{
@@ -1535,6 +1578,8 @@
register Namval_t *np,*nq;
for(np=(Namval_t*)dtfirst(root);np;np=nq)
{
+ if(nv_isref(np))
+ nv_unref(np);
_nv_unset(np,flags);
if(oroot && (nq=nv_search(nv_name(np),oroot,0)) &&
nv_isattr(nq,NV_EXPORT))
sh_envput(sh.env,nq);
@@ -1596,7 +1641,7 @@
nv_local=0;
}
up = &np->nvalue;
- if(up->cp)
+ if(up->cp && up->cp!=Empty)
{
if(!nv_isattr (np, NV_NOFREE))
free((void*)up->cp);
@@ -2156,7 +2201,7 @@
*/
void nv_setref(register Namval_t *np, Dt_t *hp, int flags)
{
- register Namval_t *nq, *nr;
+ register Namval_t *nq, *nr=0;
register char *ep,*cp;
if(nv_isref(np))
return;
@@ -2167,8 +2212,13 @@
if((ep = lastdot(cp)) && nv_isattr(np,NV_MINIMAL))
errormsg(SH_DICT,ERROR_exit(1),e_badref,nv_name(np));
if(!hp)
+ {
hp = sh.var_tree;
- nr= nq = nv_open(cp, hp, flags|NV_NOREF);
+ if(!(nr = nq = nv_open(cp, hp,
flags|NV_NOREF|NV_NOSCOPE|NV_NOADD|NV_NOFAIL)))
+ hp = sh.var_base;
+ }
+ if(!nr)
+ nr= nq = nv_open(cp, hp, flags|NV_NOREF);
while(nv_isref(nr))
{
sh.last_table = nv_reftable(nr);
@@ -2189,7 +2239,19 @@
#if 0
nv_endsubscript(nq,ep,NV_ADD);
#endif
- ep = nv_getsub(nq);
+ if(nv_isarray(nq))
+ ep = nv_getsub(nq);
+ else
+ {
+ int savtop = staktell();
+ char *savptr = stakfreeze(0);
+ stakputs(nv_name(nr));
+ stakputs(ep-1);
+ ep = stakfreeze(1);
+ nq = nv_open(ep,hp,NV_ARRAY);
+ stakset(savptr,savtop);
+ ep = 0;
+ }
}
nv_unset(np);
np->nvalue.nrp = newof(0,struct Namref,1,0);
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/nvdisc.c
ksh93_2007_06_28/src/cmd/ksh93/sh/nvdisc.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/nvdisc.c 2007-05-15 05:08:51.000000000
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/nvdisc.c 2007-05-24 03:11:27.000000000
+0200
@@ -1188,6 +1188,8 @@
return(tp->dict);
#if 0
np = nv_create(np,(const char*)0, NV_FIRST, (Namfun_t*)0);
+#else
+ break;
#endif
}
return(sh.var_tree);
@@ -1239,12 +1241,18 @@
return(0);
}
+Namval_t *nv_type(Namval_t *np)
+{
+ return(0);
+}
+
/*
* This function turns variable <np> to the type <tp>
*/
int nv_settype(Namval_t* np, Namval_t *tp, int flags)
{
int isnull = nv_isnull(np);
+ int rdonly = nv_isattr(np,NV_RDONLY);
char *val=0;
if(isnull)
flags &= ~NV_APPEND;
@@ -1256,6 +1264,8 @@
}
if(!nv_clone(tp,np,flags|NV_NOFREE))
return(0);
+ if(!rdonly)
+ nv_offattr(np,NV_RDONLY);
if(val)
{
nv_putval(np,val,NV_RDONLY);
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/nvtree.c
ksh93_2007_06_28/src/cmd/ksh93/sh/nvtree.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/nvtree.c 2007-05-14 22:35:54.000000000
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/nvtree.c 2007-05-24 01:25:55.000000000
+0200
@@ -31,6 +31,8 @@
#include "name.h"
#include "argnod.h"
+#define Empty ((char*)(e_sptbnl+3))
+
struct nvdir
{
Dt_t *root;
@@ -399,10 +401,12 @@
if(fp = nv_stack(np,NIL(Namfun_t*)))
free((void*)fp);
np->nvfun = 0;
+ return;
}
- return;
+ if(!np->nvalue.cp)
+ return;
}
- if(nv_isnull(np))
+ if(nv_isnull(np) || np->nvalue.cp==Empty)
return;
if(special || nv_isarray(np))
{
@@ -423,7 +427,9 @@
return;
if(special)
{
+#if 0
associative = 1;
+#endif
sfnputc(wp->out,'\t',wp->indent);
}
else
@@ -440,6 +446,9 @@
sfnputc(wp->out,'\t',++wp->indent);
}
}
+ fp = np->nvfun;
+ if(*name=='.')
+ np->nvfun = 0;
while(1)
{
char *fmtq,*ep;
@@ -470,6 +479,8 @@
break;
sfnputc(wp->out,'\t',wp->indent);
}
+ if(*name=='.')
+ np->nvfun = fp;
if(isarray && !special)
{
sfnputc(wp->out,'\t',--wp->indent);
@@ -533,7 +544,7 @@
sfnputc(outfile,'\t',wp->indent);
nv_attribute(np,outfile,"typeset",1);
nv_close(np);
- sfputr(outfile,arg+m+(n?n+1:0),'=');
+ sfputr(outfile,arg+m+(n?n:0),'=');
argv = genvalue(++argv,cp,cp-arg ,wp);
sfputc(outfile,'\n');
}
@@ -581,8 +592,9 @@
char *subscript=0;
void *dir;
int n=0, noscope=(dlete&NV_NOSCOPE);
+ Namarr_t *arp = nv_arrayptr(np);
stakputs(nv_name(np));
- if(subscript = nv_getsub(np))
+ if(arp && !(arp->nelem&ARRAY_SCAN) && (subscript = nv_getsub(np)))
{
stakputc('[');
stakputs(subscript);
@@ -641,8 +653,10 @@
NOT_USED(fp);
if(nv_isattr(np,NV_BINARY) && nv_isattr(np,NV_RAW))
return(nv_getv(np,fp));
+#if 0
if(nv_isattr(np,NV_ARRAY) && nv_arraychild(np,(Namval_t*)0,0)==np)
return(nv_getv(np,fp));
+#endif
return(walk_tree(np,0));
}
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/parse.c
ksh93_2007_06_28/src/cmd/ksh93/sh/parse.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/parse.c 2006-11-29 15:32:12.000000000
+0100
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/parse.c 2007-05-21 23:51:20.000000000
+0200
@@ -298,6 +298,9 @@
case LPAREN:
t = sh_cmd(RPAREN,SH_NL|SH_EMPTY);
break;
+ case LBRACE:
+ t = sh_cmd(RBRACE,SH_NL|SH_EMPTY);
+ break;
}
shlex.comsub = 0;
if(!sp && (sp=fcfile()))
@@ -801,7 +804,18 @@
ap->argflag |= ARG_MESSAGE;
*settail = ap;
settail = &(ap->argnxt.ap);
- n = skipnl(0);
+ while((n = skipnl(0))==0)
+ {
+ ap = (struct argnod*)stakseek(ARGVAL);
+ ap->argflag= ARG_ASSIGN;
+ sfprintf(stkstd,"[%d]=",index++);
+ stakputs(shlex.arg->argval);
+ ap = (struct argnod*)stakfreeze(1);
+ ap->argnxt.ap = 0;
+ ap->argflag = shlex.arg->argflag;
+ *settail = ap;
+ settail = &(ap->argnxt.ap);
+ }
}
}
else if(n)
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/subshell.c
ksh93_2007_06_28/src/cmd/ksh93/sh/subshell.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/subshell.c 2007-04-30
17:29:04.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/subshell.c 2007-05-15
23:38:02.000000000 +0200
@@ -367,7 +367,7 @@
if(!shp->pwd)
path_pwd(0);
sp->bckpid = shp->bckpid;
- if(!comsub || !sh_isoption(SH_SUBSHARE))
+ if(!comsub || (comsub==1 && !sh_isoption(SH_SUBSHARE)))
{
sp->shpwd = shp->pwd;
sp->pwd = (shp->pwd?strdup(shp->pwd):0);
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh/xec.c
ksh93_2007_06_28/src/cmd/ksh93/sh/xec.c
--- ksh93_2007_05_15/src/cmd/ksh93/sh/xec.c 2007-05-02 23:52:12.000000000
+0200
+++ ksh93_2007_06_28/src/cmd/ksh93/sh/xec.c 2007-06-25 22:13:32.000000000
+0200
@@ -1012,7 +1012,8 @@
int pipes[2];
no_fork = (execflg && !(type&(FAMP|FPOU)) &&
!sh.subshell && !sh.st.trapcom[0] &&
- !sh.st.trap[SH_ERRTRAP] && sh.fn_depth==0);
+ !sh.st.trap[SH_ERRTRAP] && sh.fn_depth==0 &&
+ !(pipejob && sh_isoption(SH_PIPEFAIL)));
if(sh.subshell)
sh_subtmpfile();
if(sh_isstate(SH_PROFILE) || sh.dot_depth)
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/sh.1
ksh93_2007_06_28/src/cmd/ksh93/sh.1
--- ksh93_2007_05_15/src/cmd/ksh93/sh.1 2007-03-06 20:57:14.000000000 +0100
+++ ksh93_2007_06_28/src/cmd/ksh93/sh.1 2007-06-22 04:34:48.000000000 +0200
@@ -1107,8 +1107,10 @@
.I parameter\^
is followed by a letter, digit, or underscore
that is not to be interpreted as part of its name,
-when the variable name contains a \fB\s+2.\s-2\fP,
-or when a variable is subscripted.
+when the variable name contains a \fB\s+2.\s-2\fP.
+The braces are also required when a variable is subscripted
+unless it is part of an Arithmetic Expression
+or a Conditional Expression.
If
.I parameter\^
is one or more digits then it is a positional parameter.
@@ -6375,7 +6377,7 @@
to fail or zero of no command has failed.
.TP 8
.B showme
-When enabled, simple commands or pipelines preceded by a a semicolon
+When enabled, simple commands or pipelines preceded by a semicolon
.RB ( ; )
will be displayed as if the
.B xtrace
@@ -7086,6 +7088,11 @@
.I name\^
even if name is an alias, a function, or a reserved word.
The
+.B \-p
+option turns off the
+.B \-v
+option.
+The
.B \-a
option
is similar to the
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/tests/arrays2.sh
ksh93_2007_06_28/src/cmd/ksh93/tests/arrays2.sh
--- ksh93_2007_05_15/src/cmd/ksh93/tests/arrays2.sh 1970-01-01
01:00:00.000000000 +0100
+++ ksh93_2007_06_28/src/cmd/ksh93/tests/arrays2.sh 2007-05-23
16:37:02.000000000 +0200
@@ -0,0 +1,124 @@
+########################################################################
+# #
+# This software is part of the ast package #
+# Copyright (c) 1982-2007 AT&T Knowledge Ventures #
+# and is licensed under the #
+# Common Public License, Version 1.0 #
+# by AT&T Knowledge Ventures #
+# #
+# A copy of the License is available at #
+# http://www.opensource.org/licenses/cpl1.0.txt #
+# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) #
+# #
+# Information and Software Systems Research #
+# AT&T Research #
+# Florham Park NJ #
+# #
+# David Korn <dgk at research.att.com> #
+# #
+########################################################################
+function err_exit
+{
+ print -u2 -n "\t"
+ print -u2 -r ${Command}[$1]: "${@:2}"
+ let Errors+=1
+}
+alias err_exit='err_exit $LINENO'
+
+Command=${0##*/}
+integer Errors=0
+for ((i=0; i < 4; i++ ))
+do for ((j=0; j < 5; j++ ))
+ do a[i][j]=$i$j
+ done
+done
+for ((i=0; i < 4; i++ ))
+do for ((j=0; j < 5; j++ ))
+ do [[ ${a[i][j]} == "$i$j" ]] || err_exit "\${a[$i][$j]} != $i$j"
+ done
+done
+for ((i=0; i < 4; i++ ))
+do j=0;for k in ${a[...@]}
+ do [[ $k == "$i$j" ]] || err_exit "\${a[...@]} != $i$j"
+ (( j++ ))
+ done
+done
+unset a
+a=(
+ ( 00 01 02 03 04 )
+ ( 10 11 12 13 14 15)
+ ( 20 21 22 23 24 )
+ ( 30 31 32 33 34 )
+)
+
+function check
+{
+ nameref a=$1
+ nameref b=a[2]
+ typeset c=$1
+ integer i j
+ for ((i=0; i < 4; i++ ))
+ do for ((j=0; j < 5; j++ ))
+ do [[ ${a[$i][$j]} == "$i$j" ]] || err_exit
"\${$c[$i][$j]} != $i$j"
+ done
+ done
+ (( ${...@]} == 4 )) || err_exit "\${#...@]} not 4"
+ (( ${#a[...@]} == 5 )) || err_exit "\${#$c[...@]} not 5"
+ (( ${#a[...@]} == 6 )) || err_exit "\${#$c[...@]} not 6"
+ set -s -- ${...@]}
+ [[ $...@} == '0 1 2 3' ]] || err_exit "\${!...@]} not 0 1 2 3"
+ set -s -- ${!a[...@]}
+ [[ $...@} == '0 1 2 3 4' ]] || err_exit "\${!$c[...@]} not 0 1 2 3 4"
+ set -s -- ${!a[...@]}
+ [[ $...@} == '0 1 2 3 4 5' ]] || err_exit "\${!$c[...@]} not 0 1 2 3 4
5"
+ [[ $a == 00 ]] || err_exit "\$$c is not 00"
+ [[ ${a[0]} == 00 ]] || err_exit "\${$a[0]} is not 00"
+ [[ ${a[0][0]} == 00 ]] || err_exit "${a[0][0]} is not 00"
+ [[ ${a[0][0][0]} == 00 ]] || err_exit "\${$c[0][0][0]} is not 00"
+ [[ ${a[0][0][1]} == '' ]] || err_exit "\${$c[0][0][1]} is not empty"
+ [[ ${b[3]} == 23 ]] || err_exit "${!b}[3] not = 23"
+}
+
+check a
+
+exit
+unset a
+typeset -A a
+for ((i=0; i < 4; i++ ))
+do for ((j=0; j < 5; j++ ))
+ do a[$i][j]=$i$j
+ done
+done
+for ((i=0; i < 4; i++ ))
+do for ((j=0; j < 5; j++ ))
+ do [[ ${a[$i][j]} == "$i$j" ]] || err_exit "\${a[$i][$j]} == $i$j"
+ done
+done
+a[1][5]=15
+b=(
+ [0]=( 00 01 02 03 04 )
+ [1]=( 10 11 12 13 14 15)
+ [2]=( 20 21 22 23 24 )
+ [3]=( 30 31 32 33 34 )
+)
+check b
+[[ ${a[...@]} == "${b[...@]}" ]] || err_exit "a[1] not equal to b[1]"
+c=(
+ [0]=( [0]=00 [1]=01 [2]=02 [3]=03 [4]=04 )
+ [1]=( [0]=10 [1]=11 [2]=12 [3]=13 [4]=14 [5]=15)
+ [2]=( [0]=20 [1]=21 [2]=22 [3]=23 [4]=24 )
+ [3]=( [0]=30 [1]=31 [2]=32 [3]=33 [4]=34 )
+)
+check c
+typeset -A d
+d[0]=( [0]=00 [1]=01 [2]=02 [3]=03 [4]=04 )
+d[1]=( [0]=10 [1]=11 [2]=12 [3]=13 [4]=14 [5]=15)
+d[2]=( [0]=20 [1]=21 [2]=22 [3]=23 [4]=24 )
+d[3]=( [0]=30 [1]=31 [2]=32 [3]=33 [4]=34 )
+check d
+unset a b c d
+[[ ${a-set} ]] || err_exit "a is set after unset"
+[[ ${b-set} ]] || err_exit "b is set after unset"
+[[ ${c-set} ]] || err_exit "c is set after unset"
+[[ ${d-set} ]] || err_exit "c is set after unset"
+exit $((Errors))
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/tests/arrays.sh
ksh93_2007_06_28/src/cmd/ksh93/tests/arrays.sh
--- ksh93_2007_05_15/src/cmd/ksh93/tests/arrays.sh 2007-01-04
02:59:14.000000000 +0100
+++ ksh93_2007_06_28/src/cmd/ksh93/tests/arrays.sh 2007-06-18
19:28:47.000000000 +0200
@@ -378,4 +378,19 @@
unset bar
: ${_foo[bar=4]}
(( bar == 4 )) || err_exit 'subscript of unset variable not evaluated'
+unset foo bar
+foo[5]=4
+bar[4]=3
+bar[0]=foo
+foo[0]=bam
+foo[4]=5
+[[ ${bar[${foo[5]}]} == 3 ]] || err_exit 'array subscript cannot be an array
instance'
+[[ $bar[4] == 3 ]] || err_exit '$bar[x] != ${bar[x]} inside [[ ]]'
+(( $bar[4] == 3 )) || err_exit '$bar[x] != ${bar[x]} inside (( ))'
+[[ $bar[$foo[5]] == 3 ]] || err_exit '$bar[foo[x]] != ${bar[foo[x]]} inside
[[ ]]'
+(( $bar[$foo[5]] == 3 )) || err_exit '$bar[foo[x]] != ${bar[foo[x]]} inside
(( ))'
+x=$bar[4]
+[[ $x == 4 ]] && err_exit '$bar[4] should not be an array in an assignment'
+x=${bar[$foo[5]]}
+(( $x == 3 )) || err_exit '${bar[$foo[sub]]} not working'
exit $((Errors))
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/tests/expand.sh
ksh93_2007_06_28/src/cmd/ksh93/tests/expand.sh
--- ksh93_2007_05_15/src/cmd/ksh93/tests/expand.sh 2006-08-23
08:37:01.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/tests/expand.sh 2007-05-29
02:54:33.000000000 +0200
@@ -37,6 +37,8 @@
'f{d,e,f}g' 'fdg feg ffg' \
'{l,n,m}xyz' 'lxyz nxyz mxyz' \
'{abc\,def}' '{abc,def}' \
+ '{"abc,def"}' '{abc,def}' \
+ "{'abc,def'}" '{abc,def}' \
'{abc}' '{abc}' \
'\{a,b,c,d,e}' '{a,b,c,d,e}' \
'{x,y,\{a,b,c}}' 'x} y} {a} b} c}' \
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/tests/functions.sh
ksh93_2007_06_28/src/cmd/ksh93/tests/functions.sh
--- ksh93_2007_05_15/src/cmd/ksh93/tests/functions.sh 2006-11-29
15:40:15.000000000 +0100
+++ ksh93_2007_06_28/src/cmd/ksh93/tests/functions.sh 2007-05-29
02:57:19.000000000 +0200
@@ -755,4 +755,19 @@
done
}
[[ $(foo 'NUMBERED RECORDSIZE') == ok ]] || err_exit 'optimization error with
undefined variable'
+unset x
+x=$(
+ set -e
+ integer count=0
+ function err_f
+ {
+ if ((count++==3))
+ then print failed
+ else false
+ fi
+ }
+ trap 'err_f' ERR
+ false
+)
+[[ $x == failed ]] && err_exit 'ERR trap executed multiple times'
exit $((Errors))
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/tests/options.sh
ksh93_2007_06_28/src/cmd/ksh93/tests/options.sh
--- ksh93_2007_05_15/src/cmd/ksh93/tests/options.sh 2007-05-11
22:42:25.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/tests/options.sh 2007-06-25
22:19:56.000000000 +0200
@@ -310,6 +310,7 @@
false | true | true && err_exit 'pipe with first not failing with pipefail'
true | false | true && err_exit 'pipe middle not failing with pipefail'
true | true | false && err_exit 'pipe last not failing with pipefail'
+$SHELL -c 'set -o pipefail; false | /bin/true;' && err_exit 'pipefail not
returning failure with sh -c'
$SHELL -c '[[ $- == *c* ]]' || err_exit 'option c not in $-'
trap 'rm -f /tmp/.profile' EXIT
> /tmp/.profile
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/tests/restricted.sh
ksh93_2007_06_28/src/cmd/ksh93/tests/restricted.sh
--- ksh93_2007_05_15/src/cmd/ksh93/tests/restricted.sh 2007-03-06
18:28:39.000000000 +0100
+++ ksh93_2007_06_28/src/cmd/ksh93/tests/restricted.sh 2007-06-26
09:01:51.000000000 +0200
@@ -72,7 +72,6 @@
#! $SHELL
print hello
!
-cp script /tmp/dgk
check_restricted 'script;:' || err_exit 'script with #! pathname should not
run in restricted mode'
check_restricted 'script' || err_exit 'script with #! pathname should not run
in restricted mode even if last command in script'
exit $((Errors))
diff -r -N -u ksh93_2007_05_15/src/cmd/ksh93/tests/substring.sh
ksh93_2007_06_28/src/cmd/ksh93/tests/substring.sh
--- ksh93_2007_05_15/src/cmd/ksh93/tests/substring.sh 2007-05-14
16:55:20.000000000 +0200
+++ ksh93_2007_06_28/src/cmd/ksh93/tests/substring.sh 2007-06-25
17:14:35.000000000 +0200
@@ -170,6 +170,17 @@
if [[ ${xx//%28/abc\)} != 'abc)text%29' ]]
then err_exit '${xx//%28/abc\)} not working'
fi
+xx='a:b'
+str='(){}[]*?|&^...@l'
+for ((i=0 ; i < ${#str}; i++))
+do [[ $(eval print -r -- \${xx//:/\\${str:i:1}}) == "a${str:i:1}b" ]] ||
err_exit "substitution of \\${str:i:1}} failed"
+ [[ $(eval print -rn -- \${xx//:/\'${str:i:1}\'}) == "a${str:i:1}b" ]]
|| err_exit "substitution of '${str:i:1}' failed"
+ [[ $(eval print -r -- \${xx//:/\"${str:i:1}\"}) == "a${str:i:1}b" ]]
|| err_exit "substitution of \"${str:i:1}\" failed"
+done
+[[ ${xx//:/\\n} == 'a\nb' ]] || err_exit "substituion of \\\\n failed"
+[[ ${xx//:/'\n'} == 'a\nb' ]] || err_exit "substituion of '\\n' failed"
+[[ ${xx//:/"\n"} == 'a\nb' ]] || err_exit "substituion of \"\\n\" failed"
+[[ ${xx//:/$'\n'} == $'a\nb' ]] || err_exit "substituion of \$'\\n' failed"
unset foo
foo=one/two/three
if [[ ${foo//'/'/_} != one_two_three ]]
@@ -274,6 +285,10 @@
a='\[abc @(*) def\]'
b='[abc 123 def]'
[[ ${b//$a/\1} == 123 ]] || err_exit "\${var/pattern} not working with \[ in
pattern"
+unset foo
+foo='(win32.i386) '
+[[ ${foo/'('/'(x11-'} == '(x11-win32.i386) ' ]] || err_exit "\${var/pattern}
not working with ' in pattern"
+$SHELL -c $'v=\'$(hello)\'; [[ ${v//\'$(\'/-I\'$(\'} == -I"$v" ]]' 2>
/dev/null || err_exit "\${var/pattern} not working with \$( as pattern"
unset X
$SHELL -c '[[ ! $...@]:0:300} ]]' 2> /dev/null || err_exit '$...@]:0:300} with
X undefined fails'
$SHELL -c '[[ ${@:0:300} == "$0" ]]' 2> /dev/null || err_exit '${@:0:300} with
no arguments fails'
diff -r -N -u ksh93_2007_05_15/src/lib/libast/features/fs
ksh93_2007_06_28/src/lib/libast/features/fs
--- ksh93_2007_05_15/src/lib/libast/features/fs 2006-09-21 06:41:53.000000000
+0200
+++ ksh93_2007_06_28/src/lib/libast/features/fs 2007-05-24 17:28:16.000000000
+0200
@@ -54,6 +54,7 @@
}end
header sys/stat.h
+header sys/mkdev.h
extern chmod int (const char*, mode_t)
extern fstat int (int, struct stat*)
diff -r -N -u ksh93_2007_05_15/src/lib/libast/Mamfile
ksh93_2007_06_28/src/lib/libast/Mamfile
--- ksh93_2007_05_15/src/lib/libast/Mamfile 2007-05-16 05:16:04.000000000
+0200
+++ ksh93_2007_06_28/src/lib/libast/Mamfile 2007-06-29 07:09:12.000000000
+0200
@@ -1,4 +1,4 @@
-info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-03-26
+info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-06-21
setv INSTALLROOT ../../..
setv PACKAGEROOT ../../../../..
setv AR ar
diff -r -N -u ksh93_2007_05_15/src/lib/libast/RELEASE
ksh93_2007_06_28/src/lib/libast/RELEASE
--- ksh93_2007_05_15/src/lib/libast/RELEASE 2007-05-16 02:08:01.000000000
+0200
+++ ksh93_2007_06_28/src/lib/libast/RELEASE 2007-05-21 19:30:43.000000000
+0200
@@ -1,3 +1,4 @@
+07-05-21 tm/tmxfmt.c,tmxscan.c: %F => %L (TM_DEFAULT); %F => %Y-%m-%d
07-05-15 sfio/sfvprintf.c: %h? and SFFMT_SHORT => raw bytes
07-05-09 features/signal.c,features/siglist: use kill -l & strsignal()
07-04-25 misc/optctx.c: add for opt_info switching
diff -r -N -u ksh93_2007_05_15/src/lib/libast/tm/tmxfmt.c
ksh93_2007_06_28/src/lib/libast/tm/tmxfmt.c
--- ksh93_2007_05_15/src/lib/libast/tm/tmxfmt.c 2007-01-17 21:36:13.000000000
+0100
+++ ksh93_2007_06_28/src/lib/libast/tm/tmxfmt.c 2007-05-21 19:27:32.000000000
+0200
@@ -242,9 +242,8 @@
case 'o': /* OBSOLETE */
p = tm_info.deformat;
goto push;
- case 'F': /* TM_DEFAULT */
- case 'O': /* OBSOLETE */
- p = tm_info.format[TM_DEFAULT];
+ case 'F': /* ISO 8601:2000 standard date format */
+ p = "%Y-%m-%d";
goto push;
case 'g': /* %V 2 digit year */
case 'G': /* %V 4 digit year */
@@ -303,6 +302,10 @@
}
p = tm_info.format[TM_RECENT];
goto push;
+ case 'L': /* TM_DEFAULT */
+ case 'O': /* OBSOLETE */
+ p = tm_info.format[TM_DEFAULT];
+ goto push;
case 'm': /* month number */
cp = number(cp, ep, (long)(tp->tm_mon + 1), 2, width,
pad);
continue;
diff -r -N -u ksh93_2007_05_15/src/lib/libast/tm/tmxscan.c
ksh93_2007_06_28/src/lib/libast/tm/tmxscan.c
--- ksh93_2007_05_15/src/lib/libast/tm/tmxscan.c 2007-03-11
12:43:11.000000000 +0100
+++ ksh93_2007_06_28/src/lib/libast/tm/tmxscan.c 2007-05-21
19:30:12.000000000 +0200
@@ -262,6 +262,9 @@
goto more;
}
continue;
+ case 'F':
+ p = "%Y-%m-%d";
+ break;
case 'H':
case 'k':
NUMBER(2, 0, 23);
diff -r -N -u ksh93_2007_05_15/src/lib/libcmd/cksum.c
ksh93_2007_06_28/src/lib/libcmd/cksum.c
--- ksh93_2007_05_15/src/lib/libcmd/cksum.c 2007-05-08 23:13:36.000000000
+0200
+++ ksh93_2007_06_28/src/lib/libcmd/cksum.c 2007-05-20 20:57:02.000000000
+0200
@@ -27,7 +27,7 @@
*/
static const char usage[] =
-"[-?\n@(#)$Id: sum (AT&T Research) 2007-02-07 $\n]"
+"[-?\n@(#)$Id: sum (AT&T Research) 2007-05-20 $\n]"
USAGE_LICENSE
"[+NAME?cksum,md5sum,sum - print file checksum and block count]"
"[+DESCRIPTION?\bsum\b lists the checksum, and for most methods the block"
@@ -106,6 +106,7 @@
#include <cmd.h>
#include <sum.h>
#include <ls.h>
+#include <modex.h>
#include <fts.h>
#include <error.h>
diff -r -N -u ksh93_2007_05_15/src/lib/libcmd/cmd.h
ksh93_2007_06_28/src/lib/libcmd/cmd.h
--- ksh93_2007_05_15/src/lib/libcmd/cmd.h 2007-05-11 21:32:56.000000000
+0200
+++ ksh93_2007_06_28/src/lib/libcmd/cmd.h 2007-05-20 20:57:40.000000000
+0200
@@ -141,7 +141,11 @@
#define _CMD_CONTEXT_OK(p)
(((Shbltin_t*)(p))->version>=20070511&&((Shbltin_t*)(p))->version<20350101)
#undef cmdinit
+#ifdef _MSC_VER
+#define cmdinit(a,b,c,d,e) do{if(_cmd_init(a,b,c,d,e))return -1;}while(0)
+#else
#define cmdinit(a,b,c,d,e)
do{if((c)&&!_CMD_CONTEXT_OK(c))c=0;if(_cmd_init(a,b,c,d,e))return -1;}while(0)
+#endif
#if _BLD_cmd && defined(__EXPORT__)
#define extern extern __EXPORT__
diff -r -N -u ksh93_2007_05_15/src/lib/libcmd/date.c
ksh93_2007_06_28/src/lib/libcmd/date.c
--- ksh93_2007_05_15/src/lib/libcmd/date.c 2007-05-09 06:07:11.000000000
+0200
+++ ksh93_2007_06_28/src/lib/libcmd/date.c 2007-05-21 19:32:32.000000000
+0200
@@ -27,7 +27,7 @@
*/
static const char usage[] =
-"[-?\n@(#)$Id: date (AT&T Research) 2007-03-28 $\n]"
+"[-?\n@(#)$Id: date (AT&T Research) 2007-05-21 $\n]"
USAGE_LICENSE
"[+NAME?date - set/list/convert dates]"
"[+DESCRIPTION?\bdate\b sets the current date and time (with appropriate"
@@ -96,7 +96,7 @@
" [+e?blank padded day of month number]"
" [+E?unpadded day of month number]"
" [+f?locale default override date format]"
-" [+F?locale default date format]"
+" [+F?%ISO 8601:2000 standard date format; equivalent to Y-%m-%d]"
" [+g?\bls\b(1) \b-l\b recent date with \ahh:mm\a]"
" [+G?\bls\b(1) \b-l\b distant date with \ayyyy\a]"
" [+h?abbreviated month name]"
@@ -108,6 +108,7 @@
" [+k?\bdate\b(1) style date]"
" [+K?all numeric date; equivalent to \b%Y-%m-%d+%H:%M:%S\b]"
" [+l?\bls\b(1) \b-l\b date; equivalent to \b%Q/%g/%G/\b]"
+" [+L?locale default date format]"
" [+m?month number]"
" [+M?minutes]"
" [+n?newline character]"
diff -r -N -u ksh93_2007_05_15/src/lib/libcmd/Mamfile
ksh93_2007_06_28/src/lib/libcmd/Mamfile
--- ksh93_2007_05_15/src/lib/libcmd/Mamfile 2007-05-16 05:16:05.000000000
+0200
+++ ksh93_2007_06_28/src/lib/libcmd/Mamfile 2007-06-29 07:09:13.000000000
+0200
@@ -1,4 +1,4 @@
-info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-03-26
+info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-06-21
setv INSTALLROOT ../../..
setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
setv PACKAGE_ast_LIB ${INSTALLROOT}/lib
@@ -182,6 +182,13 @@
prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
done ${PACKAGE_ast_INCLUDE}/error.h
prev ${PACKAGE_ast_INCLUDE}/fts.h implicit
+make ${PACKAGE_ast_INCLUDE}/modex.h implicit
+make ${PACKAGE_ast_INCLUDE}/modecanon.h implicit
+prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
+done ${PACKAGE_ast_INCLUDE}/modecanon.h dontcare
+prev ${PACKAGE_ast_INCLUDE}/ast_fs.h implicit
+prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
+done ${PACKAGE_ast_INCLUDE}/modex.h
prev ${PACKAGE_ast_INCLUDE}/ls.h implicit
make ${PACKAGE_ast_INCLUDE}/sum.h implicit
prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
diff -r -N -u ksh93_2007_05_15/src/lib/libcmd/RELEASE
ksh93_2007_06_28/src/lib/libcmd/RELEASE
--- ksh93_2007_05_15/src/lib/libcmd/RELEASE 2007-05-11 21:32:32.000000000
+0200
+++ ksh93_2007_06_28/src/lib/libcmd/RELEASE 2007-05-20 20:58:47.000000000
+0200
@@ -1,3 +1,5 @@
+07-05-20 cmd.h: handle msvc's balk at if(0)0=0;
+07-05-20 cksum.c: #include <modex.h>
07-05-11 cmd.h: add _CMD_CONTEXT_OK() to verify >= 20070511 context
07-05-09 fds.c: handle ipv6 sockets
07-05-09 cmd.h: <shbltin.h> : cmdquit() => sh_checksig(context)
diff -r -N -u ksh93_2007_05_15/src/lib/libdll/Mamfile
ksh93_2007_06_28/src/lib/libdll/Mamfile
--- ksh93_2007_05_15/src/lib/libdll/Mamfile 2007-04-20 21:57:17.000000000
+0200
+++ ksh93_2007_06_28/src/lib/libdll/Mamfile 2007-06-29 07:09:14.000000000
+0200
@@ -1,4 +1,4 @@
-info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-03-26
+info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-06-21
setv INSTALLROOT ../../..
setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
setv PACKAGE_ast_LIB ${INSTALLROOT}/lib
diff -r -N -u ksh93_2007_05_15/src/lib/libsum/Mamfile
ksh93_2007_06_28/src/lib/libsum/Mamfile
--- ksh93_2007_05_15/src/lib/libsum/Mamfile 2007-04-20 21:57:19.000000000
+0200
+++ ksh93_2007_06_28/src/lib/libsum/Mamfile 2007-06-29 07:09:14.000000000
+0200
@@ -1,4 +1,4 @@
-info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-03-26
+info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-06-21
setv INSTALLROOT ../../..
setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
setv PACKAGE_ast_LIB ${INSTALLROOT}/lib