[ksh93-integration-discuss] [Fwd: [ast-users] 2007-05-15 beta source tarballs]
Felix Schulte
felix.schulte at gmail.com
Wed May 23 06:27:48 PDT 2007
On 5/20/07, Roland Mainz <roland.mainz at nrubsig.org> wrote:
>
> Hi!
>
> ----
>
> ast-ksh.2007-05-15 is out (yes, yes, I know... I am little bit late with
> this annoucement... ;-( )
>
> -------- Original Message --------
patch diff from 20070418 to 20070515 attached
--
_ Felix Schulte
_|_|_ mailto:felix.schulte at gmail.com
(0 0)
ooO--(_)--Ooo
-------------- next part --------------
diff -r -N -u ksh93_2007_04_18/lib/package/ast-ksh.html ksh93_2007_05_15/lib/package/ast-ksh.html
--- ksh93_2007_04_18/lib/package/ast-ksh.html 2007-04-18 20:07:29.000000000 +0200
+++ ksh93_2007_05_15/lib/package/ast-ksh.html 2007-05-16 05:16:01.000000000 +0200
@@ -193,7 +193,19 @@
<P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="ksh93 changes">ksh93 changes</A></H3></FONT></FONT></CENTER>
<PRE>
-07-04-18 --- Release ksh93s+ ---
+07-05-15 --- Release ksh93s+ ---
+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
+ 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
+ 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
been fixed.
07-03-08 A bug in which set +o output command line options has been fixed.
@@ -1654,6 +1666,19 @@
<P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libast changes">libast changes</A></H3></FONT></FONT></CENTER>
<PRE>
+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
+07-04-24 misc/cmdarg.c,include/cmdarg.h: add CMD_CHECKED, CMD_SILENT
+07-04-24 misc/procopen.c,include/proc.h: add PROC_CHECK
+07-04-24 misc/procrun.c: add flags arg (current use PROC_ARGMOD)
+07-04-24 misc/cmdarg.c,include/cmdarg.h: move from src/cmd/tw
+07-04-20 port/(lclang.h|lc.c|mc.c|lclib.h|lcgen.c): separate lctab.c
+07-04-20 comp/conf.sh: defer to systems without 'grep -q' -- sigh
+07-04-20 comp/conf.sh: probe for LL integer constant initializer suffix
+07-04-20 include/syslog.h: <namval.h> => <ast_namval.h> for win32
+07-04-20 ast_namval.h: add as copy of include/namval.h for win32
+07-04-19 comp/conf.tab: fix SVID SI entries to probe SI_* (not _SI_*)
07-04-13 tm/tmxdate.c,tm/tmzone.c: handle [-+]0000 UTC zone offset
07-04-11 sfio/sfvprintf.c: add %F, propagate SFFMT_UPPER
07-04-11 sfio/sfcvt.c: handle SFFMT_UPPER => nan/inf vs. NAN/INF
@@ -1661,6 +1686,7 @@
07-03-28 misc/optget.c: fix l10n --?-
07-03-25 features/common: fix { ast_std.h ast_map.h stdint.h } logic
07-03-21 error.h: move from error_info to (*_error_data_)
+07-03-21 misc/error.c: add errorctx() for error_info switching
07-03-21 option.h: move from opt_info to (*_opt_data_)
07-03-19 regex/regdecomp.c: fix REX_ONECHAR escapes and add REX_KMP
07-03-11 tm/tmxscan.c,regex/regnexec.c: fix strict-alias transgressions
@@ -3080,7 +3106,13 @@
<P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libcmd changes">libcmd changes</A></H3></FONT></FONT></CENTER>
<PRE>
-07-03-28 date.c: add --unelepsed=scale, -U: fmtelapsed() => strelapsed()
+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)
+07-04-25 mkdir.c: force (S_ISVTX|S_ISUID|S_ISGID) after mkdir(2)
+07-04-24 procrun.c: add -last intercept => sh_run() and whence -q
+07-04-19 uname.c: name operands first checked for CS_NAME, then NAME
+07-03-28 date.c: add --unelapsed=scale, -U: fmtelapsed() => strelapsed()
07-03-25 wclib.h: iswspace() requires <wctype.h>!
07-03-11 tty.c: add sysV --line-number, -l
07-02-26 Makefile: sumlib.o: direct extract from +lsum (vcodex someday)
@@ -3364,7 +3396,7 @@
<TR>
<TD align=left></TD>
<TD align=center></TD>
-<TD align=right>April 18, 2007</TD>
+<TD align=right>May 15, 2007</TD>
</TR>
</TABLE>
<P>
diff -r -N -u ksh93_2007_04_18/lib/package/ast-ksh.README ksh93_2007_05_15/lib/package/ast-ksh.README
--- ksh93_2007_04_18/lib/package/ast-ksh.README 2007-04-18 20:07:28.000000000 +0200
+++ ksh93_2007_05_15/lib/package/ast-ksh.README 2007-05-16 05:16:00.000000000 +0200
@@ -92,7 +92,19 @@
:::::::: ksh93 ::::::::
-07-04-18 --- Release ksh93s+ ---
+07-05-15 --- Release ksh93s+ ---
+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
+ 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
+ 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
been fixed.
07-03-08 A bug in which set +o output command line options has been fixed.
@@ -1550,6 +1562,19 @@
:::::::: libast ::::::::
+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
+07-04-24 misc/cmdarg.c,include/cmdarg.h: add CMD_CHECKED, CMD_SILENT
+07-04-24 misc/procopen.c,include/proc.h: add PROC_CHECK
+07-04-24 misc/procrun.c: add flags arg (current use PROC_ARGMOD)
+07-04-24 misc/cmdarg.c,include/cmdarg.h: move from src/cmd/tw
+07-04-20 port/(lclang.h|lc.c|mc.c|lclib.h|lcgen.c): separate lctab.c
+07-04-20 comp/conf.sh: defer to systems without 'grep -q' -- sigh
+07-04-20 comp/conf.sh: probe for LL integer constant initializer suffix
+07-04-20 include/syslog.h: <namval.h> => <ast_namval.h> for win32
+07-04-20 ast_namval.h: add as copy of include/namval.h for win32
+07-04-19 comp/conf.tab: fix SVID SI entries to probe SI_* (not _SI_*)
07-04-13 tm/tmxdate.c,tm/tmzone.c: handle [-+]0000 UTC zone offset
07-04-11 sfio/sfvprintf.c: add %F, propagate SFFMT_UPPER
07-04-11 sfio/sfcvt.c: handle SFFMT_UPPER => nan/inf vs. NAN/INF
@@ -1557,6 +1582,7 @@
07-03-28 misc/optget.c: fix l10n --?-
07-03-25 features/common: fix { ast_std.h ast_map.h stdint.h } logic
07-03-21 error.h: move from error_info to (*_error_data_)
+07-03-21 misc/error.c: add errorctx() for error_info switching
07-03-21 option.h: move from opt_info to (*_opt_data_)
07-03-19 regex/regdecomp.c: fix REX_ONECHAR escapes and add REX_KMP
07-03-11 tm/tmxscan.c,regex/regnexec.c: fix strict-alias transgressions
@@ -2973,7 +2999,13 @@
:::::::: libcmd ::::::::
-07-03-28 date.c: add --unelepsed=scale, -U: fmtelapsed() => strelapsed()
+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)
+07-04-25 mkdir.c: force (S_ISVTX|S_ISUID|S_ISGID) after mkdir(2)
+07-04-24 procrun.c: add -last intercept => sh_run() and whence -q
+07-04-19 uname.c: name operands first checked for CS_NAME, then NAME
+07-03-28 date.c: add --unelapsed=scale, -U: fmtelapsed() => strelapsed()
07-03-25 wclib.h: iswspace() requires <wctype.h>!
07-03-11 tty.c: add sysV --line-number, -l
07-02-26 Makefile: sumlib.o: direct extract from +lsum (vcodex someday)
diff -r -N -u ksh93_2007_04_18/lib/package/ast-ksh.ver ksh93_2007_05_15/lib/package/ast-ksh.ver
--- ksh93_2007_04_18/lib/package/ast-ksh.ver 2007-04-18 20:07:27.000000000 +0200
+++ ksh93_2007_05_15/lib/package/ast-ksh.ver 2007-05-15 07:49:57.000000000 +0200
@@ -1 +1 @@
-ast-ksh 2007-04-18 2007-04-18 1
+ast-ksh 2007-05-15 2007-05-15 1
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/bltins/print.c ksh93_2007_05_15/src/cmd/ksh93/bltins/print.c
--- ksh93_2007_04_18/src/cmd/ksh93/bltins/print.c 2007-04-12 20:21:06.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/bltins/print.c 2007-05-16 04:36:53.000000000 +0200
@@ -751,6 +751,7 @@
break;
case 'B':
value->s = (char*)fmtbase64(value->s, &fe->size);
+ fe->flags |= SFFMT_SHORT;
break;
case 'H':
value->s = fmthtml(value->s);
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/bltins/shopen.c ksh93_2007_05_15/src/cmd/ksh93/bltins/shopen.c
--- ksh93_2007_04_18/src/cmd/ksh93/bltins/shopen.c 2007-03-20 20:08:28.000000000 +0100
+++ ksh93_2007_05_15/src/cmd/ksh93/bltins/shopen.c 2007-05-09 15:53:14.000000000 +0200
@@ -447,11 +447,11 @@
;
-extern int b_open(int argc, char *argv[], void *extra)
+extern int b_open(int argc, char *argv[], void *context)
{
register Namval_t *np;
register int n,oflag=0;
- Shell_t *shp = (Shell_t*)extra;
+ Shell_t *shp = ((Shbltin_t*)context)->shp;
struct filedata *fdp;
struct stat statb;
mode_t mode = 0666;
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/bltins/typeset.c ksh93_2007_05_15/src/cmd/ksh93/bltins/typeset.c
--- ksh93_2007_04_18/src/cmd/ksh93/bltins/typeset.c 2007-04-11 04:36:37.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/bltins/typeset.c 2007-05-02 23:46:02.000000000 +0200
@@ -535,14 +535,15 @@
return(r);
}
-typedef void (*Iptr_t)(int);
+typedef void (*Iptr_t)(int,void*);
typedef int (*Fptr_t)(int, char*[], void*);
#define GROWLIB 4
-static void** liblist;
-static int nlib;
-static int maxlib;
+static void **liblist;
+static unsigned short *libattr;
+static int nlib;
+static int maxlib;
/*
* This allows external routines to load from the same library */
@@ -562,26 +563,38 @@
register int n;
register int r;
Iptr_t initfn;
+ Shbltin_t *sp = &sh.bltindata;
+ sp->nosfio = 0;
for (n = r = 0; n < nlib; n++)
{
if (r)
+ {
liblist[n-1] = liblist[n];
+ libattr[n-1] = libattr[n];
+ }
else if (liblist[n] == library)
r++;
}
if (r)
nlib--;
else if ((initfn = (Iptr_t)dlllook(library, "lib_init")))
- (*initfn)(0);
+ (*initfn)(0,sp);
if (nlib >= maxlib)
{
maxlib += GROWLIB;
if (liblist)
+ {
liblist = (void**)realloc((void*)liblist, (maxlib+1)*sizeof(void**));
+ libattr = (unsigned short*)realloc((void*)liblist, (maxlib+1)*sizeof(unsigned short*));
+ }
else
+ {
liblist = (void**)malloc((maxlib+1)*sizeof(void**));
+ libattr = (unsigned short*)malloc((maxlib+1)*sizeof(unsigned short*));
+ }
}
+ libattr[nlib] = NV_BLTINOPT|(sp->nosfio?BLT_NOSFIO:0);
liblist[nlib++] = library;
liblist[nlib] = 0;
return !r;
@@ -678,6 +691,8 @@
{
if(dlete || nv_isattr(np,BLT_SPC))
errmsg = "restricted name";
+ else
+ nv_onattr(np,libattr[n]);
}
break;
}
@@ -893,7 +908,11 @@
sfprintf(file,"[%s]\n", sh_fmtq(nv_refsub(np)));
}
else
+#if SHOPT_TYPEDEF
+ sfputr(file,nv_isvtree(np)?cp:sh_fmtq(cp),'\n');
+#else
sfputr(file,sh_fmtq(cp),'\n');
+#endif /* SHOPT_TYPEDEF */
}
return(1);
}
@@ -936,6 +955,10 @@
tp->scanmask = flag&~NV_NOSCOPE;
tp->scanroot = root;
tp->outfile = file;
+#if SHOPT_TYPEDEF
+ if(!tp->prefix && tp->tp)
+ tp->prefix = nv_name(tp->tp);
+#endif /* SHOPT_TYPEDEF */
if(flag&NV_INTEGER)
tp->scanmask |= (NV_DOUBLE|NV_EXPNOTE);
namec = nv_scan(root,nullscan,(void*)tp,tp->scanmask,flag);
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/bltins/whence.c ksh93_2007_05_15/src/cmd/ksh93/bltins/whence.c
--- ksh93_2007_04_18/src/cmd/ksh93/bltins/whence.c 2005-12-07 17:14:16.000000000 +0100
+++ ksh93_2007_05_15/src/cmd/ksh93/bltins/whence.c 2007-04-24 22:12:48.000000000 +0200
@@ -40,6 +40,7 @@
#define A_FLAG 4
#define F_FLAG 010
#define X_FLAG 020
+#define Q_FLAG 040
static int whence(Shell_t *,char**, int);
@@ -112,6 +113,9 @@
case 'p':
flags |= P_FLAG;
break;
+ case 'q':
+ flags |= Q_FLAG;
+ break;
case ':':
errormsg(SH_DICT,2, "%s", opt_info.arg);
break;
@@ -140,6 +144,8 @@
Pathcomp_t *pp;
#endif
int notrack = 1;
+ if(flags&Q_FLAG)
+ flags &= ~A_FLAG;
while(name= *argv++)
{
tofree=0;
@@ -151,6 +157,8 @@
#endif
if(flags&P_FLAG)
goto search;
+ if(flags&Q_FLAG)
+ goto bltins;
/* reserved words first */
if(sh_lookup(name,shtab_reserved))
{
@@ -179,6 +187,7 @@
aflag++;
}
/* built-ins and functions next */
+ bltins:
root = (flags&F_FLAG)?shp->bltin_tree:shp->fun_tree;
if(np= nv_bfsearch(name, root, &nq, ¬used))
{
@@ -194,6 +203,8 @@
else
cp = sh_translate(is_function);
}
+ if(flags&Q_FLAG)
+ continue;
sfprintf(sfstdout,"%s%s\n",name,cp);
if(!aflag)
continue;
@@ -227,7 +238,9 @@
cp = shp->lastpath;
shp->lastpath = 0;
#endif
- if(cp)
+ if(flags&Q_FLAG)
+ r |= !cp;
+ else if(cp)
{
if(flags&V_FLAG)
{
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/data/builtins.c ksh93_2007_05_15/src/cmd/ksh93/data/builtins.c
--- ksh93_2007_04_18/src/cmd/ksh93/data/builtins.c 2007-03-27 20:07:41.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/data/builtins.c 2007-05-15 05:07:06.000000000 +0200
@@ -44,7 +44,7 @@
# define SHOPT_CMDLIB_HDR <cmdlist.h>
#endif
#define Q(f) #f /* libpp cpp workaround -- fixed 2005-04-11 */
-#define CMDLIST(f) SH_CMDLIB_DIR "/" Q(f), NV_BLTIN|NV_NOFREE, bltin(f),
+#define CMDLIST(f) SH_CMDLIB_DIR "/" Q(f), NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f),
#undef basename
#undef dirname
@@ -105,7 +105,6 @@
"jobs", NV_BLTIN|BLT_ENV, bltin(jobs),
#endif /* JOBS */
"false", NV_BLTIN|BLT_ENV, bltin(false),
-SH_CMDLIB_DIR "/getconf",NV_BLTIN|BLT_ENV, bltin(getconf),
"getopts", NV_BLTIN|BLT_ENV, bltin(getopts),
"print", NV_BLTIN|BLT_ENV, bltin(print),
"printf", NV_BLTIN|NV_NOFREE, bltin(printf),
@@ -131,6 +130,7 @@
CMDLIST(basename)
CMDLIST(chmod)
CMDLIST(dirname)
+ CMDLIST(getconf)
CMDLIST(head)
CMDLIST(mkdir)
CMDLIST(logname)
@@ -1368,14 +1368,19 @@
"[D\f:dump-strings\f?Do not execute the script, but output the set of double "
"quoted strings preceded by a \b$\b. These strings are needed for "
"localization of the script to different locales.]"
-"[E?Reads the file \b${ENV-$HOME/.kshrc}\b, if it exists, as a profile. "
+"[E?Reads the file "
+#if SHOPT_SYSRC
+ "\b/etc/ksh.kshrc\b, if it exists, as a profile, followed by "
+#endif
+ "\b${ENV-$HOME/.kshrc}\b, if it exists, as a profile. "
"On by default for interactive shells; use \b+E\b to disable.]"
#if SHOPT_PFSH
"[P?Invoke the shell as a profile shell. See \bpfexec\b(1).]"
#endif
#if SHOPT_KIA
"[R]:[file?Do not execute the script, but create a cross reference database "
- "in \afile\a that can be used a separate shell script browser.]"
+ "in \afile\a that can be used a separate shell script browser. The "
+ "-R option requires a script to be specified as the first operand.]"
#endif /* SHOPT_KIA */
#if SHOPT_BASH
"\fbash2\f"
@@ -1784,7 +1789,7 @@
#endif /* SHOPT_FS_3D */
const char sh_optwhence[] =
-"[-1c?\n@(#)$Id: whence (AT&T Research) 1999-07-07 $\n]"
+"[-1c?\n@(#)$Id: whence (AT&T Research) 2007-04-24 $\n]"
USAGE_LICENSE
"[+NAME?whence - locate a command and describe its type]"
"[+DESCRIPTION?Without \b-v\b, \bwhence\b writes on standard output an "
@@ -1798,6 +1803,8 @@
"[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.]"
+"[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 "
"if that name is one of the following:]{"
"[+?Reserved word]"
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/data/options.c ksh93_2007_05_15/src/cmd/ksh93/data/options.c
--- ksh93_2007_04_18/src/cmd/ksh93/data/options.c 2006-09-07 01:00:31.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/data/options.c 2007-05-11 21:06:43.000000000 +0200
@@ -25,7 +25,7 @@
#include "shtable.h"
#if SHOPT_BASH
-# define bashopt(a,b) a, b|SH_BASHOPT,
+# define bashopt(a,b) a, b|SH_BASHOPT,
# define bashextra(a,b) a, b|SH_BASHEXTRA,
#else
# define bashopt(a,b)
@@ -92,8 +92,15 @@
bashextra("physical", SH_PHYSICAL)
bashextra("posix", SH_POSIX)
"privileged", SH_PRIVILEGED,
-#if SHOPT_PFSH
+#if SHOPT_BASH
+ "profile", SH_LOGIN_SHELL|SH_COMMANDLINE,
+# if SHOPT_PFSH
+ "pfsh", SH_PFSH|SH_COMMANDLINE,
+# endif
+#else
+# if SHOPT_PFSH
"profile", SH_PFSH|SH_COMMANDLINE,
+# endif
#endif
bashopt("progcomp", SH_PROGCOMP)
bashopt("promptvars", SH_PROMPTVARS)
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/data/signals.c ksh93_2007_05_15/src/cmd/ksh93/data/signals.c
--- ksh93_2007_04_18/src/cmd/ksh93/data/signals.c 2005-06-01 06:10:35.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/data/signals.c 2007-05-07 14:39:12.000000000 +0200
@@ -55,6 +55,9 @@
#ifdef SIGBUS
"BUS", VAL(SIGBUS,SH_SIGDONE), S("Bus error"),
#endif /* SIGBUS */
+#ifdef SIGCANCEL
+ "CANCEL", VAL(SIGCANCEL,SH_SIGIGNORE), S("Thread cancellation"),
+#endif /*SIGCANCEL */
#ifdef SIGCHLD
"CHLD", VAL(SIGCHLD,SH_SIGFAULT), S("Death of Child"),
# ifdef SIGCLD
@@ -71,6 +74,9 @@
"CONT", VAL(SIGCONT,SH_SIGIGNORE), S("Stopped process continued"),
#endif /* SIGCONT */
"DEBUG", VAL(TRAP(SH_DEBUGTRAP),0), "",
+#ifdef SIGDANGER
+ "DANGER", VAL(SIGDANGER,0), S("System crash soon"),
+#endif /* SIGDANGER */
#ifdef SIGDIL
"DIL", VAL(SIGDIL,0), S("DIL signal"),
#endif /* SIGDIL */
@@ -99,6 +105,12 @@
#ifdef SIGIOT
"IOT", VAL(SIGIOT,SH_SIGDONE), S("Abort"),
#endif /* SIGIOT */
+#ifdef SIGJVM1
+ "JVM1", VAL(SIGJVM1,SH_SIGIGNORE), S("Special signal used by Java Virtual Machine"),
+#endif /*SIGJVM1 */
+#ifdef SIGJVM2
+ "JVM2", VAL(SIGJVM2,SH_SIGIGNORE), S("Special signal used by Java Virtual Machine"),
+#endif /*SIGJVM2 */
"KEYBD", VAL(TRAP(SH_KEYTRAP),0), "",
#ifdef SIGKILL
"KILL", VAL(SIGKILL,0), S("Killed"),
@@ -144,7 +156,7 @@
#define SIGRTMIN _SIGRTMIN
#endif
#endif
-#ifdef SIGRTMIN
+#if defined(SIGRTMIN) && SIGRTMIN > 0
"RTMIN", VAL(SIGRTMIN,0), S("Lowest priority realtime signal"),
#endif /* SIGRTMIN */
#ifdef __SIGRTMAX
@@ -156,7 +168,7 @@
#define SIGRTMAX _SIGRTMAX
#endif
#endif
-#ifdef SIGRTMAX
+#if defined(SIGRTMAX) && SIGRTMAX > 0
"RTMAX", VAL(SIGRTMAX,0), S("Highest priority realtime signal"),
#endif /* SIGRTMAX */
#endif /* SIGQUIT */
@@ -205,9 +217,6 @@
#ifdef SIGMIGRATE
"MIGRATE", VAL(SIGMIGRATE,0), S("Migrate process"),
#endif /* SIGMIGRATE */
-#ifdef SIGDANGER
- "DANGER", VAL(SIGDANGER,0), S("System crash soon"),
-#endif /* SIGDANGER */
#ifdef SIGSOUND
"SOUND", VAL(SIGSOUND,0), S("Sound completed"),
#endif /* SIGSOUND */
@@ -223,5 +232,8 @@
#ifdef SIGXFSZ
"XFSZ", VAL(SIGXFSZ,SH_SIGDONE|SH_SIGINTERACTIVE), S("Exceeded file size limit"),
#endif /* SIGXFSZ */
+#ifdef SIGXRES
+ "XRES", VAL(SIGXRES,SH_SIGDONE|SH_SIGINTERACTIVE), S("Exceeded resource control"),
+#endif /* SIGRES */
"", 0, 0
};
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/edit/edit.c ksh93_2007_05_15/src/cmd/ksh93/edit/edit.c
--- ksh93_2007_04_18/src/cmd/ksh93/edit/edit.c 2007-01-08 17:53:00.000000000 +0100
+++ ksh93_2007_05_15/src/cmd/ksh93/edit/edit.c 2007-04-26 21:38:41.000000000 +0200
@@ -583,6 +583,7 @@
void ed_setup(register Edit_t *ep, int fd, int reedit)
{
+ Shell_t *shp = ep->sh;
register char *pp;
register char *last;
char *ppmax;
@@ -592,25 +593,28 @@
ep->e_fd = fd;
ep->e_multiline = sh_isoption(SH_MULTILINE)!=0;
#ifdef SIGWINCH
- if(!(sh.sigflag[SIGWINCH]&SH_SIGFAULT))
+ if(!(shp->sigflag[SIGWINCH]&SH_SIGFAULT))
{
signal(SIGWINCH,sh_fault);
- sh.sigflag[SIGWINCH] |= SH_SIGFAULT;
+ shp->sigflag[SIGWINCH] |= SH_SIGFAULT;
}
+ pp = shp->st.trapcom[SIGWINCH];
+ shp->st.trapcom[SIGWINCH] = 0;
sh_fault(SIGWINCH);
+ shp->st.trapcom[SIGWINCH] = pp;
#endif
#if KSHELL
ep->e_stkptr = stakptr(0);
ep->e_stkoff = staktell();
- if(!(last = sh.prompt))
+ if(!(last = shp->prompt))
last = "";
- sh.prompt = 0;
+ shp->prompt = 0;
#else
last = ep->e_prbuff;
#endif /* KSHELL */
- if(sh.hist_ptr)
+ if(shp->hist_ptr)
{
- register History_t *hp = sh.hist_ptr;
+ register History_t *hp = shp->hist_ptr;
ep->e_hismax = hist_max(hp);
ep->e_hismin = hist_min(hp);
}
@@ -736,7 +740,7 @@
#ifdef _cmd_tput
char *term;
if(!ep->e_term)
- ep->e_term = nv_search("TERM",sh.var_tree,0);
+ ep->e_term = nv_search("TERM",shp->var_tree,0);
if(ep->e_term && (term=nv_getval(ep->e_term)) && strlen(term)<sizeof(ep->e_termname) && strcmp(term,ep->e_termname))
{
sh_trap(".sh.subscript=$(tput cuu1 2>/dev/null)",0);
@@ -774,8 +778,9 @@
register Edit_t *ep = (Edit_t*)context;
register int rv= -1;
register int delim = (ep->e_raw==RAWMODE?'\r':'\n');
+ Shell_t *shp = ep->sh;
int mode = -1;
- int (*waitevent)(int,long,int) = sh.waitevent;
+ int (*waitevent)(int,long,int) = shp->waitevent;
if(ep->e_raw==ALTMODE)
mode = 1;
if(size < 0)
@@ -785,10 +790,10 @@
}
sh_onstate(SH_TTYWAIT);
errno = EINTR;
- sh.waitevent = 0;
+ shp->waitevent = 0;
while(rv<0 && errno==EINTR)
{
- if(sh.trapnote&(SH_SIGSET|SH_SIGTRAP))
+ if(shp->trapnote&(SH_SIGSET|SH_SIGTRAP))
goto done;
/* an interrupt that should be ignored */
errno = 0;
@@ -824,7 +829,7 @@
rv = read(fd,buff,size);
if(rv>=0 || errno!=EINTR)
break;
- if(sh.trapnote&(SH_SIGSET|SH_SIGTRAP))
+ if(shp->trapnote&(SH_SIGSET|SH_SIGTRAP))
goto done;
/* an interrupt that should be ignored */
fixtime();
@@ -833,7 +838,7 @@
else if(rv>=0 && mode>0)
rv = read(fd,buff,rv>0?rv:1);
done:
- sh.waitevent = waitevent;
+ shp->waitevent = waitevent;
sh_offstate(SH_TTYWAIT);
return(rv);
}
@@ -960,7 +965,7 @@
/* check for possible key mapping */
if((c = ep->e_lbuf[--ep->e_lookahead]) < 0)
{
- if(mode<=0 && sh.st.trap[SH_KEYTRAP])
+ if(mode<=0 && ep->sh->st.trap[SH_KEYTRAP])
{
n=1;
if((readin[0]= -c) == ESC)
@@ -1446,6 +1451,7 @@
{
register char *cp;
int savexit;
+ Shell_t *shp = ep->sh;
#if SHOPT_MULTIBYTE
char buff[MAXLINE];
ed_external(ep->e_inbuf,cp=buff);
@@ -1465,9 +1471,9 @@
nv_putval(ED_COLNOD,(char*)&ep->e_col,NV_NOFREE|NV_INTEGER);
nv_putval(ED_TXTNOD,(char*)cp,NV_NOFREE);
nv_putval(ED_MODENOD,ep->e_vi_insert,NV_NOFREE);
- savexit = sh.savexit;
- sh_trap(sh.st.trap[SH_KEYTRAP],0);
- sh.savexit = savexit;
+ savexit = shp->savexit;
+ sh_trap(shp->st.trap[SH_KEYTRAP],0);
+ shp->savexit = savexit;
if((cp = nv_getval(ED_CHRNOD)) == inbuff)
nv_unset(ED_CHRNOD);
else
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/features/sigfeatures ksh93_2007_05_15/src/cmd/ksh93/features/sigfeatures
--- ksh93_2007_04_18/src/cmd/ksh93/features/sigfeatures 2006-06-13 17:18:31.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/features/sigfeatures 2007-05-10 23:56:58.000000000 +0200
@@ -7,8 +7,8 @@
#endif
#ifdef _lib_sigprocmask
# define sh_sigaction(s,action) do { sigset_t ss;\
- sigemptyset(&ss);\
- sigaddset(&ss,(s));\
+ sigemptyset(&ss); \
+ if(s) sigaddset(&ss,(s)); \
sigprocmask(action,&ss,0); \
}while(0)
# define sigrelease(s) sh_sigaction(s,SIG_UNBLOCK)
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/include/defs.h ksh93_2007_05_15/src/cmd/ksh93/include/defs.h
--- ksh93_2007_04_18/src/cmd/ksh93/include/defs.h 2007-03-27 20:14:45.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/include/defs.h 2007-05-08 23:55:18.000000000 +0200
@@ -34,6 +34,10 @@
#include <history.h>
#include "fault.h"
#include "argnod.h"
+#include "name.h"
+#define _SH_PRIVATE
+#include <shcmd.h>
+#undef _SH_PRIVATE
#ifndef pointerof
#define pointerof(x) ((void*)((char*)0+(x)))
@@ -52,6 +56,8 @@
* note that the first few fields have to be the same as for
* Shscoped_t in <shell.h>
*/
+
+
struct sh_scoped
{
struct sh_scoped *prevst; /* pointer to previous state */
@@ -179,6 +185,7 @@
struct checkpt checkbase; \
Shinit_f userinit; \
Shbltin_f bltinfun; \
+ Shbltin_t bltindata; \
Shwait_f waitevent; \
char *cur_line; \
char *rcfile; \
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/include/name.h ksh93_2007_05_15/src/cmd/ksh93/include/name.h
--- ksh93_2007_04_18/src/cmd/ksh93/include/name.h 2007-03-05 14:52:11.000000000 +0100
+++ ksh93_2007_05_15/src/cmd/ksh93/include/name.h 2007-05-01 22:51:54.000000000 +0200
@@ -119,6 +119,7 @@
#define BLT_SPC (NV_LJUST) /* special built-ins */
#define BLT_EXIT (NV_RJUST) /* exit value can be > 255 */
#define BLT_DCL (NV_TAGGED) /* declaration command */
+#define BLT_NOSFIO (NV_IMPORT) /* doesn't use sfio */
#define nv_isref(n) (nv_isattr((n),NV_REF)==NV_REF)
#define nv_istable(n) (nv_isattr((n),NV_TABLE|NV_LJUST|NV_RJUST)==NV_TABLE)
#define is_abuiltin(n) (nv_isattr(n,NV_BLTIN)==NV_BLTIN)
@@ -138,9 +139,6 @@
#define nv_reftree(n) ((n)->nvalue.nrp->root)
#define nv_reftable(n) ((n)->nvalue.nrp->table)
#define nv_refsub(n) ((n)->nvalue.nrp->sub)
-#if SHOPT_OO
-# define nv_class(np) (nv_isattr(np,NV_REF|NV_IMPORT)?0:(Namval_t*)((np)->nvenv))
-#endif /* SHOPT_OO */
/* ... etc */
@@ -181,6 +179,7 @@
extern Namval_t *nv_mount(Namval_t*, const char *name, Dt_t*);
extern Namval_t *nv_arraychild(Namval_t*, Namval_t*, int);
extern int nv_compare(Dt_t*, Void_t*, Void_t*, Dtdisc_t*);
+extern int nv_isvtree(Namval_t*);
extern const Namdisc_t RESTRICTED_disc;
extern char nv_local;
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/include/shell.h ksh93_2007_05_15/src/cmd/ksh93/include/shell.h
--- ksh93_2007_04_18/src/cmd/ksh93/include/shell.h 2006-10-26 19:48:36.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/include/shell.h 2007-05-11 21:27:13.000000000 +0200
@@ -27,7 +27,7 @@
*
*/
-#include <cmd.h>
+#include <ast.h>
#include <cdt.h>
#ifdef _SH_PRIVATE
# include "name.h"
@@ -35,7 +35,7 @@
# include <nval.h>
#endif /* _SH_PRIVATE */
-#define SH_VERSION 20060510
+#define SH_VERSION 20070511
#undef NOT_USED
#define NOT_USED(x) (&x,1)
@@ -48,7 +48,6 @@
Shopt_t;
typedef void (*Shinit_f)(int);
-typedef int (*Shbltin_f)(int, char*[], void*);
typedef int (*Shwait_f)(int, long, int);
union Shnode_u;
@@ -149,6 +148,8 @@
#define SH_IOCOPROCESS (-2)
#define SH_IOHISTFILE (-3)
+#include <cmd.h>
+
/* symbolic value for sh_fdnotify */
#define SH_FDCLOSE (-1)
@@ -170,6 +171,7 @@
extern int sh_funscope(int,char*[],int(*)(void*),void*,int);
extern Sfio_t *sh_iogetiop(int,int);
extern int sh_main(int, char*[], void(*)(int));
+extern int sh_run(int, char*[]);
extern void sh_menu(Sfio_t*, int, char*[]);
extern Namval_t *sh_addbuiltin(const char*, int(*)(int, char*[],void*), void*);
extern char *sh_fmtq(const char*);
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/include/shtable.h ksh93_2007_05_15/src/cmd/ksh93/include/shtable.h
--- ksh93_2007_04_18/src/cmd/ksh93/include/shtable.h 2005-06-01 06:06:36.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/include/shtable.h 2007-05-07 14:31:08.000000000 +0200
@@ -33,20 +33,20 @@
typedef struct shtable1
{
const char *sh_name;
- unsigned sh_number;
+ const unsigned sh_number;
} Shtable_t;
struct shtable2
{
const char *sh_name;
- unsigned sh_number;
+ const unsigned sh_number;
const char *sh_value;
};
struct shtable3
{
const char *sh_name;
- unsigned sh_number;
+ const unsigned sh_number;
int (*sh_value)(int, char*[], void*);
};
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/Makefile ksh93_2007_05_15/src/cmd/ksh93/Makefile
--- ksh93_2007_04_18/src/cmd/ksh93/Makefile 2007-03-25 05:47:28.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/Makefile 2007-05-15 19:05:05.000000000 +0200
@@ -185,7 +185,7 @@
echo ";" >> $(<)
end
-:: math.tab syscall.s mamexec mamstate.c deparse.c $(DOCFILES) \
+:: math.tab syscall.s mamexec mamstate.c $(DOCFILES) \
bash.c bash_pre_rc.sh hexpand.c mkservice.c \
shopen.mk shopen.c
@@ -193,8 +193,8 @@
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 \
- nameref.sh options.sh path.sh quoting.sh quoting2.sh return.sh \
- select.sh substring.sh tilde.sh variables.sh
+ nameref.sh options.sh path.sh quoting.sh quoting2.sh restricted.sh \
+ return.sh select.sh substring.sh tilde.sh variables.sh
if "$(PWD:B:N=cc-*)"
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/Mamfile ksh93_2007_05_15/src/cmd/ksh93/Mamfile
--- ksh93_2007_04_18/src/cmd/ksh93/Mamfile 2007-04-18 20:07:29.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/Mamfile 2007-05-16 05:16:02.000000000 +0200
@@ -41,8 +41,23 @@
make pmain.o
make sh/pmain.c
make include/shell.h implicit
-make include/nval.h implicit
-make ${PACKAGE_ast_INCLUDE}/cdt.h implicit
+make ${PACKAGE_ast_INCLUDE}/cmd.h implicit
+make ${PACKAGE_ast_INCLUDE}/dlldefs.h implicit
+done ${PACKAGE_ast_INCLUDE}/dlldefs.h dontcare
+make ${PACKAGE_ast_INCLUDE}/cmdext.h implicit
+make ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
+make ${INSTALLROOT}/include/prototyped.h implicit
+done ${INSTALLROOT}/include/prototyped.h dontcare
+done ${PACKAGE_ast_INCLUDE}/prototyped.h dontcare
+done ${PACKAGE_ast_INCLUDE}/cmdext.h dontcare
+make ${PACKAGE_ast_INCLUDE}/shcmd.h implicit
+prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
+done ${PACKAGE_ast_INCLUDE}/shcmd.h dontcare
+make ${PACKAGE_ast_INCLUDE}/stak.h implicit
+make ${PACKAGE_ast_INCLUDE}/stk.h implicit
+make ${PACKAGE_ast_INCLUDE}/sfio.h implicit
+make ${PACKAGE_ast_INCLUDE}/sfio_s.h implicit
+done ${PACKAGE_ast_INCLUDE}/sfio_s.h dontcare
make ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
make ${PACKAGE_ast_INCLUDE}/ast_map.h implicit
done ${PACKAGE_ast_INCLUDE}/ast_map.h dontcare
@@ -55,10 +70,7 @@
make ${PACKAGE_ast_INCLUDE}/ast_std.h implicit
make ${PACKAGE_ast_INCLUDE}/regex.h implicit
prev ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
-make ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
-make ${INSTALLROOT}/include/prototyped.h implicit
-done ${INSTALLROOT}/include/prototyped.h dontcare
-done ${PACKAGE_ast_INCLUDE}/prototyped.h dontcare
+prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
done ${PACKAGE_ast_INCLUDE}/regex.h dontcare
prev ${PACKAGE_ast_INCLUDE}/ast_map.h implicit
make ${PACKAGE_ast_INCLUDE}/ast_botch.h implicit
@@ -85,24 +97,39 @@
prev ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
done ${PACKAGE_ast_INCLUDE}/ast_std.h dontcare
-done ${PACKAGE_ast_INCLUDE}/cdt.h dontcare
+done ${PACKAGE_ast_INCLUDE}/sfio.h dontcare
+prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
+done ${PACKAGE_ast_INCLUDE}/stk.h dontcare
+prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
+done ${PACKAGE_ast_INCLUDE}/stak.h dontcare
+make ${PACKAGE_ast_INCLUDE}/error.h implicit
+make ${PACKAGE_ast_INCLUDE}/option.h implicit
make ${PACKAGE_ast_INCLUDE}/ast.h implicit
make ${PACKAGE_ast_INCLUDE}/vmalloc.h implicit
prev ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
prev ${PACKAGE_ast_INCLUDE}/ast_std.h implicit
done ${PACKAGE_ast_INCLUDE}/vmalloc.h dontcare
-make ${PACKAGE_ast_INCLUDE}/sfio.h implicit
-make ${PACKAGE_ast_INCLUDE}/sfio_s.h implicit
-done ${PACKAGE_ast_INCLUDE}/sfio_s.h dontcare
-prev ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
-prev ${PACKAGE_ast_INCLUDE}/ast_std.h implicit
-done ${PACKAGE_ast_INCLUDE}/sfio.h dontcare
+prev ${PACKAGE_ast_INCLUDE}/sfio.h implicit
prev ${PACKAGE_ast_INCLUDE}/ast_std.h implicit
make ${PACKAGE_ast_INCLUDE}/ast_version.h implicit
prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
done ${PACKAGE_ast_INCLUDE}/ast_version.h dontcare
prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
done ${PACKAGE_ast_INCLUDE}/ast.h dontcare
+prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
+done ${PACKAGE_ast_INCLUDE}/option.h dontcare
+prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
+prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
+done ${PACKAGE_ast_INCLUDE}/error.h dontcare
+prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
+prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
+done ${PACKAGE_ast_INCLUDE}/cmd.h dontcare
+make include/nval.h implicit
+make ${PACKAGE_ast_INCLUDE}/cdt.h implicit
+prev ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
+prev ${PACKAGE_ast_INCLUDE}/ast_std.h implicit
+done ${PACKAGE_ast_INCLUDE}/cdt.h dontcare
+prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
done include/nval.h dontcare
make include/name.h implicit
prev include/nval.h implicit
@@ -112,30 +139,7 @@
prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
done include/name.h dontcare
prev ${PACKAGE_ast_INCLUDE}/cdt.h implicit
-make ${PACKAGE_ast_INCLUDE}/cmd.h implicit
-make ${PACKAGE_ast_INCLUDE}/dlldefs.h implicit
-done ${PACKAGE_ast_INCLUDE}/dlldefs.h dontcare
-make ${PACKAGE_ast_INCLUDE}/cmdext.h implicit
-prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
-done ${PACKAGE_ast_INCLUDE}/cmdext.h dontcare
-make ${PACKAGE_ast_INCLUDE}/stak.h implicit
-make ${PACKAGE_ast_INCLUDE}/stk.h implicit
-prev ${PACKAGE_ast_INCLUDE}/sfio.h implicit
-prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
-done ${PACKAGE_ast_INCLUDE}/stk.h dontcare
-prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
-done ${PACKAGE_ast_INCLUDE}/stak.h dontcare
-make ${PACKAGE_ast_INCLUDE}/error.h implicit
-make ${PACKAGE_ast_INCLUDE}/option.h implicit
prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
-prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
-done ${PACKAGE_ast_INCLUDE}/option.h dontcare
-prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
-prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
-done ${PACKAGE_ast_INCLUDE}/error.h dontcare
-prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
-prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
-done ${PACKAGE_ast_INCLUDE}/cmd.h dontcare
done include/shell.h
done sh/pmain.c
meta pmain.o %.c>%.o sh/pmain.c pmain
@@ -236,6 +240,8 @@
prev include/shell.h implicit
make include/env.h implicit
done include/env.h dontcare
+prev ${PACKAGE_ast_INCLUDE}/shcmd.h implicit
+prev include/name.h implicit
make include/argnod.h implicit
prev ${PACKAGE_ast_INCLUDE}/stak.h implicit
done include/argnod.h
@@ -1118,10 +1124,6 @@
done waitevent.o generated
make xec.o
make sh/xec.c
-make ${PACKAGE_ast_INCLUDE}/proc.h implicit
-prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
-prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
-done ${PACKAGE_ast_INCLUDE}/proc.h
prev ${PACKAGE_ast_INCLUDE}/vmalloc.h implicit
prev include/streval.h implicit
prev FEATURE/locale implicit
@@ -1140,7 +1142,7 @@
done sh/xec.c
meta xec.o %.c>%.o sh/xec.c xec
prev sh/xec.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -D_PACKAGE_ast -DSHOPT_FILESCAN -DSHOPT_NAMESPACE -DSHOPT_OPTIMIZE -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DKSHELL -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c sh/xec.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DSHOPT_FILESCAN -DSHOPT_NAMESPACE -DSHOPT_OPTIMIZE -D_PACKAGE_ast -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DKSHELL -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c sh/xec.c
done xec.o generated
make env.o
make sh/env.c
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/RELEASE ksh93_2007_05_15/src/cmd/ksh93/RELEASE
--- ksh93_2007_04_18/src/cmd/ksh93/RELEASE 2007-04-18 16:21:50.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/RELEASE 2007-05-16 04:40:29.000000000 +0200
@@ -1,4 +1,16 @@
-07-04-18 --- Release ksh93s+ ---
+07-05-15 --- Release ksh93s+ ---
+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
+ 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
+ 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
been fixed.
07-03-08 A bug in which set +o output command line options has been fixed.
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/sh/args.c ksh93_2007_05_15/src/cmd/ksh93/sh/args.c
--- ksh93_2007_04_18/src/cmd/ksh93/sh/args.c 2007-03-27 20:52:51.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/sh/args.c 2007-05-12 08:13:20.000000000 +0200
@@ -43,7 +43,7 @@
# define PFSHOPT
#endif
#if SHOPT_BASH
-# define BASHOPT "\375\374\373"
+# define BASHOPT "\374"
#else
# define BASHOPT
#endif
@@ -70,7 +70,7 @@
SH_PFSH,
#endif
#if SHOPT_BASH
- SH_NOPROFILE, SH_RC, SH_POSIX,
+ SH_POSIX,
#endif
SH_DICTIONARY, SH_INTERACTIVE, SH_RESTRICTED, SH_CFLAG,
SH_ALLEXPORT, SH_NOTIFY, SH_ERREXIT, SH_NOGLOB, SH_TRACKALL,
@@ -159,7 +159,7 @@
while((n = optget(argv,setflag?sh_optset:sh_optksh)))
{
o=0;
- f=*opt_info.option=='-';
+ f=*opt_info.option=='-' && (opt_info.num || opt_info.arg);
switch(n)
{
case 'A':
@@ -204,28 +204,28 @@
case -1: /* --rcfile */
sh.rcfile = opt_info.arg;
continue;
- case -6: /* --version */
- sfputr(sfstdout, "ksh bash emulation, version ",-1);
- np = nv_open("BASH_VERSION",sh.var_tree,0);
- sfputr(sfstdout, nv_getval(np),-1);
- np = nv_open("MACHTYPE",sh.var_tree,0);
- sfprintf(sfstdout, " (%s)\n", nv_getval(np));
- sh_exit(0);
-
case -2: /* --noediting */
- off_option(&newflags,SH_VI);
- off_option(&newflags,SH_EMACS);
- off_option(&newflags,SH_GMACS);
+ if (!f)
+ {
+ off_option(&newflags,SH_VI);
+ off_option(&newflags,SH_EMACS);
+ off_option(&newflags,SH_GMACS);
+ }
continue;
-
case -3: /* --profile */
- f = !f;
- /*FALLTHROUGH*/
- case -4: /* --rc */
- case -5: /* --posix */
+ n = 'l';
+ goto skip;
+ case -4: /* --posix */
/* mask lower 8 bits to find char in optksh string */
n&=0xff;
goto skip;
+ case -5: /* --version */
+ sfputr(sfstdout, "ksh bash emulation, version ",-1);
+ np = nv_open("BASH_VERSION",sh.var_tree,0);
+ sfputr(sfstdout, nv_getval(np),-1);
+ np = nv_open("MACHTYPE",sh.var_tree,0);
+ sfprintf(sfstdout, " (%s)\n", nv_getval(np));
+ sh_exit(0);
#endif
case 'D':
on_option(&newflags,SH_NOEXEC);
@@ -336,6 +336,8 @@
#if SHOPT_KIA
if(ap->kiafile)
{
+ if(!argv[0])
+ errormsg(SH_DICT,ERROR_usage(2),"-R requires scriptname");
if(!(shlex.kiafile=sfopen(NIL(Sfio_t*),ap->kiafile,"w+")))
errormsg(SH_DICT,ERROR_system(3),e_create,ap->kiafile);
if(!(shlex.kiatmp=sftmp(2*SF_BUFSIZE)))
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/sh/arith.c ksh93_2007_05_15/src/cmd/ksh93/sh/arith.c
--- ksh93_2007_04_18/src/cmd/ksh93/sh/arith.c 2007-04-12 20:13:29.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/sh/arith.c 2007-05-10 05:51:11.000000000 +0200
@@ -97,6 +97,7 @@
{
register Sfdouble_t r= 0;
char *str = (char*)*ptr;
+ register char *cp;
switch(type)
{
case ASSIGN:
@@ -119,7 +120,6 @@
{
register Namval_t *np;
int dot=0;
- char *cp;
while(1)
{
while(xp=str, c=mbchar(str), isaname(c));
@@ -190,13 +190,14 @@
}
}
*str = 0;
- if(strcasecmp(*ptr,"Inf")==0)
+ cp = (char*)*ptr;
+ if ((cp[0] == 'i' || cp[0] == 'I') && (cp[1] == 'n' || cp[1] == 'N') && (cp[2] == 'f' || cp[2] == 'F') && cp[3] == 0)
{
Inf = 1.0/Zero;
Infnod.nvalue.ldp = &Inf;
np = &Infnod;
}
- else if(strcasecmp(*ptr,"NaN")==0)
+ else if ((cp[0] == 'n' || cp[0] == 'N') && (cp[1] == 'a' || cp[1] == 'A') && (cp[2] == 'n' || cp[2] == 'N') && cp[3] == 0)
{
NaN = 0.0/Zero;
NaNnod.nvalue.ldp = &NaN;
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/sh/bash.c ksh93_2007_05_15/src/cmd/ksh93/sh/bash.c
--- ksh93_2007_04_18/src/cmd/ksh93/sh/bash.c 2006-10-13 05:59:11.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/sh/bash.c 2007-05-12 07:39:25.000000000 +0200
@@ -50,8 +50,6 @@
"[P?Do not follow symbolic links, use physical directory structure "
"instead. Only available in bash compatibility mode.]";
const char sh_bash2[] =
-"[l:login?Make the shell act as if it had been invoked as a login shell. "
-"Only available if invoked as \bbash\b.]"
"[O]:?[shopt_option?\ashopt_option\a is one of the shell options accepted by "
"the \bshopt\b builtin. If \ashopt_option\a is present, \b-O\b sets "
"the value of that option; \b+O\b unsets it. If \ashopt_option\a is "
@@ -66,12 +64,9 @@
"[03:profile?Read either the system-wide startup file or any of the "
"personal initialization files. On by default for interactive "
"shells. Only available if invoked as \bbash\b.]"
-"[04:rc?Read and execute the personal initialization file "
- "\b$HOME/.bashrc\b. On by default for interactive shells. Only "
- "available if invoked as \bbash\b.]"
-"[05:posix?If invoked as \bbash\b, turn on POSIX compatibility. \bBash\b in "
+"[04:posix?If invoked as \bbash\b, turn on POSIX compatibility. \bBash\b in "
"POSIX mode is not the same as \bksh\b.]"
-"[06:version?Print version number and exit.]";
+"[05:version?Print version number and exit.]";
const char sh_optshopt[] =
"+[-1c?\n@(#)$Id: shopt (AT&T Research) 2003-02-13 $\n]"
@@ -404,7 +399,7 @@
/* set startup files */
n=0;
- if(!sh_isoption(SH_NOPROFILE))
+ if(sh_isoption(SH_LOGIN_SHELL))
{
if(!sh_isoption(SH_POSIX))
{
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/sh/fault.c ksh93_2007_05_15/src/cmd/ksh93/sh/fault.c
--- ksh93_2007_04_18/src/cmd/ksh93/sh/fault.c 2007-02-14 08:59:55.000000000 +0100
+++ ksh93_2007_05_15/src/cmd/ksh93/sh/fault.c 2007-05-02 16:22:55.000000000 +0200
@@ -59,9 +59,10 @@
*/
void sh_fault(register int sig)
{
- register int flag=0;
- register char *trap;
- register struct checkpt *pp = (struct checkpt*)sh.jmplist;
+ register Shell_t *shp = sh_getinterp();
+ register int flag=0;
+ register char *trap;
+ register struct checkpt *pp = (struct checkpt*)shp->jmplist;
int action=0;
/* reset handler */
if(!(sig&SH_TRAP))
@@ -79,17 +80,17 @@
nv_putval(LINES, (char*)&v, NV_INT32);
}
#endif /* SIGWINCH */
- if(sh.savesig)
+ if(shp->savesig)
{
/* critical region, save and process later */
- sh.savesig = sig;
+ shp->savesig = sig;
return;
}
/* handle ignored signals */
- if((trap=sh.st.trapcom[sig]) && *trap==0)
+ if((trap=shp->st.trapcom[sig]) && *trap==0)
return;
- flag = sh.sigflag[sig]&~SH_SIGOFF;
+ flag = shp->sigflag[sig]&~SH_SIGOFF;
if(!trap)
{
if(flag&SH_SIGIGNORE)
@@ -97,14 +98,14 @@
if(flag&SH_SIGDONE)
{
void *ptr=0;
- if((flag&SH_SIGINTERACTIVE) && sh_isstate(SH_INTERACTIVE) && !sh_isstate(SH_FORKED) && ! sh.subshell)
+ if((flag&SH_SIGINTERACTIVE) && sh_isstate(SH_INTERACTIVE) && !sh_isstate(SH_FORKED) && ! shp->subshell)
{
/* check for TERM signal between fork/exec */
if(sig==SIGTERM && job.in_critical)
- sh.trapnote |= SH_SIGTERM;
+ shp->trapnote |= SH_SIGTERM;
return;
}
- sh.lastsig = sig;
+ shp->lastsig = sig;
sigrelease(sig);
if(pp->mode < SH_JMPFUN)
pp->mode = SH_JMPFUN;
@@ -114,14 +115,14 @@
{
if(ptr)
free(ptr);
- if(!sh.subshell)
+ if(!shp->subshell)
sh_done(sig);
sh_exit(SH_EXITSIG);
}
/* mark signal and continue */
- sh.trapnote |= SH_SIGSET;
- if(sig < sh.sigmax)
- sh.sigflag[sig] |= SH_SIGSET;
+ shp->trapnote |= SH_SIGSET;
+ if(sig < shp->sigmax)
+ shp->sigflag[sig] |= SH_SIGSET;
#if defined(VMFL) && (VMALLOC_VERSION>=20031205L)
if(abortsig(sig))
{
@@ -137,7 +138,7 @@
}
errno = 0;
if(pp->mode==SH_JMPCMD)
- sh.lastsig = sig;
+ shp->lastsig = sig;
if(trap)
{
/*
@@ -149,12 +150,12 @@
}
else
{
- sh.lastsig = sig;
+ shp->lastsig = sig;
flag = SH_SIGSET;
#ifdef SIGTSTP
if(sig==SIGTSTP)
{
- sh.trapnote |= SH_SIGTSTP;
+ shp->trapnote |= SH_SIGTSTP;
if(pp->mode==SH_JMPCMD && sh_isstate(SH_STOPOK))
{
sigrelease(sig);
@@ -165,14 +166,20 @@
#endif /* SIGTSTP */
}
#ifdef ERROR_NOTIFY
- if((error_info.flags&ERROR_NOTIFY) && sh.bltinfun)
- action = (*sh.bltinfun)(-sig,(char**)0,(void*)0);
-#endif
+ /* This is obsolete */
+ if((error_info.flags&ERROR_NOTIFY) && shp->bltinfun)
+ action = (*shp->bltinfun)(-sig,(char**)0,(void*)0);
if(action>0)
return;
- sh.trapnote |= flag;
- if(sig < sh.sigmax)
- sh.sigflag[sig] |= flag;
+#endif
+ if(shp->bltinfun && shp->bltindata.notify)
+ {
+ shp->bltindata.sigset = 1;
+ return;
+ }
+ shp->trapnote |= flag;
+ if(sig < shp->sigmax)
+ shp->sigflag[sig] |= flag;
if(pp->mode==SH_JMPCMD && sh_isstate(SH_STOPOK))
{
if(action<0)
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/sh/init.c ksh93_2007_05_15/src/cmd/ksh93/sh/init.c
--- ksh93_2007_04_18/src/cmd/ksh93/sh/init.c 2007-04-11 18:10:20.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/sh/init.c 2007-05-04 20:02:00.000000000 +0200
@@ -1089,6 +1089,12 @@
sh.login_files = login_files;
if(sh.userinit=userinit)
(*userinit)(0);
+ sh.bltindata.version = SH_VERSION;
+ sh.bltindata.shp = &sh;
+ sh.bltindata.shrun = sh_run;
+ sh.bltindata.shtrap = sh_trap;
+ sh.bltindata.shexit = sh_exit;
+ sh.bltindata.shbltin = sh_addbuiltin;
return(&sh);
}
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/sh/jobs.c ksh93_2007_05_15/src/cmd/ksh93/sh/jobs.c
--- ksh93_2007_04_18/src/cmd/ksh93/sh/jobs.c 2007-04-10 23:15:58.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/sh/jobs.c 2007-04-26 14:41:21.000000000 +0200
@@ -366,7 +366,7 @@
*/
void job_init(int lflag)
{
- register int i,ntry=0;
+ register int ntry=0;
job.fd = JOBTTY;
signal(SIGCHLD,job_waitsafe);
# if defined(SIGCLD) && (SIGCLD!=SIGCHLD)
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/sh/macro.c ksh93_2007_05_15/src/cmd/ksh93/sh/macro.c
--- ksh93_2007_04_18/src/cmd/ksh93/sh/macro.c 2007-02-20 17:21:07.000000000 +0100
+++ ksh93_2007_05_15/src/cmd/ksh93/sh/macro.c 2007-05-14 17:08:10.000000000 +0200
@@ -2281,21 +2281,27 @@
/*
* Given pattern/string, replace / with 0 and return pointer to string
- * \ characters are stripped from string.
+ * \ characters are stripped from string. The \ are stripped in the
+ * replacement string unless followed by a digit or \.
*/
static char *mac_getstring(char *pattern)
{
- register char *cp = pattern;
- register int c;
+ register char *cp=pattern, *rep=0, *dp;
+ register int c;
while(c = *cp++)
{
- if(c==ESCAPE)
- cp++;
- else if(c=='/')
+ if(c==ESCAPE && (!rep || (*cp && !isadigit(*cp) && *cp!=ESCAPE)))
+ c = *cp++;
+ else if(!rep && c=='/')
{
cp[-1] = 0;
- return(cp);
+ rep = dp = cp;
+ continue;
}
+ if(rep)
+ *dp++ = c;
}
- return(NIL(char*));
+ if(rep)
+ *dp = 0;
+ return(rep);
}
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/sh/main.c ksh93_2007_05_15/src/cmd/ksh93/sh/main.c
--- ksh93_2007_04_18/src/cmd/ksh93/sh/main.c 2007-04-11 18:03:39.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/sh/main.c 2007-05-12 08:15:11.000000000 +0200
@@ -140,7 +140,7 @@
int i, rshflag; /* set for restricted shell */
char *command;
#ifdef _lib_sigvec
- /* This is to clear mask that my be left on by rlogin */
+ /* This is to clear mask that may be left on by rlogin */
clearsigmask(SIGALRM);
clearsigmask(SIGHUP);
clearsigmask(SIGCHLD);
@@ -210,7 +210,7 @@
sh_onoption(SH_MONITOR);
}
job_init(sh_isoption(SH_LOGIN_SHELL));
- if(sh_isoption(SH_LOGIN_SHELL) && !sh_isoption(SH_NOPROFILE))
+ if(sh_isoption(SH_LOGIN_SHELL))
{
/* system profile */
sh_source(shp, iop, e_sysprofile);
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/sh/nvdisc.c ksh93_2007_05_15/src/cmd/ksh93/sh/nvdisc.c
--- ksh93_2007_04_18/src/cmd/ksh93/sh/nvdisc.c 2007-02-14 09:07:50.000000000 +0100
+++ ksh93_2007_05_15/src/cmd/ksh93/sh/nvdisc.c 2007-05-15 05:08:51.000000000 +0200
@@ -993,7 +993,7 @@
register const char *name = path_basename(path);
char *cp;
register Namval_t *np, *nq=0;
- int offset = staktell();
+ int attr=0, offset = staktell();
if(name==path && (nq=nv_bfsearch(name,sh.bltin_tree,(Namval_t**)0,&cp)))
path = name = stakptr(offset);
if(np = nv_search(path,sh.bltin_tree,0))
@@ -1019,7 +1019,10 @@
if(nv_isattr(np,BLT_SPC))
return(np);
if(!bltin)
+ {
bltin = np->nvalue.bfp;
+ attr = nv_isattr(np,NV_BLTINOPT);
+ }
if(np->nvenv)
dtdelete(sh.bltin_tree,np);
if(extra == (void*)1)
@@ -1034,7 +1037,7 @@
return(np);
np->nvenv = 0;
np->nvfun = 0;
- nv_setattr(np,0);
+ nv_setattr(np,attr);
if(bltin)
{
np->nvalue.bfp = bltin;
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/sh/nvtree.c ksh93_2007_05_15/src/cmd/ksh93/sh/nvtree.c
--- ksh93_2007_04_18/src/cmd/ksh93/sh/nvtree.c 2007-02-19 21:48:09.000000000 +0100
+++ ksh93_2007_05_15/src/cmd/ksh93/sh/nvtree.c 2007-05-14 22:35:54.000000000 +0200
@@ -559,7 +559,7 @@
outval(".",prefix-n,wp);
if(c=='.')
cp[m-1] = c;
- sfnputc(outfile,'\t',wp->indent-1);
+ sfnputc(outfile,'\t',--wp->indent);
sfputc(outfile,')');
}
return(--argv);
@@ -590,7 +590,9 @@
stakputc('.');
}
name = stakfreeze(1);
+ sh.last_root = 0;
dir = nv_diropen(name);
+ walk.root = sh.last_root;
if(subscript)
name[strlen(name)-1] = 0;
while(cp = nv_dirnext(dir))
@@ -616,7 +618,6 @@
else
sfseek(outfile,0L,SEEK_SET);
walk.out = outfile;
- walk.root = sh.last_root;
walk.indent = 0;
walk.noscope = noscope;
genvalue(argv,name,0,&walk);
@@ -627,6 +628,11 @@
return((char*)out->_data);
}
+int nv_isvtree(Namval_t *np)
+{
+ return(np && nv_hasdisc(np,&treedisc));
+}
+
/*
* get discipline for compound initializations
*/
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/sh/path.c ksh93_2007_05_15/src/cmd/ksh93/sh/path.c
--- ksh93_2007_04_18/src/cmd/ksh93/sh/path.c 2007-03-06 18:25:51.000000000 +0100
+++ ksh93_2007_05_15/src/cmd/ksh93/sh/path.c 2007-05-09 05:49:44.000000000 +0200
@@ -685,6 +685,7 @@
if(strcmp(cp,LIBCMD)==0 && (addr=(Fptr_t)dlllook((void*)0,stakptr(n))))
{
np = sh_addbuiltin(stakptr(PATH_OFFSET),addr,NiL);
+ nv_onattr(np,NV_BLTINOPT);
np->nvfun = (Namfun_t*)np->nvname;
return(oldpp);
}
@@ -699,6 +700,7 @@
(!(np = sh_addbuiltin(stakptr(PATH_OFFSET),NiL,NiL)) || np->nvalue.bfp!=addr) &&
(np = sh_addbuiltin(stakptr(PATH_OFFSET),addr,NiL)))
{
+ nv_onattr(np,NV_BLTINOPT);
np->nvenv = oldpp->bltin_lib;
return(oldpp);
}
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/sh/subshell.c ksh93_2007_05_15/src/cmd/ksh93/sh/subshell.c
--- ksh93_2007_04_18/src/cmd/ksh93/sh/subshell.c 2007-02-26 22:27:37.000000000 +0100
+++ ksh93_2007_05_15/src/cmd/ksh93/sh/subshell.c 2007-04-30 17:29:04.000000000 +0200
@@ -209,6 +209,7 @@
subshell_data->svar = lp;
save = sh.subshell;
sh.subshell = 0;;
+ mp->nvname = np->nvname;
nv_clone(np,mp,NV_NOFREE);
sh.subshell = save;
return(np);
@@ -236,7 +237,7 @@
mp->nvenv = np->nvenv;
mp->nvfun = np->nvfun;
mp->nvflag = np->nvflag;
- if((mp==nv_scoped(PATHNOD)) || (mp==nv_scoped(IFSNOD)))
+ if(nv_cover(mp))
nv_putval(mp, np->nvalue.cp,0);
else
mp->nvalue.cp = np->nvalue.cp;
@@ -329,6 +330,7 @@
register struct subshell *sp = &sub_data;
int jmpval,nsig;
int savecurenv = shp->curenv;
+ int savejobpgid = job.curpgid;
int16_t subshell;
char *savsig;
Sfio_t *iop=0;
@@ -344,6 +346,7 @@
subenv = 0;
}
shp->curenv = ++subenv;
+ job.curpgid = 0;
savst = shp->st;
sh_pushcontext(&buff,SH_JMPSUB);
subshell = shp->subshell+1;
@@ -489,6 +492,7 @@
#endif
job_subrestore(sp->jobs);
shp->jobenv = savecurenv;
+ job.curpgid = savejobpgid;
shp->bckpid = sp->bckpid;
if(sp->shpwd) /* restore environment if saved */
{
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/sh/xec.c ksh93_2007_05_15/src/cmd/ksh93/sh/xec.c
--- ksh93_2007_04_18/src/cmd/ksh93/sh/xec.c 2007-04-18 15:17:02.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/sh/xec.c 2007-05-02 23:52:12.000000000 +0200
@@ -172,13 +172,13 @@
if(com->comstate && np)
{
/* call builtin to cleanup state */
- Nambltin_t bdata;
- bdata.shp = &sh;
- bdata.np = com->comnamq;
- bdata.ptr =nv_context(np);
- bdata.data = com->comstate;
- bdata.flags = SH_END_OPTIM;
- (*funptr(np))(0,(char**)0, &bdata);
+ Shbltin_t *bp = &sh.bltindata;
+ bp->bnode = np;
+ bp->vnode = com->comnamq;
+ bp->ptr =nv_context(np);
+ bp->data = com->comstate;
+ bp->flags = SH_END_OPTIM;
+ (*funptr(np))(0,(char**)0, bp);
}
com->comstate = 0;
if(com->comarg && !np)
@@ -544,7 +544,6 @@
}
}
-
int sh_exec(register const Shnode_t *t, int flags)
{
sh_sigcheck();
@@ -560,7 +559,7 @@
#endif
int topfd = sh.topfd;
char *sav=stakptr(0);
- char *cp=0, **com=0;
+ char *cp=0, **com=0, *comn;
int argn;
int skipexitset = 0;
int was_interactive = 0;
@@ -628,21 +627,25 @@
argn -= command;
if(!command && np && is_abuiltin(np))
np = dtsearch(sh.fun_tree,np);
- if(com0 && !np && !strchr(com0,'/'))
+ if(com0)
{
- Dt_t *root = command?sh.bltin_tree:sh.fun_tree;
- np = nv_bfsearch(com0, root, &nq, &cp);
-#if SHOPT_NAMESPACE
- if(sh.namespace && !nq && !cp)
+ if(!np && !strchr(com0,'/'))
{
- int offset = staktell();
- stakputs(nv_name(sh.namespace));
- stakputc('.');
- stakputs(com0);
- stakseek(offset);
- np = nv_bfsearch(stakptr(offset), root, &nq, &cp);
- }
+ Dt_t *root = command?sh.bltin_tree:sh.fun_tree;
+ np = nv_bfsearch(com0, root, &nq, &cp);
+#if SHOPT_NAMESPACE
+ if(sh.namespace && !nq && !cp)
+ {
+ int offset = staktell();
+ stakputs(nv_name(sh.namespace));
+ stakputc('.');
+ stakputs(com0);
+ stakseek(offset);
+ np = nv_bfsearch(stakptr(offset), root, &nq, &cp);
+ }
#endif /* SHOPT_NAMESPACE */
+ }
+ comn = com[argn-1];
}
io = t->tre.treio;
if(sh.envlist = argp = t->com.comset)
@@ -751,7 +754,6 @@
/* check for builtins */
if(np && is_abuiltin(np))
{
- Nambltin_t bdata;
void *context;
int scope=0, jmpval, save_prompt,share;
struct checkpt buff;
@@ -817,12 +819,17 @@
sh.bltinfun = funptr(np);
if(nv_isattr(np,NV_BLTINOPT))
{
- bdata.shp = &sh;
- bdata.np = nq;
- bdata.ptr = context;
- bdata.data = t->com.comstate;
- bdata.flags = (OPTIMIZE!=0);
- context = (void*)&bdata;
+ Shbltin_t *bp = &sh.bltindata;
+ bp->bnode = np;
+ bp->vnode = nq;
+ bp->ptr = context;
+ bp->data = t->com.comstate;
+ bp->sigset = 0;
+ bp->notify = 0;
+ bp->flags = (OPTIMIZE!=0);
+ if(sh.subshell && nv_isattr(np,BLT_NOSFIO))
+ sh_subtmpfile();
+ context = (void*)bp;
}
if(execflg && !sh.subshell &&
!sh.st.trapcom[0] && !sh.st.trap[SH_ERRTRAP] && sh.fn_depth==0 && !nv_isattr(np,BLT_ENV))
@@ -837,7 +844,7 @@
if(error_info.flags&ERROR_INTERACTIVE)
tty_check(ERRIO);
if(nv_isattr(np,NV_BLTINOPT))
- ((Shnode_t*)t)->com.comstate = bdata.data;
+ ((Shnode_t*)t)->com.comstate = sh.bltindata.data;
if(!nv_isattr(np,BLT_EXIT) && sh.exitval!=SH_RUNPROG)
sh.exitval &= SH_EXITMASK;
}
@@ -855,6 +862,8 @@
sfclose(item->strm);
}
}
+ if(sh.bltinfun && (error_info.flags&ERROR_NOTIFY))
+ (*sh.bltinfun)(-2,com,context);
/* failure on special built-ins fatal */
if(jmpval<=SH_JMPCMD && (!nv_isattr(np,BLT_SPC) || command))
jmpval=0;
@@ -1332,7 +1341,7 @@
struct comnod *tp;
char *cp, *trap, *nullptr = 0;
int nameref, refresh=1;
- static char *av[5] = { "for", 0, "in" };
+ char *av[5];
#if SHOPT_OPTIMIZE
int jmpval = ((struct checkpt*)sh.jmplist)->mode;
struct checkpt buff;
@@ -1415,7 +1424,9 @@
{
av[0] = (t->tre.tretyp&COMSCAN)?"select":"for";
av[1] = t->for_.fornam;
+ av[2] = "in";
av[3] = cp;
+ av[4] = 0;
sh_debug(trap,(char*)0,(char*)0,av,0);
}
sh_exec(t->for_.fortre,flag);
@@ -1537,12 +1548,15 @@
case TARITH: /* (( expression )) */
{
register char *trap;
- static char *arg[4]= {"((", 0, "))"};
+ char *arg[4];
error_info.line = t->ar.arline-sh.st.firstline;
+ arg[0] = "((";
if(!(t->ar.arexpr->argflag&ARG_RAW))
arg[1] = sh_macpat(t->ar.arexpr,OPTIMIZE|ARG_ARITH);
else
arg[1] = t->ar.arexpr->argval;
+ arg[2] = "))";
+ arg[3] = 0;
if(trap=sh.st.trap[SH_DEBUGTRAP])
sh_debug(trap,(char*)0, (char*)0, arg, ARG_ARITH);
if(sh_isoption(SH_XTRACE))
@@ -1574,8 +1588,11 @@
t= (Shnode_t*)(tt->sw.swlst);
if(trap=sh.st.trap[SH_DEBUGTRAP])
{
- static char *av[4] = {"case", 0, "in" };
+ char *av[4];
+ av[0] = "case";
av[1] = r;
+ av[2] = "in";
+ av[3] = 0;
sh_debug(trap, (char*)0, (char*)0, av, 0);
}
while(t)
@@ -1924,15 +1941,15 @@
sh_done(0);
if(sh.lastarg!= lastarg && sh.lastarg)
free(sh.lastarg);
- if(strlen(com[argn-1]) < sizeof(lastarg))
+ if(strlen(comn) < sizeof(lastarg))
{
nv_onattr(L_ARGNOD,NV_NOFREE);
- sh.lastarg = strcpy(lastarg,com[argn-1]);
+ sh.lastarg = strcpy(lastarg,comn);
}
else
{
nv_offattr(L_ARGNOD,NV_NOFREE);
- sh.lastarg = strdup(com[argn-1]);
+ sh.lastarg = strdup(comn);
}
}
if(!skipexitset)
@@ -1956,6 +1973,34 @@
return(sh.exitval);
}
+int sh_run(int argn, char *argv[])
+{
+ register struct dolnod *dp;
+ register struct comnod *t = (struct comnod*)stakalloc(sizeof(struct comnod));
+ int savtop = staktell();
+ char *savptr = stakfreeze(0);
+ Opt_t *op, *np = optctx(0, 0);
+ Shbltin_t bltindata;
+ bltindata = sh.bltindata;
+ op = optctx(np, 0);
+ memset(t, 0, sizeof(struct comnod));
+ dp = (struct dolnod*)stakalloc((unsigned)sizeof(struct dolnod) + ARG_SPARE*sizeof(char*) + argn*sizeof(char*));
+ dp->dolnum = argn;
+ dp->dolbot = ARG_SPARE;
+ memcpy(dp->dolval+ARG_SPARE, argv, (argn+1)*sizeof(char*));
+ t->comarg = (struct argnod*)dp;
+ if(!strchr(argv[0],'/'))
+ t->comnamp = (void*)nv_bfsearch(argv[0],sh.fun_tree,(Namval_t**)&t->comnamq,(char**)0);
+ argn=sh_exec((Shnode_t*)t,sh_isstate(SH_ERREXIT));
+ optctx(op,np);
+ sh.bltindata = bltindata;
+ if(savptr!=stakptr(0))
+ stakset(savptr,savtop);
+ else
+ stakseek(savtop);
+ return(argn);
+}
+
/*
* test for equality with second argument trimmed
* returns 1 if r == trim(s) otherwise 0
@@ -2533,7 +2578,7 @@
*/
static int run_subshell(const Shnode_t *t,pid_t grp)
{
- static char prolog[] = "(print $(typeset +A);set; typeset -p; print .sh.dollar=$$;set +o)";
+ static const char prolog[] = "(print $(typeset +A);set; typeset -p; print .sh.dollar=$$;set +o)";
register int i, fd, trace = sh_isoption(SH_XTRACE);
int pin,pout;
pid_t pid;
@@ -2933,15 +2978,3 @@
}
# endif /* _lib_fork */
#endif /* SHOPT_SPAWN */
-
-/*
- * override procrun() since it is used in libcmd
- */
-#include <proc.h>
-int procrun(const char *path, char *argv[])
-{
- if(sh.subshell)
- sh_subtmpfile();
- return(procclose(procopen(path, argv, NiL, NiL, PROC_FOREGROUND|PROC_GID
-|PROC_UID)));
-}
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/tests/basic.sh ksh93_2007_05_15/src/cmd/ksh93/tests/basic.sh
--- ksh93_2007_04_18/src/cmd/ksh93/tests/basic.sh 2007-03-20 19:30:26.000000000 +0100
+++ ksh93_2007_05_15/src/cmd/ksh93/tests/basic.sh 2007-04-30 17:48:30.000000000 +0200
@@ -330,6 +330,12 @@
print 'print -- $0' >> /tmp/ksh$$x
chmod +x /tmp/ksh$$x
[[ $(/tmp/ksh$$x) == /tmp/ksh$$x ]] || err_exit "\$0 is $0 instead of /tmp/ksh$$x"
+cat > /tmp/ksh$$x <<- \EOF
+ myfilter() { x=$(print ok | cat); print -r -- $SECONDS;}
+ set -o pipefail
+ sleep 3 | myfilter
+EOF
+(( $($SHELL /tmp/ksh$$x) > 2.0 )) && err_exit 'command substitution causes pipefail option to hang'
rm -f /tmp/ksh$$x
exec 3<&-
( typeset -r foo=bar) 2> /dev/null || err_exit 'readonly variables set in a subshell cannot unset'
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/tests/options.sh ksh93_2007_05_15/src/cmd/ksh93/tests/options.sh
--- ksh93_2007_04_18/src/cmd/ksh93/tests/options.sh 2006-10-06 19:28:13.000000000 +0200
+++ ksh93_2007_05_15/src/cmd/ksh93/tests/options.sh 2007-05-11 22:42:25.000000000 +0200
@@ -310,4 +310,22 @@
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 '[[ $- == *c* ]]' || err_exit 'option c not in $-'
+trap 'rm -f /tmp/.profile' EXIT
+> /tmp/.profile
+for i in i l r s D E a b e f h k n r t u v x B C G H
+do HOME=/tmp ENV= $SHELL -$i 2> /dev/null <<- ++EOF++ || err_exit "option $i not in \$-"
+ [[ \$- == *$i* ]] || exit 1
+ ++EOF++
+done
+letters=ilrabefhknuvxBCGE
+integer j=0
+for i in interactive login restricted allexport notify errexit \
+ noglob trackall keyword noexec nounset verbose xtrace braceexpand \
+ noclobber globstar rc
+do HOME=/tmp ENV= $SHELL -o $i 2> /dev/null <<- ++EOF++ || err_exit "option $i not equivalent to ${letters:j:1}"
+ [[ \$- == *${letters:j:1}* ]] || exit 1
+ ++EOF++
+ ((j++))
+done
exit $((Errors))
diff -r -N -u ksh93_2007_04_18/src/cmd/ksh93/tests/restricted.sh ksh93_2007_05_15/src/cmd/ksh93/tests/restricted.sh
--- ksh93_2007_04_18/src/cmd/ksh93/tests/restricted.sh 1970-01-01 01:00:00.000000000 +0100
+++ ksh93_2007_05_15/src/cmd/ksh93/tests/restricted.sh 2007-03-06 18:28:39.000000000 +0100
@@ -0,0 +1,78 @@
+########################################################################
+# #
+# 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'
+
+# test restricted shell
+Command=${0##*/}
+integer Errors=0
+mkdir /tmp/ksh$$ || err_exit "mkdir /tmp/ksh$$ failed"
+trap "cd /; rm -rf /tmp/ksh$$" EXIT
+pwd=$PWD
+case $SHELL in
+/*) ;;
+*/*) SHELL=$pwd/$SHELL;;
+*) SHELL=$(whence "$SHELL");;
+esac
+function check_restricted
+{
+ rm -f out
+ rksh -c "$@" 2> out > /dev/null
+ grep restricted out > /dev/null 2>&1
+}
+
+[[ $SHELL != /* ]] && SHELL=$pwd/$SHELL
+cd /tmp/ksh$$ || err_exit "cd /tmp/ksh$$ failed"
+ln -s $SHELL rksh
+PATH=$PWD:$PATH
+rksh -c '[[ -o restricted ]]' || err_exit 'restricted option not set'
+[[ $(rksh -c 'print hello') == hello ]] || err_exit 'unable to run print'
+check_restricted /bin/echo || err_exit '/bin/echo not resticted'
+check_restricted ./echo || err_exit './echo not resticted'
+check_restricted 'SHELL=ksh' || err_exit 'SHELL asignment not resticted'
+check_restricted 'PATH=/bin' || err_exit 'PATH asignment not resticted'
+check_restricted 'FPATH=/bin' || err_exit 'FPATH asignment not resticted'
+check_restricted 'ENV=/bin' || err_exit 'ENV asignment not resticted'
+check_restricted 'print > file' || err_exit '> file not restricted'
+> empty
+check_restricted 'print <> empty' || err_exit '<> file not restricted'
+print 'echo hello' > script
+chmod +x ./script
+! check_restricted script || err_exit 'script without builtins should run in restricted mode'
+check_restricted ./script || err_exit 'script with / in name should not run in restricted mode'
+print '/bin/echo hello' > script
+check_restricted script || err_exit 'script with pathnames should not run in restricted mode'
+print 'echo hello> file' > script
+check_restricted script || err_exit 'script with output redirection should not run in restricted mode'
+print 'PATH=/bin' > script
+check_restricted script || err_exit 'script with PATH assignment should not run in restricted mode'
+cat > script <<!
+#! $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_04_18/src/cmd/ksh93/tests/substring.sh ksh93_2007_05_15/src/cmd/ksh93/tests/substring.sh
--- ksh93_2007_04_18/src/cmd/ksh93/tests/substring.sh 2007-03-20 19:43:39.000000000 +0100
+++ ksh93_2007_05_15/src/cmd/ksh93/tests/substring.sh 2007-05-14 16:55:20.000000000 +0200
@@ -166,6 +166,10 @@
if [[ "${x//\[(*)\]/\{\1\}}" != {123}def ]]
then err_exit 'closing brace escape not working'
fi
+xx=%28text%29
+if [[ ${xx//%28/abc\)} != 'abc)text%29' ]]
+then err_exit '${xx//%28/abc\)} not working'
+fi
unset foo
foo=one/two/three
if [[ ${foo//'/'/_} != one_two_three ]]
diff -r -N -u ksh93_2007_04_18/src/lib/libast/comp/conf.sh ksh93_2007_05_15/src/lib/libast/comp/conf.sh
--- ksh93_2007_04_18/src/lib/libast/comp/conf.sh 2007-04-02 21:43:47.000000000 +0200
+++ ksh93_2007_05_15/src/lib/libast/comp/conf.sh 2007-04-20 19:45:43.000000000 +0200
@@ -21,7 +21,7 @@
########################################################################
: generate getconf and limits info
#
-# @(#)conf.sh (AT&T Research) 2007-04-02
+# @(#)conf.sh (AT&T Research) 2007-04-20
#
# this script generates these files from the table file in the first arg
# the remaining args are the C compiler name and flags
@@ -128,8 +128,33 @@
}
!
if $cc -o $tmp.exe $tmp.c >/dev/null 2>&1 && ./$tmp.exe
-then LL='ll'
-else LL='l'
+then LL_format='ll'
+else LL_format='l'
+fi
+
+# determine the intmax_t constant suffix
+
+cat > $tmp.c <<!
+${head}
+int
+main()
+{
+#if _ast_intmax_long
+ return 1;
+#else
+ _ast_intmax_t s = 0x7fffffffffffffffLL;
+ unsigned _ast_intmax_t u = 0xffffffffffffffffLL;
+
+ return 0;
+#endif
+}
+!
+if $cc -o $tmp.exe $tmp.c >/dev/null 2>&1
+then if ./$tmp.exe
+ then LL_suffix='LL'
+ else LL_suffix='L'
+ fi
+else LL_suffix=''
fi
# set up the names and keys
@@ -200,7 +225,7 @@
;;
*" -$f- "*)
;;
- *) if iffe -n - hdr $f | grep -q _hdr_$f
+ *) if iffe -n - hdr $f | grep _hdr_$f >/dev/null
then hdr="$hdr $f"
headers=$headers$nl#include$sp'<'$1'>'
else hdr="$hdr -$f-"
@@ -984,9 +1009,6 @@
case $flags in
*W*) conf_flags="${conf_flags}|CONF_PREFIX_ONLY" ;;
esac
- case $shell in
- ksh) conf_flags=${conf_flags#0?} ;;
- esac
case $debug in
?*) case $standard in
????) sep=" " ;;
@@ -1058,10 +1080,10 @@
;;
'') case $conf_name in
SIZE_*|U*|*_MAX)
- f="%${LL}u"
+ f="%${LL_format}u"
t="unsigned _ast_intmax_t"
;;
- *) f="%${LL}d"
+ *) f="%${LL_format}d"
t="_ast_intmax_t"
;;
esac
@@ -1294,9 +1316,86 @@
conf_minmax=0x$conf_minmax
;;
esac
+ case $conf_limit in
+ ?*[-+]*|*['()']*)
+ ;;
+ *[lLuU])
+ case $LL_suffix in
+ ??) case $conf_limit in
+ *[!lL][lL]|*[!lL][lL][uU])
+ conf_limit=${conf_limit}L
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ -*[2468])
+ case $shell in
+ ksh) p=${conf_limit%?}
+ s=${conf_limit#$p}
+ ((s=s-1))
+ ;;
+ *) eval `echo '' $conf_limit | sed 's/ *\(.*\)\(.\) */p=\1 s=\2/'`
+ s=`expr $s - 1`
+ ;;
+ esac
+ conf_limit=${p}${s}${LL_suffix}-1${LL_suffix}
+ ;;
+ 0[xX]*[abcdefABCDEF])
+ conf_limit=${conf_limit}${LL_suffix}
+ ;;
+ -*[0123456789])
+ conf_limit=${conf_limit}${LL_suffix}
+ ;;
+ *[0123456789])
+ conf_limit=${conf_limit}U${LL_suffix}
+ ;;
+ esac
+ case $conf_minmax in
+ ?*[-+]*|*['()']*)
+ ;;
+ *[lLuU])
+ case $LL_suffix in
+ ??) case $conf_minmax in
+ *[!lL][lL]|*[!lL][lL][uU])
+ conf_minmax=${conf_minmax}L
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ -*[2468])
+ case $shell in
+ ksh) p=${conf_minmax%?}
+ s=${conf_minmax#$p}
+ ((s=s-1))
+ ;;
+ *) eval `echo '' $conf_minmax | sed 's/ *\(.*\)\(.\) */p=\1 s=\2/'`
+ s=`expr $s - 1`
+ ;;
+ esac
+ conf_minmax=${p}${s}${LL_suffix}-1${LL_suffix}
+ ;;
+ 0[xX]*[abcdefABCDEF])
+ conf_minmax=${conf_minmax}${LL_suffix}
+ ;;
+ -*[0123456789])
+ conf_minmax=${conf_minmax}${LL_suffix}
+ ;;
+ *[0123456789])
+ conf_minmax=${conf_minmax}U${LL_suffix}
+ ;;
+ esac
conf_limit="{ $conf_limit, 0 }" conf_minmax="{ $conf_minmax, 0 }"
;;
esac
+ case $conf_flags in
+ '0|'*) case $shell in
+ ksh) conf_flags=${conf_flags#0?} ;;
+ *) conf_flags=`echo "$conf_flags" | sed 's/^0.//'` ;;
+ esac
+ ;;
+ esac
echo "{ \"$conf_name\", $conf_limit, $conf_minmax, $conf_flags, $conf_standard, $conf_section, $conf_call, $conf_op },"
case $shell in
ksh) len=${#conf_name}
@@ -1327,14 +1426,16 @@
esac
{
cat <<!
-#pragma prototyped
-
#ifndef _CONFTAB_H
#define _CONFTAB_H
$systeminfo
${generated}
+#if !defined(const) && !defined(__STDC__) && !defined(__cplusplus) && !defined(c_plusplus)
+#define const
+#endif
+
#define conf _ast_conf_data
#define conf_elements _ast_conf_ndata
@@ -1385,8 +1486,6 @@
struct Conf_s; typedef struct Conf_s Conf_t;
-typedef int (*Conf_f)(Conf_t*, intmax_t*, char**);
-
typedef struct Value_s
{
intmax_t number;
@@ -1421,8 +1520,7 @@
#endif
!
-} > $tmp.1
-proto < $tmp.1 > $tmp.2
+} > $tmp.2
case $debug in
-d7) echo $command: $tmp.2 ${base}.h ;;
*) cmp -s $tmp.2 ${base}.h 2>/dev/null || mv $tmp.2 ${base}.h ;;
@@ -1433,7 +1531,6 @@
esac
{
cat <<!
-#pragma prototyped
${head}
#include <sys/types.h>
#include <limits.h>
@@ -1480,8 +1577,7 @@
int conf_elements = (int)sizeof(conf) / (int)sizeof(conf[0]);
!
-} > $tmp.3
-proto < $tmp.3 > $tmp.4
+} > $tmp.4
case $debug in
-d7) echo $command: $tmp.4 ${base}.c ;;
*) cmp -s $tmp.4 ${base}.c 2>/dev/null || mv $tmp.4 ${base}.c ;;
diff -r -N -u ksh93_2007_04_18/src/lib/libast/comp/conf.tab ksh93_2007_05_15/src/lib/libast/comp/conf.tab
--- ksh93_2007_04_18/src/lib/libast/comp/conf.tab 2007-04-02 21:45:47.000000000 +0200
+++ ksh93_2007_05_15/src/lib/libast/comp/conf.tab 2007-04-19 23:05:07.000000000 +0200
@@ -1,7 +1,7 @@
#
# posix { getconf limits } macro table
#
-# @(#)conf.tab (AT&T Research) 2007-04-01
+# @(#)conf.tab (AT&T Research) 2007-04-19
#
# name standard section call flags [ header ... ] [ value ... ]
#
@@ -45,7 +45,7 @@
AIO_MAX POSIX SC 1 LMU 1
AIO_PRIO_DELTA_MAX POSIX SC 1 LMU
ALLOC_SIZE_MIN POSIX PC 1 LUVW
-ARCHITECTURE SVID SI 1 0
+ARCHITECTURE SVID SI 1 O
ARG_MAX POSIX SC 1 CDLMUX NCARGS 4096
ASYNCHRONOUS_IO POSIX SC 1 CDFUW
ASYNC_IO POSIX PC 1 FUW
@@ -58,7 +58,7 @@
BC_DIM_MAX POSIX SC 2 LMN 2048
BC_SCALE_MAX POSIX SC 2 LMN 99
BC_STRING_MAX POSIX SC 2 LMN 1000
-BUSTYPES SVID SI 1 0
+BUSTYPES SVID SI 1 O
CHARCLASS_NAME_MAX XOPEN XX 1 L 14
CHAR_BIT C XX 1 L 8
CHAR_MAX C XX 1 L
@@ -116,9 +116,9 @@
GETGR_R_SIZE_MAX C QQ 1 L
GETPW_R_SIZE_MAX C QQ 1 L
HOSTID C QQ 1 L
-HOSTNAME SVID SI 1 0
+HOSTNAME SVID SI 1 O
HOST_NAME_MAX POSIX SC 1 LMU 255
-HW_PROVIDER SVID SI 1 0
+HW_PROVIDER SVID SI 1 O
HW_SERIAL C QQ 1 L
ILP32_OFF32 XBS5 SC 1 FU
ILP32_OFF32_CFLAGS XBS5 CS 1 FU
@@ -130,7 +130,7 @@
ILP32_OFFBIG_LDFLAGS XBS5 CS 1 FU
ILP32_OFFBIG_LIBS XBS5 CS 1 FU
ILP32_OFFBIG_LINTFLAGS XBS5 CS 1 FU
-INITTAB_NAME SVID SI 1 0
+INITTAB_NAME SVID SI 1 O
INT_MAX C XX 1 L 32767
INT_MIN C XX 1 L -32767
IOV_MAX XOPEN SC 1 LMU 16
@@ -169,7 +169,7 @@
KERNEL_REGION_MAX SCO SC 1 0
KERNEL_S5INODE SCO SC 1 0
KERNEL_S5INODE_MAX SCO SC 1 0
-KERNEL_STAMP SVID SI 1 0
+KERNEL_STAMP SVID SI 1 O
KERN_POINTERS C QQ 1 L
KERN_SIM C QQ 1 L
LEGACY XOPEN SC 1 FU
@@ -214,7 +214,7 @@
LPBIG_OFFBIG_LDFLAGS XBS5 CS 1 FU
LPBIG_OFFBIG_LIBS XBS5 CS 1 FU
LPBIG_OFFBIG_LINTFLAGS XBS5 CS 1 FU
-MACHINE SVID SI 1 0
+MACHINE SVID SI 1 O
MAPPED_FILES POSIX SC 1 CDFUW _lib_mmap
MAX_CANON POSIX PC 1 LMU CANBSIZ 255
MAX_INPUT POSIX PC 1 LMU MAX_CANON 255
@@ -343,8 +343,8 @@
OSREL_MAJ C QQ 1 L
OSREL_MIN C QQ 1 L
OSREL_PATCH C QQ 1 L
-OS_BASE SVID SI 1 0
-OS_PROVIDER SVID SI 1 0
+OS_BASE SVID SI 1 O
+OS_PROVIDER SVID SI 1 O
OS_VERSION AES SC 1 FSU
PAGESIZE POSIX SC 1 MU PAGESIZE PAGE_SIZE 4096 cc{
int main()
@@ -506,7 +506,7 @@
SYMLOOP_MAX POSIX SC 1 LMU 8
SYNCHRONIZED_IO POSIX SC 1 CDFUW
SYNC_IO POSIX PC 1 FUW
-SYSNAME SVID SI 1 0
+SYSNAME SVID SI 1 O
SYSPID_MAX SVID SC 1 LMU 2
THREADS POSIX SC 1 CDFUW
THREADS_PRIO_CEILING POSIX SC 1 FUW
@@ -550,7 +550,7 @@
ULONG_MAX C XX 1 L 4294967295
UNIX XOPEN SC 1 FSUW
UPE POSIX SC 2 FUW
-USER_LIMIT SVID SI 1 0
+USER_LIMIT SVID SI 1 O
USHRT_MAX C XX 1 L 65535
V6_ILP32_OFF32 POSIX SC 1 W
V6_ILP32_OFFBIG POSIX SC 1 W
diff -r -N -u ksh93_2007_04_18/src/lib/libast/comp/rename.c ksh93_2007_05_15/src/lib/libast/comp/rename.c
--- ksh93_2007_04_18/src/lib/libast/comp/rename.c 2004-07-23 08:13:51.000000000 +0200
+++ ksh93_2007_05_15/src/lib/libast/comp/rename.c 2007-04-23 22:54:35.000000000 +0200
@@ -49,7 +49,7 @@
argv[1] = from;
argv[2] = to;
argv[3] = 0;
- if (!procrun(argv[0], argv))
+ if (!procrun(argv[0], argv, 0))
{
errno = oerrno;
return 0;
diff -r -N -u ksh93_2007_04_18/src/lib/libast/comp/setlocale.c ksh93_2007_05_15/src/lib/libast/comp/setlocale.c
--- ksh93_2007_04_18/src/lib/libast/comp/setlocale.c 2006-12-19 06:08:54.000000000 +0100
+++ ksh93_2007_05_15/src/lib/libast/comp/setlocale.c 2007-04-20 21:44:46.000000000 +0200
@@ -151,7 +151,7 @@
return 0;
sys = uwin_setlocale(category, usr);
if (ast.locale.set & AST_LC_debug)
- sfprintf(sfstderr, "locale uwin %17s %-24s %-24s\n", categories[lcindex(category, 0)].name, usr, sys);
+ sfprintf(sfstderr, "locale uwin %17s %-24s %-24s\n", lc_categories[lcindex(category, 0)].name, usr, sys);
return sys;
}
@@ -558,7 +558,7 @@
dp = &default_numeric;
LCINFO(category)->data = (void*)dp;
if (ast.locale.set & (AST_LC_debug|AST_LC_setlocale))
- sfprintf(sfstderr, "locale info %17s decimal '%c' thousands '%c'\n", categories[category].name, dp->decimal, dp->thousand >= 0 ? dp->thousand : 'X');
+ sfprintf(sfstderr, "locale info %17s decimal '%c' thousands '%c'\n", lc_categories[category].name, dp->decimal, dp->thousand >= 0 ? dp->thousand : 'X');
}
return 0;
}
@@ -567,7 +567,7 @@
* this table is indexed by AST_LC_[A-Z]*
*/
-Lc_category_t categories[] =
+Lc_category_t lc_categories[] =
{
{ "LC_ALL", LC_ALL, AST_LC_ALL, 0 },
{ "LC_COLLATE", LC_COLLATE, AST_LC_COLLATE, set_collate },
@@ -645,11 +645,11 @@
const char* sys;
int i;
- if (!lc && !(lc = categories[category].prev))
+ if (!lc && !(lc = lc_categories[category].prev))
lc = lcmake(NiL);
if (locales[category] != lc)
{
- if (categories[category].external == -categories[category].internal)
+ if (lc_categories[category].external == -lc_categories[category].internal)
{
sys = 0;
for (i = 1; i < AST_LC_COUNT; i++)
@@ -660,13 +660,13 @@
}
}
else if (lc->flags & (LC_debug|LC_local))
- sys = setlocale(categories[category].external, lcmake(NiL)->name);
- else if (!(sys = setlocale(categories[category].external, lc->name)) &&
- (streq(lc->name, lc->code) || !(sys = setlocale(categories[category].external, lc->code))) &&
+ sys = setlocale(lc_categories[category].external, lcmake(NiL)->name);
+ else if (!(sys = setlocale(lc_categories[category].external, lc->name)) &&
+ (streq(lc->name, lc->code) || !(sys = setlocale(lc_categories[category].external, lc->code))) &&
!streq(lc->code, lc->language->code))
- sys = setlocale(categories[category].external, lc->language->code);
+ sys = setlocale(lc_categories[category].external, lc->language->code);
if (ast.locale.set & (AST_LC_debug|AST_LC_setlocale))
- sfprintf(sfstderr, "locale set %17s %-24s %-24s\n", categories[category].name, lc->name, sys);
+ sfprintf(sfstderr, "locale set %17s %-24s %-24s\n", lc_categories[category].name, lc->name, sys);
if (!sys)
{
/*
@@ -684,13 +684,13 @@
}
if (!(lc->flags & LC_local))
return 0;
- if (categories[category].external != -categories[category].internal)
- setlocale(categories[category].external, lcmake(NiL)->name);
+ if (lc_categories[category].external != -lc_categories[category].internal)
+ setlocale(lc_categories[category].external, lcmake(NiL)->name);
}
locales[category] = lc;
- if (categories[category].setf && (*categories[category].setf)(&categories[category]))
+ if (lc_categories[category].setf && (*lc_categories[category].setf)(&lc_categories[category]))
{
- locales[category] = categories[category].prev;
+ locales[category] = lc_categories[category].prev;
return 0;
}
if (lc->flags & LC_default)
@@ -729,7 +729,7 @@
for (i = 1; i < AST_LC_COUNT; i++)
{
s = w;
- t = categories[i].name;
+ t = lc_categories[i].name;
while (*t && *s++ == *t++);
if (!*t && *s++ == '=')
{
@@ -776,8 +776,8 @@
}
stk[k++] = cat[i];
}
- else if (!categories[cat[i]].prev)
- categories[cat[i]].prev = p;
+ else if (!lc_categories[cat[i]].prev)
+ lc_categories[cat[i]].prev = p;
}
while (s[0] == '/' && s[1] && n < AST_LC_COUNT)
{
@@ -802,8 +802,8 @@
return -1;
}
}
- else if (!categories[n].prev)
- categories[n].prev = p;
+ else if (!lc_categories[n].prev)
+ lc_categories[n].prev = p;
}
return n;
}
@@ -862,7 +862,7 @@
if (cat[j] == k)
{
cat[j] = -1;
- sfprintf(sp, "%s=", categories[j].name);
+ sfprintf(sp, "%s=", lc_categories[j].name);
}
sfprintf(sp, "%s", locales[i]->name);
}
@@ -888,11 +888,11 @@
if (!(a = getenv("LC_ALL")) || !*a)
{
for (i = 1; i < AST_LC_COUNT; i++)
- if ((s = getenv(categories[i].name)) && *s)
+ if ((s = getenv(lc_categories[i].name)) && *s)
{
if (streq(s, local) && (u || (u = native_locale(locale, tmp, sizeof(tmp)))))
s = u;
- categories[i].prev = lcmake(s);
+ lc_categories[i].prev = lcmake(s);
}
a = getenv("LANG");
}
@@ -906,13 +906,13 @@
p = 0;
for (i = 1; i < AST_LC_COUNT; i++)
{
- if (!categories[i].prev)
+ if (!lc_categories[i].prev)
{
if (!p && !(p = lcmake(a)))
break;
- categories[i].prev = p;
+ lc_categories[i].prev = p;
}
- if (!single(i, categories[i].prev))
+ if (!single(i, lc_categories[i].prev))
{
while (i--)
single(i, NiL);
@@ -921,7 +921,7 @@
}
if (ast.locale.set & AST_LC_debug)
for (i = 1; i < AST_LC_COUNT; i++)
- sfprintf(sfstderr, "locale env %17s %s\n", categories[i].name, locales[i]->name);
+ sfprintf(sfstderr, "locale env %17s %s\n", lc_categories[i].name, locales[i]->name);
initialized = 1;
}
goto compose;
diff -r -N -u ksh93_2007_04_18/src/lib/libast/comp/syslog.h ksh93_2007_05_15/src/lib/libast/comp/syslog.h
--- ksh93_2007_04_18/src/lib/libast/comp/syslog.h 2003-06-15 12:29:15.000000000 +0200
+++ ksh93_2007_05_15/src/lib/libast/comp/syslog.h 2007-04-21 00:22:54.000000000 +0200
@@ -95,7 +95,7 @@
/* encoding support */
-#include <namval.h>
+#include <ast_namval.h>
#define log_facility _log_facility
#define log_severity _log_severity
diff -r -N -u ksh93_2007_04_18/src/lib/libast/comp/system.c ksh93_2007_05_15/src/lib/libast/comp/system.c
--- ksh93_2007_04_18/src/lib/libast/comp/system.c 2006-09-22 17:28:36.000000000 +0200
+++ ksh93_2007_05_15/src/lib/libast/comp/system.c 2007-04-23 22:54:44.000000000 +0200
@@ -51,5 +51,5 @@
sh[1] = "-c";
sh[2] = (char*)cmd;
sh[3] = 0;
- return procrun(NiL, sh);
+ return procrun(NiL, sh, 0);
}
diff -r -N -u ksh93_2007_04_18/src/lib/libast/features/siglist ksh93_2007_05_15/src/lib/libast/features/siglist
--- ksh93_2007_04_18/src/lib/libast/features/siglist 1970-01-01 01:00:00.000000000 +0100
+++ ksh93_2007_05_15/src/lib/libast/features/siglist 2007-05-09 18:21:19.000000000 +0200
@@ -0,0 +1,14 @@
+lib strsignal string.h signal.h
+
+tst - run{
+ for sig in `/bin/kill -l 2>/dev/null`
+ do case $sig in
+ *[!A-Za-z0-9_]*|*MIN|*MAX)
+ ;;
+ *) echo "#if defined(SIG$sig) && !defined(HAD_SIG$sig)"
+ echo "0,\"$sig\",SIG$sig,"
+ echo "#endif"
+ ;;
+ esac
+ done
+}end
diff -r -N -u ksh93_2007_04_18/src/lib/libast/features/signal.c ksh93_2007_05_15/src/lib/libast/features/signal.c
--- ksh93_2007_04_18/src/lib/libast/features/signal.c 2006-09-28 20:16:56.000000000 +0200
+++ ksh93_2007_05_15/src/lib/libast/features/signal.c 2007-05-09 18:14:04.000000000 +0200
@@ -22,13 +22,19 @@
#pragma prototyped
/*
* Glenn Fowler
- * AT&T Bell Laboratories
+ * AT&T Research
*
* generate signal features
*/
+#include "FEATURE/standards"
+
+#define strsignal ______strsignal
+
#include <signal.h>
+#undef strsignal
+
struct _m_
{
char* text;
@@ -41,170 +47,226 @@
static struct _m_ map[] =
{
#ifdef SIGABRT
+#define HAD_SIGABRT 1
"Abort", "ABRT", SIGABRT,
#endif
#ifdef SIGAIO
+#define HAD_SIGAIO 1
"Asynchronous I/O", "AIO", SIGAIO,
#endif
#ifdef SIGALRM
+#define HAD_SIGALRM 1
"Alarm call", "ALRM", SIGALRM,
#endif
#ifdef SIGAPOLLO
+#define HAD_SIGAPOLLO 1
"Apollo", "APOLLO", SIGAPOLLO,
#endif
#ifdef SIGBUS
+#define HAD_SIGBUS 1
"Bus error", "BUS", SIGBUS,
#endif
#ifdef SIGCHLD
+#define HAD_SIGCHLD 1
"Child status change", "CHLD", SIGCHLD,
#endif
#ifdef SIGCLD
+#define HAD_SIGCLD 1
"Death of child", "CLD", SIGCLD,
#endif
#ifdef SIGCONT
+#define HAD_SIGCONT 1
"Stopped process continued", "CONT", SIGCONT,
#endif
#ifdef SIGDANGER
+#define HAD_SIGDANGER 1
"System crash soon", "DANGER", SIGDANGER,
#endif
#ifdef SIGDEBUG
+#define HAD_SIGDEBUG 1
"Debug trap", "DEBUG", SIGDEBUG,
#endif
#ifdef SIGDIL
+#define HAD_SIGDIL 1
"DIL trap", "DIL", SIGDIL,
#endif
#ifdef SIGEMT
+#define HAD_SIGEMT 1
"EMT trap", "EMT", SIGEMT,
#endif
#ifdef SIGERR
+#define HAD_SIGERR 1
"ERR trap", "ERR", SIGERR,
#endif
#ifdef SIGEXIT
+#define HAD_SIGEXIT 1
"Exit", "EXIT", SIGEXIT,
#endif
#ifdef SIGFPE
+#define HAD_SIGFPE 1
"Floating exception", "FPE", SIGFPE,
#endif
#ifdef SIGFREEZE
+#define HAD_SIGFREEZE 1
"CPR freeze", "FREEZE", SIGFREEZE,
#endif
#ifdef SIGHUP
+#define HAD_SIGHUP 1
"Hangup", "HUP", SIGHUP,
#endif
#ifdef SIGILL
+#define HAD_SIGILL 1
"Illegal instruction", "ILL", SIGILL,
#endif
#ifdef SIGINT
+#define HAD_SIGINT 1
"Interrupt", "INT", SIGINT,
#endif
#ifdef SIGIO
+#define HAD_SIGIO 1
"IO possible", "IO", SIGIO,
#endif
#ifdef SIGIOT
+#define HAD_SIGIOT 1
"IOT trap", "IOT", SIGIOT,
#endif
#ifdef SIGKILL
+#define HAD_SIGKILL 1
"Killed", "KILL", SIGKILL,
#endif
#ifdef SIGLAB
+#define HAD_SIGLAB 1
"Security label changed", "LAB", SIGLAB,
#endif
#ifdef SIGLOST
+#define HAD_SIGLOST 1
"Resources lost", "LOST", SIGLOST,
#endif
#ifdef SIGLWP
+#define HAD_SIGLWP 1
"Thread event", "LWP", SIGLWP,
#endif
#ifdef SIGMIGRATE
+#define HAD_SIGMIGRATE 1
"Migrate process", "MIGRATE", SIGMIGRATE,
#endif
#ifdef SIGPHONE
+#define HAD_SIGPHONE 1
"Phone status change", "PHONE", SIGPHONE,
#endif
#ifdef SIGPIPE
+#define HAD_SIGPIPE 1
"Broken pipe", "PIPE", SIGPIPE,
#endif
#ifdef SIGPOLL
+#define HAD_SIGPOLL 1
"Poll event", "POLL", SIGPOLL,
#endif
#ifdef SIGPROF
+#define HAD_SIGPROF 1
"Profile timer alarm", "PROF", SIGPROF,
#endif
#ifdef SIGPWR
+#define HAD_SIGPWR 1
"Power fail", "PWR", SIGPWR,
#endif
#ifdef SIGQUIT
+#define HAD_SIGQUIT 1
"Quit", "QUIT", SIGQUIT,
#endif
#ifdef SIGSEGV
+#define HAD_SIGSEGV 1
"Memory fault", "SEGV", SIGSEGV,
#endif
#ifdef SIGSOUND
+#define HAD_SIGSOUND 1
"Sound completed", "SOUND", SIGSOUND,
#endif
#ifdef SIGSSTOP
+#define HAD_SIGSSTOP 1
"Sendable stop", "SSTOP", SIGSSTOP,
#endif
#ifdef gould
+#define HAD_gould 1
"Stack overflow", "STKOV", 28,
#endif
#ifdef SIGSTOP
+#define HAD_SIGSTOP 1
"Stopped (signal)", "STOP", SIGSTOP,
#endif
#ifdef SIGSYS
+#define HAD_SIGSYS 1
"Bad system call", "SYS", SIGSYS,
#endif
#ifdef SIGTERM
+#define HAD_SIGTERM 1
"Terminated", "TERM", SIGTERM,
#endif
#ifdef SIGTHAW
+#define HAD_SIGTHAW 1
"CPR thaw", "THAW", SIGTHAW,
#endif
#ifdef SIGTINT
+#define HAD_SIGTINT 1
"Interrupt (terminal)", "TINT", SIGTINT,
#endif
#ifdef SIGTRAP
+#define HAD_SIGTRAP 1
"Trace trap", "TRAP", SIGTRAP,
#endif
#ifdef SIGTSTP
+#define HAD_SIGTSTP 1
"Stopped", "TSTP", SIGTSTP,
#endif
#ifdef SIGTTIN
+#define HAD_SIGTTIN 1
"Stopped (tty input)", "TTIN", SIGTTIN,
#endif
#ifdef SIGTTOU
+#define HAD_SIGTTOU 1
"Stopped (tty output)", "TTOU", SIGTTOU,
#endif
#ifdef SIGURG
+#define HAD_SIGURG 1
"Urgent IO", "URG", SIGURG,
#endif
#ifdef SIGUSR1
+#define HAD_SIGUSR1 1
"User signal 1", "USR1", SIGUSR1,
#endif
#ifdef SIGUSR2
+#define HAD_SIGUSR2 1
"User signal 2", "USR2", SIGUSR2,
#endif
#ifdef SIGVTALRM
+#define HAD_SIGVTALRM 1
"Virtual timer alarm", "VTALRM", SIGVTALRM,
#endif
#ifdef SIGWAITING
+#define HAD_SIGWAITING 1
"All threads blocked", "WAITING", SIGWAITING,
#endif
#ifdef SIGWINCH
+#define HAD_SIGWINCH 1
"Window change", "WINCH", SIGWINCH,
#endif
#ifdef SIGWIND
+#define HAD_SIGWIND 1
"Window change", "WIND", SIGWIND,
#endif
#ifdef SIGWINDOW
+#define HAD_SIGWINDOW 1
"Window change", "WINDOW", SIGWINDOW,
#endif
#ifdef SIGXCPU
+#define HAD_SIGXCPU 1
"CPU time limit", "XCPU", SIGXCPU,
#endif
#ifdef SIGXFSZ
+#define HAD_SIGXFSZ 1
"File size limit", "XFSZ", SIGXFSZ,
#endif
+#include "FEATURE/siglist"
0
};
@@ -214,7 +276,11 @@
#define RANGE_SIG (~(RANGE_MIN|RANGE_MAX|RANGE_RT))
-static int index[64];
+static int mapindex[1024];
+
+#if _lib_strsignal
+extern char* strsignal(int);
+#endif
int
main()
@@ -223,13 +289,17 @@
register int j;
register int k;
int n;
+#if _lib_strsignal
+ char* s;
+#endif
k = 0;
for (i = 0; map[i].name; i++)
- if ((j = map[i].value) > 0 && j < elementsof(index) && !index[j])
+ if ((j = map[i].value) > 0 && j < elementsof(mapindex) && !mapindex[j])
{
- if (j > k) k = j;
- index[j] = i;
+ if (j > k)
+ k = j;
+ mapindex[j] = i;
}
#ifdef SIGRTMIN
i = SIGRTMIN;
@@ -238,15 +308,17 @@
#else
j = i;
#endif
- if (j >= elementsof(index)) j = elementsof(index) - 1;
- if (i <= j && i > 0 && i < elementsof(index) && j > 0 && j < elementsof(index))
+ if (j >= elementsof(mapindex))
+ j = elementsof(mapindex) - 1;
+ if (i <= j && i > 0 && i < elementsof(mapindex) && j > 0 && j < elementsof(mapindex))
{
- if (j > k) k = j;
- index[i] = RANGE_MIN | RANGE_RT;
+ if (j > k)
+ k = j;
+ mapindex[i] = RANGE_MIN | RANGE_RT;
n = 1;
while (++i < j)
- index[i] = RANGE_RT | n++;
- index[j] = RANGE_MAX | RANGE_RT | n;
+ mapindex[i] = RANGE_RT | n++;
+ mapindex[j] = RANGE_MAX | RANGE_RT | n;
}
#endif
printf("#pragma prototyped\n");
@@ -255,23 +327,37 @@
printf("static const char* const sig_name[] =\n");
printf("{\n");
for (i = 0; i <= k; i++)
- if (!(j = index[i])) printf(" \"%d\",\n", i);
+ if (!(j = mapindex[i]))
+ printf(" \"%d\",\n", i);
else if (j & RANGE_RT)
{
- if (j & RANGE_MIN) printf(" \"RTMIN\",\n");
- else if (j & RANGE_MAX) printf(" \"RTMAX\",\n");
- else printf(" \"RT%d\",\n", j & RANGE_SIG);
+ if (j & RANGE_MIN)
+ printf(" \"RTMIN\",\n");
+ else if (j & RANGE_MAX)
+ printf(" \"RTMAX\",\n");
+ else
+ printf(" \"RT%d\",\n", j & RANGE_SIG);
}
- else printf(" \"%s\",\n", map[j].name);
+ else
+ printf(" \"%s\",\n", map[j].name);
printf(" 0\n");
printf("};\n");
printf("\n");
printf("static const char* const sig_text[] =\n");
printf("{\n");
for (i = 0; i <= k; i++)
- if (!(j = index[i])) printf(" \"Signal %d\",\n", i);
- else if (j & RANGE_RT) printf(" \"Realtime priority %d%s\",\n", j & RANGE_SIG, (j & RANGE_MIN) ? " (lo)" : (j & RANGE_MAX) ? " (hi)" : "");
- else printf(" \"%s\",\n", map[j].text);
+ if (!(j = mapindex[i]))
+ printf(" \"Signal %d\",\n", i);
+ else if (j & RANGE_RT)
+ printf(" \"Realtime priority %d%s\",\n", j & RANGE_SIG, (j & RANGE_MIN) ? " (lo)" : (j & RANGE_MAX) ? " (hi)" : "");
+ else if (map[j].text)
+ printf(" \"%s\",\n", map[j].text);
+#if _lib_strsignal
+ else if (s = strsignal(i))
+ printf(" \"%s\",\n", s);
+#endif
+ else
+ printf(" \"Signal %d\",\n", i);
printf(" 0\n");
printf("};\n");
return 0;
diff -r -N -u ksh93_2007_04_18/src/lib/libast/include/cmdarg.h ksh93_2007_05_15/src/lib/libast/include/cmdarg.h
--- ksh93_2007_04_18/src/lib/libast/include/cmdarg.h 1970-01-01 01:00:00.000000000 +0100
+++ ksh93_2007_05_15/src/lib/libast/include/cmdarg.h 2007-04-24 21:53:36.000000000 +0200
@@ -0,0 +1,84 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1985-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 *
+* *
+* Glenn Fowler <gsf at research.att.com> *
+* David Korn <dgk at research.att.com> *
+* Phong Vo <kpv at research.att.com> *
+* *
+***********************************************************************/
+#pragma prototyped
+/*
+ * Glenn Fowler
+ * AT&T Research
+ *
+ * xargs/tw command arg list interface definitions
+ */
+
+#ifndef _CMDARG_H
+#define _CMDARG_H
+
+#define CMD_CHECKED (1<<9) /* cmdopen() argv[0] ok */
+#define CMD_EMPTY (1<<0) /* run once, even if no args */
+#define CMD_EXACT (1<<1) /* last command must have argmax*/
+#define CMD_IGNORE (1<<2) /* ignore EXIT_QUIT exit */
+#define CMD_INSERT (1<<3) /* argpat for insertion */
+#define CMD_MINIMUM (1<<4) /* argmax is a minimum */
+#define CMD_NEWLINE (1<<5) /* echo separator is newline */
+#define CMD_POST (1<<6) /* argpat is post arg position */
+#define CMD_QUERY (1<<7) /* trace and query each command */
+#define CMD_SILENT (1<<10) /* no error messages */
+#define CMD_TRACE (1<<8) /* trace each command */
+
+#define CMD_USER (1<<12)
+
+typedef struct /* cmd + args info */
+{
+ struct
+ {
+ size_t args; /* total args */
+ size_t commands; /* total commands */
+ } total;
+
+ int argcount; /* current arg count */
+ int argmax; /* max # args */
+ int echo; /* just an echo */
+ int flags; /* CMD_* flags */
+ int insertlen; /* strlen(insert) */
+ int offset; /* post arg offset */
+
+ char** argv; /* exec argv */
+ char** firstarg; /* first argv file arg */
+ char** insertarg; /* argv before insert */
+ char** postarg; /* start of post arg list */
+ char** nextarg; /* next argv file arg */
+ char* nextstr; /* next string ends before here */
+ char* laststr; /* last string ends before here */
+ char* insert; /* replace with current arg */
+ char buf[1]; /* argv and arg buffer */
+} Cmdarg_t;
+
+#if _BLD_ast && defined(__EXPORT__)
+#define extern __EXPORT__
+#endif
+
+extern Cmdarg_t* cmdopen(char**, int, int, const char*, int);
+extern int cmdflush(Cmdarg_t*);
+extern int cmdarg(Cmdarg_t*, const char*, int);
+extern int cmdclose(Cmdarg_t*);
+
+#undef extern
+
+#endif
diff -r -N -u ksh93_2007_04_18/src/lib/libast/include/fts.h ksh93_2007_05_15/src/lib/libast/include/fts.h
--- ksh93_2007_04_18/src/lib/libast/include/fts.h 1999-10-11 09:31:30.000000000 +0200
+++ ksh93_2007_05_15/src/lib/libast/include/fts.h 2007-04-24 18:50:44.000000000 +0200
@@ -118,6 +118,10 @@
#ifdef _FTSENT_PRIVATE_
_FTSENT_PRIVATE_
+#else
+ short _fts_pad_1; /* <ftwalk.h> compatibility */
+ struct stat _fts_pad_2; /* <ftwalk.h> compatibility */
+ FTS* fts; /* fts_open() handle */
#endif
};
@@ -125,6 +129,7 @@
struct Fts
{
int fts_errno; /* last errno */
+ void* fts_handle; /* user defined handle */
#ifdef _FTS_PRIVATE_
_FTS_PRIVATE_
@@ -139,6 +144,7 @@
extern FTSENT* fts_children(FTS*, int);
extern int fts_close(FTS*);
extern int fts_flags(void);
+extern int fts_local(FTSENT*);
extern int fts_notify(int(*)(FTS*, FTSENT*, void*), void*);
extern FTS* fts_open(char* const*, int, int(*)(FTSENT* const*, FTSENT* const*));
extern FTSENT* fts_read(FTS*);
diff -r -N -u ksh93_2007_04_18/src/lib/libast/include/option.h ksh93_2007_05_15/src/lib/libast/include/option.h
--- ksh93_2007_04_18/src/lib/libast/include/option.h 2007-03-22 23:14:38.000000000 +0100
+++ ksh93_2007_05_15/src/lib/libast/include/option.h 2007-04-25 19:24:44.000000000 +0200
@@ -99,6 +99,7 @@
extern char* optusage(const char*);
extern int optstr(const char*, const char*);
extern int optesc(Sfio_t*, const char*, int);
+extern Opt_t* optctx(Opt_t*, Opt_t*);
#undef extern
diff -r -N -u ksh93_2007_04_18/src/lib/libast/include/proc.h ksh93_2007_05_15/src/lib/libast/include/proc.h
--- ksh93_2007_04_18/src/lib/libast/include/proc.h 1998-04-13 21:03:07.000000000 +0200
+++ ksh93_2007_05_15/src/lib/libast/include/proc.h 2007-04-24 21:34:24.000000000 +0200
@@ -32,12 +32,14 @@
#define PROC_ARGMOD (1<<0) /* argv[-1],argv[0] can be modified */
#define PROC_BACKGROUND (1<<1) /* shell background (&) setup */
+#define PROC_CHECK (1<<17) /* check that command exists */
#define PROC_CLEANUP (1<<2) /* close parent redirect fds on error */
#define PROC_DAEMON (1<<3) /* daemon setup */
#define PROC_ENVCLEAR (1<<4) /* clear environment */
#define PROC_FOREGROUND (1<<14) /* system(3) setup */
#define PROC_GID (1<<5) /* setgid(getgid()) */
#define PROC_IGNORE (1<<6) /* ignore parent pipe errors */
+#define PROC_IGNOREPATH (1<<16) /* procrun() intercept to ignore path */
#define PROC_OVERLAY (1<<7) /* overlay current process if possible */
#define PROC_PARANOID (1<<8) /* restrict everything */
#define PROC_PRIVELEGED (1<<9) /* setuid(0), setgid(getegid()) */
@@ -94,8 +96,8 @@
extern int procclose(Proc_t*);
extern int procfree(Proc_t*);
-extern Proc_t* procopen(const char*, char**, char**, long*, long);
-extern int procrun(const char*, char**);
+extern Proc_t* procopen(const char*, char**, char**, long*, int);
+extern int procrun(const char*, char**, int);
#undef extern
diff -r -N -u ksh93_2007_04_18/src/lib/libast/Makefile ksh93_2007_05_15/src/lib/libast/Makefile
--- ksh93_2007_04_18/src/lib/libast/Makefile 2007-03-22 18:27:48.000000000 +0100
+++ ksh93_2007_05_15/src/lib/libast/Makefile 2007-04-25 19:54:20.000000000 +0200
@@ -28,11 +28,11 @@
__OBSOLETE__ == $("6 months ago":@F=%(%Y0101)T)
HEADERSRC = ast.h ast_dir.h ast_getopt.h ast_std.h \
- ast_version.h ast_windows.h \
- ccode.h cdt.h debug.h dt.h error.h find.h ftw.h ftwalk.h fts.h \
- fs3d.h getopt.h glob.h hash.h hashkey.h hashpart.h lc.h ls.h \
- magic.h mc.h mime.h mnt.h modecanon.h modex.h namval.h option.h \
- proc.h re_comp.h recfmt.h regex.h regexp.h \
+ ast_namval.h ast_version.h ast_windows.h \
+ ccode.h cdt.h cmdarg.h debug.h dt.h error.h find.h ftw.h ftwalk.h \
+ fts.h fs3d.h getopt.h glob.h hash.h hashkey.h hashpart.h lc.h \
+ ls.h magic.h mc.h mime.h mnt.h modecanon.h modex.h namval.h \
+ option.h proc.h re_comp.h recfmt.h regex.h regexp.h \
sfio.h sfio_s.h sfio_t.h sfdisc.h \
stack.h stak.h stk.h swap.h tar.h times.h tm.h tok.h \
usage.h vdb.h vecargs.h vmalloc.h wait.h wordexp.h \
@@ -79,11 +79,11 @@
pathnative.c pathposix.c pathtemp.c pathtmp.c pathstat.c \
pathgetlink.c pathsetlink.c pathbin.c pathshell.c pathcd.c \
fs3d.c ftwalk.c ftwflags.c fts.c setenviron.c \
- optget.c optjoin.c optesc.c strsort.c struniq.c \
+ optget.c optjoin.c optesc.c optctx.c strsort.c struniq.c \
magic.c mime.c mimetype.c signal.c systrace.c \
error.c errorf.c errormsg.c errorx.c \
localeconv.c setlocale.c translate.c \
- catopen.c iconv.c lc.c mc.c \
+ catopen.c iconv.c lc.c lctab.c mc.c \
base64.c recfmt.c recstr.c reclen.c fmtrec.c \
fmtbase.c fmtbuf.c fmtclock.c fmtdev.c fmtelapsed.c fmterror.c \
fmtesc.c fmtfmt.c fmtfs.c fmtident.c fmtip4.c fmtls.c fmtmatch.c \
@@ -99,7 +99,7 @@
tmxdate.c tmxfmt.c tmxgettime.c tmxleap.c tmxmake.c \
tmxscan.c tmxsettime.c tmxsleep.c tmxtime.c tmxtouch.c \
tvcmp.c tvgettime.c tvsettime.c tvsleep.c tvtouch.c \
- vecargs.c vecfile.c vecfree.c vecload.c vecstring.c \
+ cmdarg.c vecargs.c vecfile.c vecfree.c vecload.c vecstring.c \
univlib.h univdata.c touch.c mnt.c \
memccpy.c memchr.c memcmp.c memcpy.c memdup.c memmove.c memset.c \
mkdir.c mkfifo.c mknod.c rmdir.c remove.c rename.c link.c unlink.c \
@@ -226,7 +226,7 @@
* NOTE: sun4 runtime link botches ro data so advertized sig_info is rw
*/
-:READONLY: conftab.c modedata.c /*sftable.c*/ \
+:READONLY: conftab.c lctab.c modedata.c /*sftable.c*/ \
/*sigdata.c*/ tmdata.c univdata.c
:: atmain.C \
@@ -246,10 +246,12 @@
$(HEADERGEN) :COPY: FEATURE/$$(<:B:/$(ID)_//)
+ast_namval.h :COPY: namval.h
+
lcgen : lcgen.c
$(CC.NATIVE|CC) -o $(<) $(*)
-lc.h lctab.h :JOINT: lcgen lc.tab
+lc.h lctab.c :JOINT: lcgen lc.tab
$(*:O=1:C,^[^/],./&,) $(tmp).1 $(tmp).2 < $(*:O=2) # :P=E: in 2006
$(PROTO) -p $(PROTOFLAGS) $(tmp).1 $(PROTOINSTALL) > $(tmp).3
$(RM) -f $(tmp).1
diff -r -N -u ksh93_2007_04_18/src/lib/libast/Mamfile ksh93_2007_05_15/src/lib/libast/Mamfile
--- ksh93_2007_04_18/src/lib/libast/Mamfile 2007-04-18 20:07:32.000000000 +0200
+++ ksh93_2007_05_15/src/lib/libast/Mamfile 2007-05-16 05:16:04.000000000 +0200
@@ -924,16 +924,16 @@
exec - then rm ${COTEMP}.3
exec - else mv ${COTEMP}.3 lc.h
exec - fi
-exec - if cmp 2>/dev/null -s ${COTEMP}.2 lctab.h
+exec - if cmp 2>/dev/null -s ${COTEMP}.2 lctab.c
exec - then rm ${COTEMP}.2
-exec - else mv ${COTEMP}.2 lctab.h
+exec - else mv ${COTEMP}.2 lctab.c
exec - fi
prev include/ast.h implicit
make ${INSTALLROOT}/include/prototyped.h implicit
done ${INSTALLROOT}/include/prototyped.h dontcare
done lc.h dontcare generated
-make lctab.h
-done lctab.h generated
+make lctab.c
+done lctab.c generated
done joint.lc.h virtual
prev include/error.h implicit
prev include/ast.h implicit
@@ -1124,6 +1124,7 @@
make fts.o
make misc/fts.c
prev include/fts.h implicit
+prev include/ls.h implicit
prev include/fs3d.h implicit
prev include/error.h implicit
prev include/ast_dir.h implicit
@@ -1175,6 +1176,14 @@
prev misc/optesc.c
exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Imisc -Iinclude -Istd -D_PACKAGE_ast -c misc/optesc.c
done optesc.o generated
+make optctx.o
+make misc/optctx.c
+prev misc/optlib.h implicit
+done misc/optctx.c
+meta optctx.o %.c>%.o misc/optctx.c optctx
+prev misc/optctx.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Imisc -Iinclude -Istd -D_PACKAGE_ast -c misc/optctx.c
+done optctx.o generated
make strsort.o
make string/strsort.c
prev include/ast.h implicit
@@ -1271,7 +1280,6 @@
done systrace.o generated
make error.o
make misc/error.c
-prev include/error.h implicit
prev include/regex.h implicit
prev include/times.h implicit
prev include/stk.h implicit
@@ -1283,7 +1291,7 @@
done misc/error.c
meta error.o %.c>%.o misc/error.c error
prev misc/error.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iport -Iinclude -Istd -I${INSTALLROOT}/include -D_PACKAGE_ast -DERROR_CATALOG=\""libast"\" -c misc/error.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iport -Iinclude -Istd -I${INSTALLROOT}/include -DERROR_CATALOG=\""libast"\" -D_PACKAGE_ast -c misc/error.c
done error.o generated
make errorf.o
make misc/errorf.c
@@ -1393,15 +1401,24 @@
done iconv.o generated
make lc.o
make port/lc.c
-make lctab.h implicit
-done lctab.h
+make port/lclang.h implicit
prev include/ast_windows.h implicit
+done port/lclang.h
prev port/lclib.h implicit
done port/lc.c
meta lc.o %.c>%.o port/lc.c lc
prev port/lc.c
exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iport -Iinclude -Istd -I${INSTALLROOT}/include -D_PACKAGE_ast -c port/lc.c
done lc.o generated
+make lctab.o
+make lctab.c
+prev port/lclang.h implicit
+prev port/lclib.h implicit
+done lctab.c
+meta lctab.o %.c>%.o lctab.c lctab
+prev lctab.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iport -Iinclude -Istd -I${INSTALLROOT}/include -D_PACKAGE_ast -c lctab.c
+done lctab.o generated
make mc.o
make port/mc.c
prev std/nl_types.h implicit
@@ -1862,9 +1879,17 @@
make FEATURE/signal implicit
meta FEATURE/signal features/%.c>FEATURE/% features/signal.c signal
make features/signal.c
+make FEATURE/siglist implicit
+meta FEATURE/siglist features/%>FEATURE/% features/siglist siglist
+make features/siglist
+done features/siglist
+prev ast.req
+exec - iffe -v -X ast -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' run features/siglist
+done FEATURE/siglist generated
+prev FEATURE/standards implicit
done features/signal.c
prev ast.req
-exec - iffe -v -X ast -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' run features/signal.c
+exec - iffe -v -X ast -X std -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. ${LDFLAGS} ' run features/signal.c
done FEATURE/signal generated
prev sig.h implicit
prev include/ast.h implicit
@@ -1932,7 +1957,7 @@
done misc/procrun.c
meta procrun.o %.c>%.o misc/procrun.c procrun
prev misc/procrun.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Imisc -Iinclude -Istd -D_PACKAGE_ast -c misc/procrun.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Imisc -Iinclude -Istd -D__OBSOLETE__=20060101 -D_PACKAGE_ast -c misc/procrun.c
done procrun.o generated
make procfree.o
make misc/procfree.c
@@ -2263,6 +2288,18 @@
prev tm/tvtouch.c
exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -D_PACKAGE_ast -c tm/tvtouch.c
done tvtouch.o generated
+make cmdarg.o
+make misc/cmdarg.c
+make include/cmdarg.h implicit
+done include/cmdarg.h
+prev include/proc.h implicit
+prev include/error.h implicit
+prev include/ast.h implicit
+done misc/cmdarg.c
+meta cmdarg.o %.c>%.o misc/cmdarg.c cmdarg
+prev misc/cmdarg.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -D_PACKAGE_ast -c misc/cmdarg.c
+done cmdarg.o generated
make vecargs.o
make vec/vecargs.c
make include/vecargs.h implicit
@@ -3263,7 +3300,10 @@
make comp/closelog.c
make comp/sysloglib.h implicit
make comp/syslog.h implicit
-prev include/namval.h implicit
+make ast_namval.h implicit
+prev include/namval.h
+exec - cmp 2>/dev/null -s include/namval.h ast_namval.h || { rm -f ast_namval.h; silent test -d . || mkdir .; ${STDCP} include/namval.h ast_namval.h; }
+done ast_namval.h dontcare generated
done comp/syslog.h dontcare
done comp/sysloglib.h dontcare
prev include/ast.h implicit
@@ -5755,12 +5795,12 @@
exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -D_PACKAGE_ast -c obsolete/spawn.c
done spawn.o generated
exec - ${AR} cr libast.a state.o transition.o opendir.o readdir.o rewinddir.o seekdir.o telldir.o getcwd.o fastfind.o hashalloc.o hashdump.o hashfree.o hashlast.o hashlook.o hashscan.o hashsize.o hashview.o hashwalk.o memhash.o memsum.o strhash.o strkey.o strsum.o stracmp.o strnacmp.o ccmap.o ccmapid.o ccnative.o chresc.o chrtoi.o
-exec - ${AR} cr libast.a streval.o strexpr.o strmatch.o strcopy.o modei.o modex.o strmode.o strlcat.o strlcpy.o strlook.o strncopy.o strsearch.o strpsearch.o stresc.o stropt.o strtape.o tok.o tokline.o tokscan.o pathaccess.o pathcat.o pathcanon.o pathcheck.o pathpath.o pathexists.o pathfind.o pathkey.o pathprobe.o pathrepl.o pathnative.o pathposix.o pathtemp.o pathtmp.o pathstat.o pathgetlink.o pathsetlink.o pathbin.o pathshell.o pathcd.o fs3d.o ftwalk.o ftwflags.o fts.o setenviron.o optget.o optjoin.o optesc.o strsort.o struniq.o magic.o mime.o mimetype.o signal.o systrace.o error.o errorf.o errormsg.o errorx.o localeconv.o setlocale.o translate.o catopen.o iconv.o lc.o mc.o base64.o recfmt.o recstr.o reclen.o fmtrec.o fmtbase.o fmtbuf.o fmtclock.o fmtdev.o fmtelapsed.o fmterror.o fmtesc.o fmtfmt.o fmtfs.o fmtident.o fmtip4.o fmtls.o fmtmatch.o fmtmode.o fmtnum.o fmtperm.o fmtre.o fmttime.o fmtuid.o fmtgid.o fmtsignal.o fmtscale.o fmttmx.o fmttv.o fmtversion.o strelapsed.o strperm.o struid.o strgid.o strtoip4.o stack.o
-exec - ${AR} cr libast.a stk.o swapget.o swapmem.o swapop.o swapput.o sigdata.o sigcrit.o sigunblock.o procopen.o procclose.o procrun.o procfree.o tmdate.o tmequiv.o tmfix.o tmfmt.o tmform.o tmgoff.o tminit.o tmleap.o tmlex.o tmlocale.o tmmake.o tmpoff.o tmscan.o tmsleep.o tmtime.o tmtype.o tmweek.o tmword.o tmzone.o tmxdate.o tmxfmt.o tmxgettime.o tmxleap.o tmxmake.o tmxscan.o tmxsettime.o tmxsleep.o tmxtime.o tmxtouch.o tvcmp.o tvgettime.o tvsettime.o tvsleep.o tvtouch.o vecargs.o vecfile.o vecfree.o vecload.o vecstring.o univdata.o touch.o mnt.o memccpy.o memchr.o memcmp.o memcpy.o memdup.o memmove.o memset.o mkdir.o mkfifo.o mknod.o rmdir.o remove.o rename.o link.o unlink.o strdup.o strchr.o strrchr.o strstr.o strtod.o strtold.o strtol.o strtoll.o strtoul.o strtoull.o strton.o strtonll.o strntod.o strntold.o strntol.o strntoll.o strntoul.o strntoull.o strcasecmp.o strncasecmp.o strerror.o mktemp.o tmpnam.o fsync.o execlp.o execve.o execvp.o execvpe.o spawnveg.o vfork.o killpg.o hsearch.o
-exec - ${AR} cr libast.a tsearch.o getlogin.o putenv.o setenv.o unsetenv.o lstat.o statvfs.o eaccess.o gross.o omitted.o readlink.o symlink.o getpgrp.o setpgid.o setsid.o waitpid.o creat64.o fcntl.o open.o atexit.o getdents.o getwd.o dup2.o errno.o getpreroot.o ispreroot.o realopen.o setpreroot.o getgroups.o mount.o system.o iblocks.o modedata.o tmdata.o memfatal.o sfkeyprintf.o sfdcdio.o sfdcdos.o sfdcfilter.o sfdcseekable.o sfdcslow.o sfdcsubstr.o sfdctee.o sfdcunion.o sfdcmore.o sfdcprefix.o wc.o basename.o closelog.o dirname.o fmtmsglib.o fnmatch.o ftw.o getdate.o getsubopt.o glob.o nftw.o openlog.o re_comp.o resolvepath.o realpath.o regcmp.o regexp.o setlogmask.o strftime.o strptime.o swab.o syslog.o tempnam.o wordexp.o mktime.o regalloc.o regclass.o regcoll.o regcomp.o regcache.o regdecomp.o regerror.o regexec.o regfatal.o reginit.o regnexec.o regsubcomp.o regsubexec.o regsub.o regrecord.o regrexec.o regstat.o dtclose.o dtdisc.o dtextract.o dtflatten.o dthash.o dtlist.o dtmethod.o dtnew.o dtopen.o dtrenew.o dtrestore.o dtsize.o dtstat.o
-exec - ${AR} cr libast.a dtstrhash.o dttree.o dttreeset.o dtview.o dtwalk.o sfclose.o sfclrlock.o sfdisc.o sfdlen.o sfexcept.o sfgetl.o sfgetu.o sfcvt.o sfecvt.o sffcvt.o sfextern.o sffilbuf.o sfflsbuf.o sfprints.o sfgetd.o sfgetr.o sfllen.o sfmode.o sfmove.o sfnew.o sfpkrd.o sfnotify.o sfnputc.o sfopen.o sfpeek.o sfpoll.o sfpool.o sfpopen.o sfprintf.o sfputd.o sfputl.o sfputr.o sfputu.o sfrd.o sfread.o sfreserve.o sfscanf.o sfseek.o sfset.o sfsetbuf.o sfsetfd.o sfsize.o sfsk.o sfstack.o sfstrtod.o sfsync.o sfswap.o sftable.o sftell.o sftmp.o sfungetc.o sfvprintf.o sfvscanf.o sfwr.o sfwrite.o sfpurge.o sfraise.o sfgetm.o sfmutex.o sfputm.o sfresize.o _sfclrerr.o _sfeof.o _sferror.o _sffileno.o _sfopen.o _sfstacked.o _sfvalue.o _sfgetc.o _sfgetl.o _sfgetl2.o _sfgetu.o _sfgetu2.o _sfdlen.o _sfllen.o _sfslen.o _sfulen.o _sfputc.o _sfputd.o _sfputl.o _sfputm.o _sfputu.o clearerr.o fclose.o fdopen.o feof.o ferror.o fflush.o fgetc.o fgetpos.o fgets.o fileno.o fopen.o fprintf.o fpurge.o fputc.o
-exec - ${AR} cr libast.a fputs.o fread.o freopen.o fscanf.o fseek.o fseeko.o fsetpos.o ftell.o ftello.o fwrite.o getc.o getchar.o getw.o pclose.o popen.o printf.o putc.o putchar.o puts.o putw.o rewind.o scanf.o setbuf.o setbuffer.o setlinebuf.o setvbuf.o snprintf.o sprintf.o sscanf.o asprintf.o vasprintf.o tmpfile.o ungetc.o vfprintf.o vfscanf.o vprintf.o vscanf.o vsnprintf.o vsprintf.o vsscanf.o _doprnt.o _doscan.o _filbuf.o _flsbuf.o _stdfun.o _stdopen.o _stdprintf.o _stdscanf.o _stdsprnt.o _stdvbuf.o _stdvsnprnt.o _stdvsprnt.o _stdvsscn.o fgetwc.o fwprintf.o putwchar.o vfwscanf.o wprintf.o fgetws.o fwscanf.o swprintf.o vswprintf.o wscanf.o fputwc.o getwc.o swscanf.o vswscanf.o fputws.o getwchar.o ungetwc.o vwprintf.o fwide.o putwc.o vfwprintf.o vwscanf.o stdio_c99.o stdio_gnu.o frexp.o frexpl.o astcopy.o astconf.o astdynamic.o astlicense.o astquery.o astwinsize.o conftab.o aststatic.o getopt.o getoptl.o vmbest.o vmclear.o vmclose.o vmdcheap.o vmdebug.o vmdisc.o vmexit.o vmlast.o vmopen.o vmpool.o vmprivate.o vmprofile.o
-exec - ${AR} cr libast.a vmregion.o vmsegment.o vmset.o vmstat.o vmstrdup.o vmtrace.o vmwalk.o vmmopen.o malloc.o vmgetmem.o a64l.o acosh.o asinh.o atanh.o cbrt.o crypt.o erf.o err.o exp.o exp__E.o expm1.o gamma.o getpass.o lgamma.o log.o log1p.o log__L.o rand48.o random.o rcmd.o rint.o support.o sfstrtmp.o spawn.o
+exec - ${AR} cr libast.a streval.o strexpr.o strmatch.o strcopy.o modei.o modex.o strmode.o strlcat.o strlcpy.o strlook.o strncopy.o strsearch.o strpsearch.o stresc.o stropt.o strtape.o tok.o tokline.o tokscan.o pathaccess.o pathcat.o pathcanon.o pathcheck.o pathpath.o pathexists.o pathfind.o pathkey.o pathprobe.o pathrepl.o pathnative.o pathposix.o pathtemp.o pathtmp.o pathstat.o pathgetlink.o pathsetlink.o pathbin.o pathshell.o pathcd.o fs3d.o ftwalk.o ftwflags.o fts.o setenviron.o optget.o optjoin.o optesc.o optctx.o strsort.o struniq.o magic.o mime.o mimetype.o signal.o systrace.o error.o errorf.o errormsg.o errorx.o localeconv.o setlocale.o translate.o catopen.o iconv.o lc.o lctab.o mc.o base64.o recfmt.o recstr.o reclen.o fmtrec.o fmtbase.o fmtbuf.o fmtclock.o fmtdev.o fmtelapsed.o fmterror.o fmtesc.o fmtfmt.o fmtfs.o fmtident.o fmtip4.o fmtls.o fmtmatch.o fmtmode.o fmtnum.o fmtperm.o fmtre.o fmttime.o fmtuid.o fmtgid.o fmtsignal.o fmtscale.o fmttmx.o fmttv.o fmtversion.o strelapsed.o strperm.o struid.o strgid.o
+exec - ${AR} cr libast.a strtoip4.o stack.o stk.o swapget.o swapmem.o swapop.o swapput.o sigdata.o sigcrit.o sigunblock.o procopen.o procclose.o procrun.o procfree.o tmdate.o tmequiv.o tmfix.o tmfmt.o tmform.o tmgoff.o tminit.o tmleap.o tmlex.o tmlocale.o tmmake.o tmpoff.o tmscan.o tmsleep.o tmtime.o tmtype.o tmweek.o tmword.o tmzone.o tmxdate.o tmxfmt.o tmxgettime.o tmxleap.o tmxmake.o tmxscan.o tmxsettime.o tmxsleep.o tmxtime.o tmxtouch.o tvcmp.o tvgettime.o tvsettime.o tvsleep.o tvtouch.o cmdarg.o vecargs.o vecfile.o vecfree.o vecload.o vecstring.o univdata.o touch.o mnt.o memccpy.o memchr.o memcmp.o memcpy.o memdup.o memmove.o memset.o mkdir.o mkfifo.o mknod.o rmdir.o remove.o rename.o link.o unlink.o strdup.o strchr.o strrchr.o strstr.o strtod.o strtold.o strtol.o strtoll.o strtoul.o strtoull.o strton.o strtonll.o strntod.o strntold.o strntol.o strntoll.o strntoul.o strntoull.o strcasecmp.o strncasecmp.o strerror.o mktemp.o tmpnam.o fsync.o execlp.o execve.o execvp.o execvpe.o spawnveg.o
+exec - ${AR} cr libast.a vfork.o killpg.o hsearch.o tsearch.o getlogin.o putenv.o setenv.o unsetenv.o lstat.o statvfs.o eaccess.o gross.o omitted.o readlink.o symlink.o getpgrp.o setpgid.o setsid.o waitpid.o creat64.o fcntl.o open.o atexit.o getdents.o getwd.o dup2.o errno.o getpreroot.o ispreroot.o realopen.o setpreroot.o getgroups.o mount.o system.o iblocks.o modedata.o tmdata.o memfatal.o sfkeyprintf.o sfdcdio.o sfdcdos.o sfdcfilter.o sfdcseekable.o sfdcslow.o sfdcsubstr.o sfdctee.o sfdcunion.o sfdcmore.o sfdcprefix.o wc.o basename.o closelog.o dirname.o fmtmsglib.o fnmatch.o ftw.o getdate.o getsubopt.o glob.o nftw.o openlog.o re_comp.o resolvepath.o realpath.o regcmp.o regexp.o setlogmask.o strftime.o strptime.o swab.o syslog.o tempnam.o wordexp.o mktime.o regalloc.o regclass.o regcoll.o regcomp.o regcache.o regdecomp.o regerror.o regexec.o regfatal.o reginit.o regnexec.o regsubcomp.o regsubexec.o regsub.o regrecord.o regrexec.o regstat.o dtclose.o dtdisc.o dtextract.o dtflatten.o dthash.o dtlist.o dtmethod.o dtnew.o dtopen.o dtrenew.o
+exec - ${AR} cr libast.a dtrestore.o dtsize.o dtstat.o dtstrhash.o dttree.o dttreeset.o dtview.o dtwalk.o sfclose.o sfclrlock.o sfdisc.o sfdlen.o sfexcept.o sfgetl.o sfgetu.o sfcvt.o sfecvt.o sffcvt.o sfextern.o sffilbuf.o sfflsbuf.o sfprints.o sfgetd.o sfgetr.o sfllen.o sfmode.o sfmove.o sfnew.o sfpkrd.o sfnotify.o sfnputc.o sfopen.o sfpeek.o sfpoll.o sfpool.o sfpopen.o sfprintf.o sfputd.o sfputl.o sfputr.o sfputu.o sfrd.o sfread.o sfreserve.o sfscanf.o sfseek.o sfset.o sfsetbuf.o sfsetfd.o sfsize.o sfsk.o sfstack.o sfstrtod.o sfsync.o sfswap.o sftable.o sftell.o sftmp.o sfungetc.o sfvprintf.o sfvscanf.o sfwr.o sfwrite.o sfpurge.o sfraise.o sfgetm.o sfmutex.o sfputm.o sfresize.o _sfclrerr.o _sfeof.o _sferror.o _sffileno.o _sfopen.o _sfstacked.o _sfvalue.o _sfgetc.o _sfgetl.o _sfgetl2.o _sfgetu.o _sfgetu2.o _sfdlen.o _sfllen.o _sfslen.o _sfulen.o _sfputc.o _sfputd.o _sfputl.o _sfputm.o _sfputu.o clearerr.o fclose.o fdopen.o feof.o ferror.o fflush.o fgetc.o fgetpos.o fgets.o fileno.o fopen.o
+exec - ${AR} cr libast.a fprintf.o fpurge.o fputc.o fputs.o fread.o freopen.o fscanf.o fseek.o fseeko.o fsetpos.o ftell.o ftello.o fwrite.o getc.o getchar.o getw.o pclose.o popen.o printf.o putc.o putchar.o puts.o putw.o rewind.o scanf.o setbuf.o setbuffer.o setlinebuf.o setvbuf.o snprintf.o sprintf.o sscanf.o asprintf.o vasprintf.o tmpfile.o ungetc.o vfprintf.o vfscanf.o vprintf.o vscanf.o vsnprintf.o vsprintf.o vsscanf.o _doprnt.o _doscan.o _filbuf.o _flsbuf.o _stdfun.o _stdopen.o _stdprintf.o _stdscanf.o _stdsprnt.o _stdvbuf.o _stdvsnprnt.o _stdvsprnt.o _stdvsscn.o fgetwc.o fwprintf.o putwchar.o vfwscanf.o wprintf.o fgetws.o fwscanf.o swprintf.o vswprintf.o wscanf.o fputwc.o getwc.o swscanf.o vswscanf.o fputws.o getwchar.o ungetwc.o vwprintf.o fwide.o putwc.o vfwprintf.o vwscanf.o stdio_c99.o stdio_gnu.o frexp.o frexpl.o astcopy.o astconf.o astdynamic.o astlicense.o astquery.o astwinsize.o conftab.o aststatic.o getopt.o getoptl.o vmbest.o vmclear.o vmclose.o vmdcheap.o vmdebug.o vmdisc.o vmexit.o vmlast.o vmopen.o
+exec - ${AR} cr libast.a vmpool.o vmprivate.o vmprofile.o vmregion.o vmsegment.o vmset.o vmstat.o vmstrdup.o vmtrace.o vmwalk.o vmmopen.o malloc.o vmgetmem.o a64l.o acosh.o asinh.o atanh.o cbrt.o crypt.o erf.o err.o exp.o exp__E.o expm1.o gamma.o getpass.o lgamma.o log.o log1p.o log__L.o rand48.o random.o rcmd.o rint.o support.o sfstrtmp.o spawn.o
exec - (ranlib libast.a) >/dev/null 2>&1 || true
done libast.a generated
done ast virtual
@@ -6118,6 +6158,14 @@
exec - else mv 1.${COTEMP}.x ${INSTALLROOT}/include/ast/ast_std.h
exec - fi
done ${INSTALLROOT}/include/ast/ast_std.h generated
+make ${INSTALLROOT}/include/ast/ast_namval.h
+prev ast_namval.h
+exec - proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' ast_namval.h > 1.${COTEMP}.x
+exec - if cmp 2>/dev/null -s ${INSTALLROOT}/include/ast/ast_namval.h 1.${COTEMP}.x
+exec - then rm -f 1.${COTEMP}.x
+exec - else mv 1.${COTEMP}.x ${INSTALLROOT}/include/ast/ast_namval.h
+exec - fi
+done ${INSTALLROOT}/include/ast/ast_namval.h generated
make ${INSTALLROOT}/include/ast/ast_version.h
prev include/ast_version.h
exec - proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' include/ast_version.h > 1.${COTEMP}.x
@@ -6150,6 +6198,14 @@
exec - else mv 1.${COTEMP}.x ${INSTALLROOT}/include/ast/cdt.h
exec - fi
done ${INSTALLROOT}/include/ast/cdt.h generated
+make ${INSTALLROOT}/include/ast/cmdarg.h
+prev include/cmdarg.h
+exec - proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' include/cmdarg.h > 1.${COTEMP}.x
+exec - if cmp 2>/dev/null -s ${INSTALLROOT}/include/ast/cmdarg.h 1.${COTEMP}.x
+exec - then rm -f 1.${COTEMP}.x
+exec - else mv 1.${COTEMP}.x ${INSTALLROOT}/include/ast/cmdarg.h
+exec - fi
+done ${INSTALLROOT}/include/ast/cmdarg.h generated
make ${INSTALLROOT}/include/ast/debug.h
prev include/debug.h
exec - proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o since=1985,author=gsf+dgk+kpv' include/debug.h > 1.${COTEMP}.x
diff -r -N -u ksh93_2007_04_18/src/lib/libast/misc/cmdarg.c ksh93_2007_05_15/src/lib/libast/misc/cmdarg.c
--- ksh93_2007_04_18/src/lib/libast/misc/cmdarg.c 1970-01-01 01:00:00.000000000 +0100
+++ ksh93_2007_05_15/src/lib/libast/misc/cmdarg.c 2007-04-24 22:04:47.000000000 +0200
@@ -0,0 +1,350 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1985-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 *
+* *
+* Glenn Fowler <gsf at research.att.com> *
+* David Korn <dgk at research.att.com> *
+* Phong Vo <kpv at research.att.com> *
+* *
+***********************************************************************/
+#pragma prototyped
+/*
+ * Glenn Fowler
+ * AT&T Research
+ *
+ * xargs/tw command arg list support
+ */
+
+#include <ast.h>
+#include <ctype.h>
+#include <error.h>
+#include <proc.h>
+
+#include "cmdarg.h"
+
+#ifndef EXIT_QUIT
+#define EXIT_QUIT 255
+#endif
+
+static const char* echo[] = { "echo", 0 };
+
+/*
+ * open a cmdarg stream
+ * initialize the command for execution
+ * argv[-1] is reserved for procrun(PROC_ARGMOD)
+ */
+
+Cmdarg_t*
+cmdopen(char** argv, int argmax, int size, const char* argpat, int flags)
+{
+ register Cmdarg_t* cmd;
+ register int n;
+ register char** p;
+ register char* s;
+ char* sh;
+ int c;
+ int m;
+ int argc;
+ long x;
+
+ char** post = 0;
+
+ n = sizeof(char**);
+ if (*argv)
+ {
+ for (p = argv + 1; *p; p++)
+ {
+ if ((flags & CMD_POST) && argpat && streq(*p, argpat))
+ {
+ *p = 0;
+ post = p + 1;
+ argpat