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 = 0;
+ }
+ else
+ n += strlen(*p) + 1;
+ }
+ argc = p - argv;
+ }
+ else
+ argc = 0;
+ for (p = environ; *p; p++)
+ n += sizeof(char**) + strlen(*p) + 1;
+ if ((x = strtol(astconf("ARG_MAX", NiL, NiL), NiL, 0)) <= 0)
+ x = ARG_MAX;
+ if (size <= 0 || size > x)
+ size = x;
+ sh = pathshell();
+ m = n + (argc + 4) * sizeof(char**) + strlen(sh) + 1;
+ m = roundof(m, sizeof(char**));
+ if (size < m)
+ {
+ error(2, "size must be at least %d", m);
+ return 0;
+ }
+ if ((m = x / 10) > 2048)
+ m = 2048;
+ if (size > (x - m))
+ size = x - m;
+ n = size - n;
+ m = ((flags & CMD_INSERT) && argpat) ? (strlen(argpat) + 1) : 0;
+ if (!(cmd = newof(0, Cmdarg_t, 1, n + m)))
+ {
+ error(ERROR_SYSTEM|2, "out of space");
+ return 0;
+ }
+ c = n / sizeof(char**);
+ if (argmax <= 0 || argmax > c)
+ argmax = c;
+ s = cmd->buf;
+ if (!argv[0])
+ {
+ argv = (char**)echo;
+ cmd->echo = 1;
+ }
+ else if (streq(argv[0], echo[0]))
+ {
+ cmd->echo = 1;
+ flags &= ~CMD_NEWLINE;
+ }
+ else if (!(flags & CMD_CHECKED))
+ {
+ if (!pathpath(s, argv[0], NiL, PATH_REGULAR|PATH_EXECUTE))
+ {
+ if (!(flags & CMD_SILENT))
+ {
+ error(ERROR_SYSTEM|2, "%s: command not found",
argv[0]);
+ exit(EXIT_NOTFOUND);
+ }
+ free(cmd);
+ return 0;
+ }
+ argv[0] = s;
+ }
+ s += strlen(s) + 1;
+ if (m)
+ {
+ cmd->insert = strcpy(s, argpat);
+ cmd->insertlen = m - 1;
+ s += m;
+ }
+ s += sizeof(char**) - (s - cmd->buf) % sizeof(char**);
+ p = (char**)s;
+ n -= strlen(*p++ = sh) + 1;
+ cmd->argv = p;
+ while (*p = *argv++)
+ p++;
+ if (m)
+ {
+ argmax = 1;
+ *p++ = 0;
+ cmd->insertarg = p;
+ argv = cmd->argv;
+ c = *cmd->insert;
+ while (s = *argv)
+ {
+ while ((s = strchr(s, c)) && strncmp(cmd->insert, s,
cmd->insertlen))
+ s++;
+ *p++ = s ? *argv : (char*)0;
+ argv++;
+ }
+ *p++ = 0;
+ }
+ cmd->firstarg = cmd->nextarg = p;
+ cmd->laststr = cmd->nextstr = cmd->buf + n;
+ cmd->argmax = argmax;
+ cmd->flags = flags;
+ cmd->offset = ((cmd->postarg = post) ? (argc - (post - argv)) : 0) + 3;
+ return cmd;
+}
+
+/*
+ * flush outstanding command file args
+ */
+
+int
+cmdflush(register Cmdarg_t* cmd)
+{
+ register char* s;
+ register char** p;
+ register int n;
+
+ if (cmd->flags & CMD_EMPTY)
+ cmd->flags &= ~CMD_EMPTY;
+ else if (cmd->nextarg <= cmd->firstarg)
+ return 0;
+ if ((cmd->flags & CMD_MINIMUM) && cmd->argcount < cmd->argmax)
+ {
+ if (!(cmd->flags & CMD_SILENT))
+ error(2, "%d arg command would be too long",
cmd->argcount);
+ return -1;
+ }
+ cmd->total.args += cmd->argcount;
+ cmd->total.commands++;
+ cmd->argcount = 0;
+ if (p = cmd->postarg)
+ while (*cmd->nextarg++ = *p++);
+ else
+ *cmd->nextarg = 0;
+ if (s = cmd->insert)
+ {
+ char* a;
+ char* b;
+ char* e;
+ char* t;
+ char* u;
+ int c;
+ int m;
+
+ a = cmd->firstarg[0];
+ b = (char*)&cmd->nextarg[1];
+ e = cmd->nextstr;
+ c = *s;
+ m = cmd->insertlen;
+ for (n = 1; cmd->argv[n]; n++)
+ if (t = cmd->insertarg[n])
+ {
+ cmd->argv[n] = b;
+ for (;;)
+ {
+ if (!(u = strchr(t, c)))
+ {
+ b += sfsprintf(b, e - b, "%s",
t);
+ break;
+ }
+ if (!strncmp(s, u, m))
+ {
+ b += sfsprintf(b, e - b,
"%-.*s%s", u - t, t, a);
+ t = u + m;
+ }
+ else if (b >= e)
+ break;
+ else
+ {
+ *b++ = *u++;
+ t = u;
+ }
+ }
+ if (b < e)
+ *b++ = 0;
+ }
+ if (b >= e)
+ {
+ if (!(cmd->flags & CMD_SILENT))
+ error(2, "%s: command too large after insert",
a);
+ return -1;
+ }
+ }
+ cmd->nextarg = cmd->firstarg;
+ cmd->nextstr = cmd->laststr;
+ if (cmd->flags & (CMD_QUERY|CMD_TRACE))
+ {
+ p = cmd->argv;
+ sfprintf(sfstderr, "+ %s", *p);
+ while (s = *++p)
+ sfprintf(sfstderr, " %s", s);
+ if (!(cmd->flags & CMD_QUERY))
+ sfprintf(sfstderr, "\n");
+ else if (astquery(1, "? "))
+ return 0;
+ }
+ if (cmd->echo)
+ {
+ n = (cmd->flags & CMD_NEWLINE) ? '\n' : ' ';
+ for (p = cmd->argv + 1; s = *p++;)
+ sfputr(sfstdout, s, *p ? n : '\n');
+ n = 0;
+ }
+ else if ((n = procrun(*cmd->argv, cmd->argv,
PROC_ARGMOD|PROC_IGNOREPATH)) == -1)
+ {
+ if (!(cmd->flags & CMD_SILENT))
+ {
+ error(ERROR_SYSTEM|2, "%s: command exec error",
*cmd->argv);
+ exit(EXIT_NOTFOUND - 1);
+ }
+ return -1;
+ }
+ else if (n >= EXIT_NOTFOUND - 1)
+ {
+ if (!(cmd->flags & CMD_SILENT))
+ exit(n);
+ }
+ else if (!(cmd->flags & CMD_IGNORE))
+ {
+ if (n == EXIT_QUIT && !(cmd->flags & CMD_SILENT))
+ exit(2);
+ if (n)
+ error_info.errors++;
+ }
+ return n;
+}
+
+/*
+ * add file to the command arg list
+ */
+
+int
+cmdarg(register Cmdarg_t* cmd, const char* file, register int len)
+{
+ int i;
+ int r;
+
+ r = 0;
+ if (len)
+ {
+ while ((cmd->nextstr -= len + 1) < (char*)(cmd->nextarg +
cmd->offset))
+ {
+ if (cmd->nextarg == cmd->firstarg)
+ {
+ error(2, "%s: path too long for exec args",
file);
+ return -1;
+ }
+ if (i = cmdflush(cmd))
+ {
+ if (r < i)
+ r = i;
+ if (!(cmd->flags & CMD_IGNORE))
+ return r;
+ }
+ }
+ *cmd->nextarg++ = cmd->nextstr;
+ memcpy(cmd->nextstr, file, len);
+ cmd->nextstr[len] = 0;
+ cmd->argcount++;
+ if (cmd->argcount >= cmd->argmax && (i = cmdflush(cmd)) > r)
+ r = i;
+ }
+ return r;
+}
+
+/*
+ * close a cmdarg stream
+ */
+
+int
+cmdclose(Cmdarg_t* cmd)
+{
+ int n;
+
+ if ((cmd->flags & CMD_EXACT) && cmd->argcount < cmd->argmax)
+ {
+ if (!(cmd->flags & CMD_SILENT))
+ error(2, "only %d arguments for last command",
cmd->argcount);
+ return -1;
+ }
+ cmd->flags &= ~CMD_MINIMUM;
+ n = cmdflush(cmd);
+ free(cmd);
+ return n;
+}
diff -r -N -u ksh93_2007_04_18/src/lib/libast/misc/error.c
ksh93_2007_05_15/src/lib/libast/misc/error.c
--- ksh93_2007_04_18/src/lib/libast/misc/error.c 2007-03-23
03:53:27.000000000 +0100
+++ ksh93_2007_05_15/src/lib/libast/misc/error.c 2007-04-25
00:01:16.000000000 +0200
@@ -619,8 +619,6 @@
* error_info context control
*/
-#include <error.h>
-
static Error_info_t* freecontext;
Error_info_t*
diff -r -N -u ksh93_2007_04_18/src/lib/libast/misc/fts.c
ksh93_2007_05_15/src/lib/libast/misc/fts.c
--- ksh93_2007_04_18/src/lib/libast/misc/fts.c 2006-08-02 21:16:05.000000000
+0200
+++ ksh93_2007_05_15/src/lib/libast/misc/fts.c 2007-04-27 07:01:42.000000000
+0200
@@ -32,6 +32,7 @@
#include <ast_dir.h>
#include <error.h>
#include <fs3d.h>
+#include <ls.h>
struct Ftsent;
@@ -70,7 +71,7 @@
char* home; /* home/path buffer */ \
char* endbase; /* space to build paths */ \
char* endbuf; /* space to build paths */ \
- char* pad;
+ char* pad[2]; /* $0.02 to splain this */
/*
* NOTE: <ftwalk.h> relies on status and statb being the first two elements
@@ -79,12 +80,12 @@
#define _FTSENT_PRIVATE_ \
short status; /* internal status */ \
struct stat statb; /* fts_statp data */ \
+ FTS* fts; /* fts_open() handle */ \
int nd; /* popdir() count */ \
FTSENT* left; /* left child */ \
FTSENT* right; /* right child */ \
FTSENT* pwd; /* pwd parent */ \
FTSENT* stack; /* getlist() stack */ \
- FTS* fts; /* for fts verification */ \
long nlink; /* FTS_D link count */ \
unsigned char must; /* must stat */ \
unsigned char type; /* DT_* type */ \
@@ -1457,6 +1458,22 @@
}
/*
+ * return 1 if ent is mounted on a local filesystem
+ */
+
+int
+fts_local(FTSENT* ent)
+{
+#ifdef ST_LOCAL
+ struct statvfs fs;
+
+ return statvfs(ent->fts_path, &fs) || (fs.f_flag & ST_LOCAL);
+#else
+ return !strgrpmatch(fmtfs(ent->fts_statp), "([an]fs|samb)", NiL, 0,
STR_LEFT|STR_ICASE);
+#endif
+}
+
+/*
* close an open fts stream
*/
diff -r -N -u ksh93_2007_04_18/src/lib/libast/misc/optctx.c
ksh93_2007_05_15/src/lib/libast/misc/optctx.c
--- ksh93_2007_04_18/src/lib/libast/misc/optctx.c 1970-01-01
01:00:00.000000000 +0100
+++ ksh93_2007_05_15/src/lib/libast/misc/optctx.c 2007-04-25
20:03:21.000000000 +0200
@@ -0,0 +1,70 @@
+/***********************************************************************
+* *
+* 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
+ *
+ * _opt_infop_ context control
+ *
+ * allocate new context:
+ * new_context = optctx(0, 0);
+ * free new context:
+ * optctx(0, new_context);
+ * switch to new_context:
+ * old_context = optctx(new_context, 0);
+ * switch to old_context and free new_context:
+ * optctx(old_context, new_context);
+ */
+
+#include <optlib.h>
+
+static Opt_t* freecontext;
+
+Opt_t*
+optctx(Opt_t* p, Opt_t* o)
+{
+ if (o)
+ {
+ if (freecontext)
+ free(o);
+ else
+ freecontext = o;
+ if (!p)
+ return 0;
+ }
+ if (p)
+ {
+ o = _opt_infop_;
+ _opt_infop_ = p;
+ }
+ else
+ {
+ if (o = freecontext)
+ freecontext = 0;
+ else if (!(o = newof(0, Opt_t, 1, 0)))
+ return 0;
+ memset(o, 0, sizeof(Opt_t));
+ o->state = _opt_infop_->state;
+ }
+ return o;
+}
diff -r -N -u ksh93_2007_04_18/src/lib/libast/misc/optget.c
ksh93_2007_05_15/src/lib/libast/misc/optget.c
--- ksh93_2007_04_18/src/lib/libast/misc/optget.c 2007-03-28
08:13:50.000000000 +0200
+++ ksh93_2007_05_15/src/lib/libast/misc/optget.c 2007-04-24
12:24:13.000000000 +0200
@@ -680,14 +680,16 @@
save(const char* s)
{
Save_t* p;
+ Dtdisc_t* d;
- static Dtdisc_t disc;
static Dt_t* dict;
if (!dict)
{
- disc.key = offsetof(Save_t, text);
- if (!(dict = dtopen(&disc, Dthash)))
+ if (!(d = newof(0, Dtdisc_t, 1, 0)))
+ return (char*)s;
+ d->key = offsetof(Save_t, text);
+ if (!(dict = dtopen(d, Dthash)))
return (char*)s;
}
if (!(p = (Save_t*)dtmatch(dict, s)))
diff -r -N -u ksh93_2007_04_18/src/lib/libast/misc/procopen.c
ksh93_2007_05_15/src/lib/libast/misc/procopen.c
--- ksh93_2007_04_18/src/lib/libast/misc/procopen.c 2006-10-25
17:20:39.000000000 +0200
+++ ksh93_2007_05_15/src/lib/libast/misc/procopen.c 2007-04-23
23:03:12.000000000 +0200
@@ -360,7 +360,7 @@
*/
Proc_t*
-procopen(const char* cmd, char** argv, char** envv, long* modv, long flags)
+procopen(const char* cmd, char** argv, char** envv, long* modv, int flags)
{
register Proc_t* proc = 0;
register int procfd;
diff -r -N -u ksh93_2007_04_18/src/lib/libast/misc/procrun.c
ksh93_2007_05_15/src/lib/libast/misc/procrun.c
--- ksh93_2007_04_18/src/lib/libast/misc/procrun.c 1996-12-12
20:11:25.000000000 +0100
+++ ksh93_2007_05_15/src/lib/libast/misc/procrun.c 2007-04-24
22:13:36.000000000 +0200
@@ -34,7 +34,16 @@
#include "proclib.h"
int
-procrun(const char* path, char** argv)
+procrun(const char* path, char** argv, int flags)
{
- return procclose(procopen(path, argv, NiL, NiL,
PROC_FOREGROUND|PROC_GID|PROC_UID));
+#if __OBSOLETE__ < 20090101
+ flags &= argv ? PROC_ARGMOD : PROC_CHECK;
+#endif
+ if (flags & PROC_CHECK)
+ {
+ char buf[PATH_MAX];
+
+ return pathpath(buf, path, NiL, PATH_REGULAR|PATH_EXECUTE) ? 0
: -1;
+ }
+ return procclose(procopen(path, argv, NiL, NiL,
flags|PROC_FOREGROUND|PROC_GID|PROC_UID));
}
diff -r -N -u ksh93_2007_04_18/src/lib/libast/path/pathprobe.c
ksh93_2007_05_15/src/lib/libast/path/pathprobe.c
--- ksh93_2007_04_18/src/lib/libast/path/pathprobe.c 2006-09-06
05:29:07.000000000 +0200
+++ ksh93_2007_05_15/src/lib/libast/path/pathprobe.c 2007-04-23
22:54:59.000000000 +0200
@@ -291,7 +291,7 @@
*ap++ = (char*)tool;
*ap++ = proc;
*ap = 0;
- if (procrun(exe, arg))
+ if (procrun(exe, arg, 0))
return 0;
if (eaccess(path, R_OK))
return 0;
diff -r -N -u ksh93_2007_04_18/src/lib/libast/port/lc.c
ksh93_2007_05_15/src/lib/libast/port/lc.c
--- ksh93_2007_04_18/src/lib/libast/port/lc.c 2002-10-05 12:19:59.000000000
+0200
+++ ksh93_2007_05_15/src/lib/libast/port/lc.c 2007-04-20 21:32:20.000000000
+0200
@@ -26,58 +26,19 @@
*/
#include "lclib.h"
+#include "lclang.h"
#include <ctype.h>
-#if _WINIX
-
-#include <ast_windows.h>
-
-#define LANG_CHINESE_SIMPLIFIED LANG_CHINESE
-#define LANG_CHINESE_TRADITIONAL LANG_CHINESE
-#define LANG_NORWEGIAN_BOKMAL LANG_NORWEGIAN
-#define LANG_NORWEGIAN_NYNORSK LANG_NORWEGIAN
-#define LANG_SERBO_CROATIAN LANG_CROATIAN
-
-#define CTRY_CZECH_REPUBLIC CTRY_CZECH
-
-#define SUBLANG_CHINESE_SIMPLIFIED_CHINA SUBLANG_CHINESE_SIMPLIFIED
-#define SUBLANG_CHINESE_SIMPLIFIED_HONG_KONG SUBLANG_CHINESE_HONGKONG
-#define SUBLANG_CHINESE_SIMPLIFIED_SINGAPORE SUBLANG_CHINESE_SINGAPORE
-#define SUBLANG_CHINESE_TRADITIONAL_TAIWAN SUBLANG_CHINESE_TRADITIONAL
-#define SUBLANG_DUTCH_NETHERLANDS_ANTILLES SUBLANG_DUTCH
-#define SUBLANG_DUTCH_BELGIUM SUBLANG_DUTCH_BELGIAN
-#define SUBLANG_ENGLISH_AUSTRALIA SUBLANG_ENGLISH_AUS
-#define SUBLANG_ENGLISH_CANADA SUBLANG_ENGLISH_CAN
-#define SUBLANG_ENGLISH_IRELAND SUBLANG_ENGLISH_EIRE
-#define SUBLANG_ENGLISH_NEW_ZEALAND SUBLANG_ENGLISH_NZ
-#define SUBLANG_ENGLISH_TRINIDAD_TOBAGO
SUBLANG_ENGLISH_CARIBBEAN
-#define SUBLANG_ENGLISH_UNITED_KINGDOM SUBLANG_ENGLISH_UK
-#define SUBLANG_ENGLISH_UNITED_STATES SUBLANG_ENGLISH_US
-#define SUBLANG_FRENCH_BELGIUM SUBLANG_FRENCH_BELGIAN
-#define SUBLANG_FRENCH_CANADA SUBLANG_FRENCH_CANADIAN
-#define SUBLANG_FRENCH_SWITZERLAND SUBLANG_FRENCH_SWISS
-#define SUBLANG_GERMAN_AUSTRIA SUBLANG_GERMAN_AUSTRIAN
-#define SUBLANG_GERMAN_SWITZERLAND SUBLANG_GERMAN_SWISS
-#define SUBLANG_ITALIAN_SWITZERLAND SUBLANG_ITALIAN_SWISS
-#define SUBLANG_NORWEGIAN_BOKMAL_NORWAY SUBLANG_NORWEGIAN_BOKMAL
-#define SUBLANG_NORWEGIAN_NORWAY SUBLANG_NORWEGIAN_BOKMAL
-#define SUBLANG_NORWEGIAN_NYNORSK_NORWAY SUBLANG_NORWEGIAN_NYNORSK
-#define SUBLANG_PORTUGUESE_BRAZIL SUBLANG_PORTUGUESE_BRAZILIAN
-
-#endif
-
-#include "lctab.h"
-
static Lc_numeric_t default_numeric = { '.', -1 };
static Lc_t default_lc =
{
"C",
"POSIX",
- &language[0],
- &territory[0],
- &charset[0],
+ &lc_languages[0],
+ &lc_territories[0],
+ &lc_charsets[0],
0,
LC_default|LC_checked|LC_local,
0,
@@ -105,9 +66,9 @@
{
"debug",
"debug",
- &language[1],
- &territory[1],
- &charset[0],
+ &lc_languages[1],
+ &lc_territories[1],
+ &lc_charsets[0],
0,
LC_debug|LC_checked|LC_local,
0,
@@ -184,7 +145,7 @@
Lc_category_t*
lccategories(void)
{
- return &categories[0];
+ return (Lc_category_t*)&lc_categories[0];
}
/*
@@ -333,7 +294,7 @@
}
if (s < e)
{
- if (tp && tp != &territory[0] && (!(flags &
(LC_abbreviated|LC_default)) || !lp || !streq(lp->code, tp->code)))
+ if (tp && tp != &lc_territories[0] && (!(flags &
(LC_abbreviated|LC_default)) || !lp || !streq(lp->code, tp->code)))
{
if (lp)
*s++ = '_';
@@ -452,7 +413,7 @@
for (lc = lcs; lc; lc = lc->next)
if (!strcasecmp(t, lc->code) || !strcasecmp(t, lc->name))
return lc;
- for (mp = map; mp->code; mp++)
+ for (mp = lc_maps; mp->code; mp++)
if (streq(t, mp->code))
{
lp = mp->language;
@@ -553,15 +514,15 @@
n = strlen(s = language_name);
if (n == 2)
- for (lp = language; lp->code && !streq(s, lp->code); lp++);
+ for (lp = lc_languages; lp->code && !streq(s, lp->code); lp++);
else if (n == 3)
{
- for (lp = language; lp->code && (!lp->alternates || !match(s,
lp->alternates, n, 0)); lp++);
+ for (lp = lc_languages; lp->code && (!lp->alternates ||
!match(s, lp->alternates, n, 0)); lp++);
if (!lp->code)
{
c = s[2];
s[2] = 0;
- for (lp = language; lp->code && !streq(s, lp->code);
lp++);
+ for (lp = lc_languages; lp->code && !streq(s,
lp->code); lp++);
s[2] = c;
if (lp->code)
n = 1;
@@ -571,18 +532,18 @@
lp = 0;
if (!lp || !lp->code)
{
- for (lp = language; lp->code && !match(s, lp->name, 0, 0);
lp++);
+ for (lp = lc_languages; lp->code && !match(s, lp->name, 0, 0);
lp++);
if (!lp || !lp->code)
{
if (!territory_name)
{
if (n == 2)
- for (tp = territory; tp->code &&
!streq(s, tp->code); tp++);
+ for (tp = lc_territories; tp->code &&
!streq(s, tp->code); tp++);
else
{
z = 0;
tpb = 0;
- for (tp = territory; tp->name; tp++)
+ for (tp = lc_territories; tp->name;
tp++)
if ((i = match(s, tp->name, 3,
0)) > z)
{
tpb = tp;
@@ -609,8 +570,8 @@
return 0;
name = ((Lc_language_t*)lp)->code =
((Lc_language_t*)lp)->name = (const char*)(lp + 1);
memcpy((char*)lp->code, s, z - 1);
- tp = &territory[0];
- cp = ((Lc_language_t*)lp)->charset =
&charset[0];
+ tp = &lc_territories[0];
+ cp = ((Lc_language_t*)lp)->charset =
&lc_charsets[0];
al = 0;
goto override;
}
@@ -627,7 +588,7 @@
{
n = 0;
primary = 0;
- for (tp = territory; tp->code; tp++)
+ for (tp = lc_territories; tp->code; tp++)
if (tp->languages[0] == lp)
{
if (tp->flags & LC_primary)
@@ -648,7 +609,7 @@
n = strlen(s);
if (n == 2)
{
- for (tp = territory; tp->code; tp++)
+ for (tp = lc_territories; tp->code; tp++)
if (streq(s, tp->code))
{
for (i = 0; i <
elementsof(tp->languages) && lp != tp->languages[i]; i++);
@@ -659,7 +620,7 @@
}
else
{
- for (tp = territory; tp->code; tp++)
+ for (tp = lc_territories; tp->code; tp++)
if (match(s, tp->name, 3, 0))
{
for (i = 0; i <
elementsof(tp->languages) && lp != tp->languages[i]; i++);
@@ -684,7 +645,7 @@
c = *s;
*s = 0;
if (!(cp = lp->charset) || !match_charset(w, cp))
- for (cp = charset; cp->code; cp++)
+ for (cp = lc_charsets; cp->code; cp++)
if (match_charset(w, cp))
{
ppa = cp;
@@ -721,7 +682,7 @@
*/
if (s = charset_name)
- for (cp = charset; cp->code; cp++)
+ for (cp = lc_charsets; cp->code; cp++)
if (match_charset(s, cp))
break;
if (!cp || !cp->code)
@@ -739,9 +700,9 @@
return 0;
strcpy((char*)(lc->name = (const char*)(lc + 1)), name);
strcpy((char*)(lc->code = lc->name + n), s);
- lc->language = lp ? lp : &language[0];
- lc->territory = tp ? tp : &territory[0];
- lc->charset = cp ? cp : &charset[0];
+ lc->language = lp ? lp : &lc_languages[0];
+ lc->territory = tp ? tp : &lc_territories[0];
+ lc->charset = cp ? cp : &lc_charsets[0];
lc->attributes = al;
for (i = 0; i < elementsof(lc->info); i++)
lc->info[i].lc = lc;
@@ -796,22 +757,22 @@
{
if (++ls->language >= elementsof(ls->lc.territory->languages)
|| !(ls->lc.language = ls->lc.territory->languages[ls->language]))
{
- if (++ls->territory >= (elementsof(territory) - 1))
+ if (!lc_territories[++ls->territory].code)
{
free(ls);
return 0;
}
- ls->lc.territory = &territory[ls->territory];
+ ls->lc.territory = &lc_territories[ls->territory];
ls->lc.language =
ls->lc.territory->languages[ls->language = 0];
}
if (ls->lc.language)
{
- ls->lc.charset = ls->lc.language->charset ?
ls->lc.language->charset : &charset[0];
+ ls->lc.charset = ls->lc.language->charset ?
ls->lc.language->charset : &lc_charsets[0];
ls->list.attribute =
ls->lc.language->attributes[ls->attribute = 0];
}
else
{
- ls->lc.charset = &charset[0];
+ ls->lc.charset = &lc_charsets[0];
ls->list.attribute = 0;
}
}
diff -r -N -u ksh93_2007_04_18/src/lib/libast/port/lcgen.c
ksh93_2007_05_15/src/lib/libast/port/lcgen.c
--- ksh93_2007_04_18/src/lib/libast/port/lcgen.c 2004-05-04
22:04:13.000000000 +0200
+++ ksh93_2007_05_15/src/lib/libast/port/lcgen.c 2007-04-20
21:48:57.000000000 +0200
@@ -294,7 +294,7 @@
line = 0;
if (!(hdr = *argv++) || !(lib = *argv++) || *argv)
{
- fprintf(stderr, "%s: hdr and lib arguments expected\n",
command);
+ fprintf(stderr, "%s: { hdr lib tab } arguments expected\n",
command);
return 1;
}
if (!(hf = fopen(hdr, "w")))
@@ -333,6 +333,10 @@
fprintf(hf, "#define LC_verbose\t\t0x00200\n");
fprintf(hf, "#define LC_user\t\t\t0x10000\n");
fprintf(lf, "/* : : generated by %s : : */\n", command);
+ fprintf(lf, "\n");
+ fprintf(lf, "#include \"lclib.h\"\n");
+ fprintf(lf, "#include \"lclang.h\"\n");
+ fprintf(lf, "\n");
while (s = fgets(buf, sizeof(buf), stdin))
{
line++;
@@ -501,7 +505,7 @@
if (s = copy(&b, arg[4]))
{
i = 0;
- fprintf(lf, "\nstatic Lc_attribute_t
attribute_%s[] =\n{\n", lp->link.code);
+ fprintf(lf, "\nconst Lc_attribute_t
attribute_%s[] =\n{\n", lp->link.code);
while (*(b = s))
{
for (f = 0; *s && *s != '|'; s++)
@@ -686,7 +690,7 @@
fprintf(hf, "extern Lc_t*\t\tlcscan(Lc_t*);\n");
fprintf(hf, "\n");
fprintf(hf, "#undef\textern\n");
- fprintf(lf, "\nstatic const Lc_charset_t charset[] =\n{\n");
+ fprintf(lf, "\nconst Lc_charset_t lc_charsets[] =\n{\n");
for (cp = (Charset_t*)state.charset.root; cp; cp =
(Charset_t*)cp->link.next)
{
fprintf(lf, "{\"%s\",", cp->link.code);
@@ -701,12 +705,12 @@
fprintf(lf, "},\n");
}
fprintf(lf, "\t0\n};\n");
- fprintf(lf, "\nstatic const Lc_language_t language[] =\n{\n");
- fprintf(lf, "{\"C\",\"C\",\"POSIX\",&charset[0],LC_default,0,");
+ fprintf(lf, "\nconst Lc_language_t lc_languages[] =\n{\n");
+ fprintf(lf, "{\"C\",\"C\",\"POSIX\",&lc_charsets[0],LC_default,0,");
for (i = 0; i < language_attribute_max; i++)
fprintf(lf, "0,");
fprintf(lf, "},\n");
- fprintf(lf, "{\"debug\",\"debug\",0,&charset[0],LC_debug,0,");
+ fprintf(lf, "{\"debug\",\"debug\",0,&lc_charsets[0],LC_debug,0,");
for (i = 0; i < language_attribute_max; i++)
fprintf(lf, "0,");
fprintf(lf, "},\n");
@@ -717,7 +721,7 @@
fprintf(lf, "\"%s\",", lp->alternates);
else
fprintf(lf, "0,");
- fprintf(lf, "&charset[%d],0,", lp->charset ?
lp->charset->link.index : 0);
+ fprintf(lf, "&lc_charsets[%d],0,", lp->charset ?
lp->charset->link.index : 0);
macro(lf, "LANG", lp->name, (char*)0);
for (i = 0, al = lp->attributes; al; al = al->next, i++)
fprintf(lf, "&attribute_%s[%d],", lp->link.code,
al->attribute->link.index);
@@ -726,12 +730,12 @@
fprintf(lf, "\n},\n");
}
fprintf(lf, "\t0\n};\n");
- fprintf(lf, "\nstatic const Lc_territory_t territory[] =\n{\n");
- fprintf(lf, "{\"C\",\"C\",LC_default,0,&language[0],");
+ fprintf(lf, "\nconst Lc_territory_t lc_territories[] =\n{\n");
+ fprintf(lf, "{\"C\",\"C\",LC_default,0,&lc_languages[0],");
for (i = 1; i < 2 * territory_language_max; i++)
fprintf(lf, "0,");
fprintf(lf, "},\n");
- fprintf(lf, "{\"debug\",\"debug\",LC_debug,0,&language[1],");
+ fprintf(lf, "{\"debug\",\"debug\",LC_debug,0,&lc_languages[1],");
for (i = 1; i < 2 * territory_language_max; i++)
fprintf(lf, "0,");
fprintf(lf, "},\n");
@@ -744,7 +748,7 @@
fprintf(lf, "0,");
macro(lf, "CTRY", tp->name, (char*)0);
for (i = 0, ll = tp->languages; ll; ll = ll->next, i++)
- fprintf(lf, "&language[%d],", ll->language->link.index);
+ fprintf(lf, "&lc_languages[%d],",
ll->language->link.index);
for (; i < territory_language_max; i++)
fprintf(lf, "0,");
for (i = 0, ll = tp->languages; ll; ll = ll->next, i++)
@@ -754,13 +758,13 @@
fprintf(lf, "\n},\n");
}
fprintf(lf, "\t0\n};\n");
- fprintf(lf, "\nstatic const Lc_map_t map[] =\n{\n");
+ fprintf(lf, "\nconst Lc_map_t lc_maps[] =\n{\n");
for (mp = (Map_t*)state.map.root; mp; mp = (Map_t*)mp->link.next)
{
fprintf(lf, "{\"%s\",", mp->link.code);
- fprintf(lf, "&language[%d],", mp->language->link.index);
- fprintf(lf, "&territory[%d],", mp->territory->link.index);
- fprintf(lf, "&charset[%d],", mp->charset ?
mp->charset->link.index : 0);
+ fprintf(lf, "&lc_languages[%d],", mp->language->link.index);
+ fprintf(lf, "&lc_territories[%d],", mp->territory->link.index);
+ fprintf(lf, "&lc_charsets[%d],", mp->charset ?
mp->charset->link.index : 0);
if (mp->attribute)
fprintf(lf, "&attribute_%s[%d]",
mp->language->link.code, mp->attribute->link.index);
else
diff -r -N -u ksh93_2007_04_18/src/lib/libast/port/lclang.h
ksh93_2007_05_15/src/lib/libast/port/lclang.h
--- ksh93_2007_04_18/src/lib/libast/port/lclang.h 1970-01-01
01:00:00.000000000 +0100
+++ ksh93_2007_05_15/src/lib/libast/port/lclang.h 2007-04-20
21:09:13.000000000 +0200
@@ -0,0 +1,62 @@
+/***********************************************************************
+* *
+* 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> *
+* *
+***********************************************************************/
+/*
+ * lc (sub)lang definitions -- very windowsish
+ */
+
+#if _WINIX
+
+#include <ast_windows.h>
+
+#define LANG_CHINESE_SIMPLIFIED LANG_CHINESE
+#define LANG_CHINESE_TRADITIONAL LANG_CHINESE
+#define LANG_NORWEGIAN_BOKMAL LANG_NORWEGIAN
+#define LANG_NORWEGIAN_NYNORSK LANG_NORWEGIAN
+#define LANG_SERBO_CROATIAN LANG_CROATIAN
+
+#define CTRY_CZECH_REPUBLIC CTRY_CZECH
+
+#define SUBLANG_CHINESE_SIMPLIFIED_CHINA SUBLANG_CHINESE_SIMPLIFIED
+#define SUBLANG_CHINESE_SIMPLIFIED_HONG_KONG SUBLANG_CHINESE_HONGKONG
+#define SUBLANG_CHINESE_SIMPLIFIED_SINGAPORE SUBLANG_CHINESE_SINGAPORE
+#define SUBLANG_CHINESE_TRADITIONAL_TAIWAN SUBLANG_CHINESE_TRADITIONAL
+#define SUBLANG_DUTCH_NETHERLANDS_ANTILLES SUBLANG_DUTCH
+#define SUBLANG_DUTCH_BELGIUM SUBLANG_DUTCH_BELGIAN
+#define SUBLANG_ENGLISH_AUSTRALIA SUBLANG_ENGLISH_AUS
+#define SUBLANG_ENGLISH_CANADA SUBLANG_ENGLISH_CAN
+#define SUBLANG_ENGLISH_IRELAND SUBLANG_ENGLISH_EIRE
+#define SUBLANG_ENGLISH_NEW_ZEALAND SUBLANG_ENGLISH_NZ
+#define SUBLANG_ENGLISH_TRINIDAD_TOBAGO
SUBLANG_ENGLISH_CARIBBEAN
+#define SUBLANG_ENGLISH_UNITED_KINGDOM SUBLANG_ENGLISH_UK
+#define SUBLANG_ENGLISH_UNITED_STATES SUBLANG_ENGLISH_US
+#define SUBLANG_FRENCH_BELGIUM SUBLANG_FRENCH_BELGIAN
+#define SUBLANG_FRENCH_CANADA SUBLANG_FRENCH_CANADIAN
+#define SUBLANG_FRENCH_SWITZERLAND SUBLANG_FRENCH_SWISS
+#define SUBLANG_GERMAN_AUSTRIA SUBLANG_GERMAN_AUSTRIAN
+#define SUBLANG_GERMAN_SWITZERLAND SUBLANG_GERMAN_SWISS
+#define SUBLANG_ITALIAN_SWITZERLAND SUBLANG_ITALIAN_SWISS
+#define SUBLANG_NORWEGIAN_BOKMAL_NORWAY SUBLANG_NORWEGIAN_BOKMAL
+#define SUBLANG_NORWEGIAN_NORWAY SUBLANG_NORWEGIAN_BOKMAL
+#define SUBLANG_NORWEGIAN_NYNORSK_NORWAY SUBLANG_NORWEGIAN_NYNORSK
+#define SUBLANG_PORTUGUESE_BRAZIL SUBLANG_PORTUGUESE_BRAZILIAN
+
+#endif
diff -r -N -u ksh93_2007_04_18/src/lib/libast/port/lclib.h
ksh93_2007_05_15/src/lib/libast/port/lclib.h
--- ksh93_2007_04_18/src/lib/libast/port/lclib.h 2001-08-22
13:17:15.000000000 +0200
+++ ksh93_2007_05_15/src/lib/libast/port/lclib.h 2007-04-20
21:44:16.000000000 +0200
@@ -28,10 +28,15 @@
#ifndef _LCLIB_H
#define _LCLIB_H 1
-#define categories _ast_categories
#define locales _ast_locales
#define translate _ast_translate
+#define lc_categories _ast_lc_categories
+#define lc_charsets _ast_lc_charsets
+#define lc_languages _ast_lc_languages
+#define lc_maps _ast_lc_maps
+#define lc_territories _ast_lc_territories
+
struct Lc_info_s;
#define _LC_PRIVATE_ \
@@ -53,9 +58,14 @@
#define LCINFO(c) (&locales[c]->info[c])
-extern Lc_category_t categories[];
-extern Lc_t* locales[];
+extern const Lc_charset_t lc_charsets[];
+extern const Lc_language_t lc_languages[];
+extern const Lc_map_t lc_maps[];
+extern const Lc_territory_t lc_territories[];
+
+extern Lc_category_t lc_categories[];
+extern Lc_t* locales[];
-extern char* translate(const char*, const char*, const char*, const
char*);
+extern char* translate(const char*, const char*, const
char*, const char*);
#endif
diff -r -N -u ksh93_2007_04_18/src/lib/libast/port/mc.c
ksh93_2007_05_15/src/lib/libast/port/mc.c
--- ksh93_2007_04_18/src/lib/libast/port/mc.c 2004-10-27 21:45:28.000000000
+0200
+++ ksh93_2007_05_15/src/lib/libast/port/mc.c 2007-04-20 21:36:20.000000000
+0200
@@ -154,7 +154,7 @@
case_C:
if (!catalog)
last = 1;
- v =
categories[category].name;
+ v =
lc_categories[category].name;
break;
default:
*s++ = c;
diff -r -N -u ksh93_2007_04_18/src/lib/libast/RELEASE
ksh93_2007_05_15/src/lib/libast/RELEASE
--- ksh93_2007_04_18/src/lib/libast/RELEASE 2007-04-13 19:09:16.000000000
+0200
+++ ksh93_2007_05_15/src/lib/libast/RELEASE 2007-05-16 02:08:01.000000000
+0200
@@ -1,3 +1,16 @@
+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
@@ -5,6 +18,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
diff -r -N -u ksh93_2007_04_18/src/lib/libast/sfio/sfvprintf.c
ksh93_2007_05_15/src/lib/libast/sfio/sfvprintf.c
--- ksh93_2007_04_18/src/lib/libast/sfio/sfvprintf.c 2007-04-12
21:34:05.000000000 +0200
+++ ksh93_2007_05_15/src/lib/libast/sfio/sfvprintf.c 2007-05-15
22:39:44.000000000 +0200
@@ -716,7 +716,7 @@
#endif
}
#if defined(mbwide) && defined(mbchar) && defined(mbwidth)
- else if (mbwide())
+ else if (!(flags & SFFMT_SHORT) && mbwide())
{ w = 0;
SFMBCLR(&mbs);
ssp = sp;
diff -r -N -u ksh93_2007_04_18/src/lib/libcmd/chgrp.c
ksh93_2007_05_15/src/lib/libcmd/chgrp.c
--- ksh93_2007_04_18/src/lib/libcmd/chgrp.c 2006-11-01 21:15:56.000000000
+0100
+++ ksh93_2007_05_15/src/lib/libcmd/chgrp.c 2007-05-08 23:12:57.000000000
+0200
@@ -372,7 +372,7 @@
}
if (!(fts = fts_open(argv + 1, flags, NiL)))
error(ERROR_system(1), "%s: not found", argv[1]);
- while (!cmdquit() && (ent = fts_read(fts)))
+ while (!sh_checksig(context) && (ent = fts_read(fts)))
switch (ent->fts_info)
{
case FTS_F:
diff -r -N -u ksh93_2007_04_18/src/lib/libcmd/chmod.c
ksh93_2007_05_15/src/lib/libcmd/chmod.c
--- ksh93_2007_04_18/src/lib/libcmd/chmod.c 2007-01-26 23:43:33.000000000
+0100
+++ ksh93_2007_05_15/src/lib/libcmd/chmod.c 2007-05-08 23:13:25.000000000
+0200
@@ -247,7 +247,7 @@
umask(ignore);
error(ERROR_system(1), "%s: not found", *argv);
}
- while (!cmdquit() && (ent = fts_read(fts)))
+ while (!sh_checksig(context) && (ent = fts_read(fts)))
switch (ent->fts_info)
{
case FTS_SL:
diff -r -N -u ksh93_2007_04_18/src/lib/libcmd/cksum.c
ksh93_2007_05_15/src/lib/libcmd/cksum.c
--- ksh93_2007_04_18/src/lib/libcmd/cksum.c 2007-02-07 20:25:43.000000000
+0100
+++ ksh93_2007_05_15/src/lib/libcmd/cksum.c 2007-05-08 23:13:36.000000000
+0200
@@ -560,7 +560,7 @@
error(ERROR_system(1), "%s: not found", *argv);
else
{
- while (!cmdquit() && (ent = fts_read(fts)))
+ while (!sh_checksig(context) && (ent = fts_read(fts)))
switch (ent->fts_info)
{
case FTS_SL:
diff -r -N -u ksh93_2007_04_18/src/lib/libcmd/cmd.h
ksh93_2007_05_15/src/lib/libcmd/cmd.h
--- ksh93_2007_04_18/src/lib/libcmd/cmd.h 2006-11-27 16:45:45.000000000
+0100
+++ ksh93_2007_05_15/src/lib/libcmd/cmd.h 2007-05-11 21:32:56.000000000
+0200
@@ -31,9 +31,9 @@
#include <ast.h>
#include <error.h>
#include <stak.h>
+#include <shcmd.h>
#define cmdinit _cmd_init
-#define cmdquit() 0
#if _BLD_cmd && defined(__EXPORT__)
#define extern __EXPORT__
@@ -53,7 +53,7 @@
#include <dlldefs.h>
-typedef int (*Builtin_f)(int, char**, void*);
+typedef int (*Shbltin_f)(int, char**, void*);
#else
@@ -97,7 +97,7 @@
register char* s;
register char* t;
void* dll;
- Builtin_f fun;
+ Shbltin_f fun;
char buf[64];
if (s = strrchr(argv[0], '/'))
@@ -117,16 +117,16 @@
{
if (dll = dlopen(NiL, RTLD_LAZY))
{
- if (fun = (Builtin_f)dlsym(dll, buf + 1))
+ if (fun = (Shbltin_f)dlsym(dll, buf + 1))
break;
- if (fun = (Builtin_f)dlsym(dll, buf))
+ if (fun = (Shbltin_f)dlsym(dll, buf))
break;
}
if (dll = dllfind("cmd", NiL, RTLD_LAZY))
{
- if (fun = (Builtin_f)dlsym(dll, buf + 1))
+ if (fun = (Shbltin_f)dlsym(dll, buf + 1))
break;
- if (fun = (Builtin_f)dlsym(dll, buf))
+ if (fun = (Shbltin_f)dlsym(dll, buf))
break;
}
return 127;
@@ -139,26 +139,9 @@
#else
+#define _CMD_CONTEXT_OK(p)
(((Shbltin_t*)(p))->version>=20070511&&((Shbltin_t*)(p))->version<20350101)
#undef cmdinit
-#define cmdinit(a,b,c,d,e) do{if(_cmd_init(a,b,c,d,e))return -1;}while(0)
-
-#ifndef CMD_BUILTIN
-
-#undef cmdquit
-#define cmdquit() (_cmd_quit)
-
-#if _BLD_cmd && defined(__EXPORT__)
-#define extern extern __EXPORT__
-#endif
-#if !_BLD_cmd && defined(__IMPORT__)
-#define extern extern __IMPORT__
-#endif
-
-extern int _cmd_quit;
-
-#undef extern
-
-#endif
+#define cmdinit(a,b,c,d,e)
do{if((c)&&!_CMD_CONTEXT_OK(c))c=0;if(_cmd_init(a,b,c,d,e))return -1;}while(0)
#if _BLD_cmd && defined(__EXPORT__)
#define extern extern __EXPORT__
diff -r -N -u ksh93_2007_04_18/src/lib/libcmd/cmdinit.c
ksh93_2007_05_15/src/lib/libcmd/cmdinit.c
--- ksh93_2007_04_18/src/lib/libcmd/cmdinit.c 2006-11-24 22:28:38.000000000
+0100
+++ ksh93_2007_05_15/src/lib/libcmd/cmdinit.c 2007-05-08 23:10:56.000000000
+0200
@@ -25,19 +25,13 @@
#include <cmd.h>
-int _cmd_quit = 0;
-
int
_cmd_init(int argc, char** argv, void* context, const char* catalog, int flags)
{
register char* cp;
if (argc < 0)
- {
- _cmd_quit = 1;
return -1;
- }
- _cmd_quit = 0;
if (cp = strrchr(argv[0], '/'))
cp++;
else
diff -r -N -u ksh93_2007_04_18/src/lib/libcmd/cp.c
ksh93_2007_05_15/src/lib/libcmd/cp.c
--- ksh93_2007_04_18/src/lib/libcmd/cp.c 2006-12-05 10:17:33.000000000
+0100
+++ ksh93_2007_05_15/src/lib/libcmd/cp.c 2007-05-08 23:14:23.000000000
+0200
@@ -229,8 +229,6 @@
FTSENT* sub;
struct stat st;
- if (cmdquit())
- return -1;
if (ent->fts_info == FTS_DC)
{
error(2, "%s: directory causes cycle", ent->fts_path);
@@ -904,7 +902,7 @@
state.flags |= FTS_TOP;
if (fts = fts_open(argv, state.flags, NiL))
{
- while ((ent = fts_read(fts)) && !visit(&state, ent));
+ while (!sh_checksig(context) && (ent = fts_read(fts)) &&
!visit(&state, ent));
fts_close(fts);
}
else if (state.link != pathsetlink)
diff -r -N -u ksh93_2007_04_18/src/lib/libcmd/date.c
ksh93_2007_05_15/src/lib/libcmd/date.c
--- ksh93_2007_04_18/src/lib/libcmd/date.c 2007-03-29 18:52:51.000000000
+0200
+++ ksh93_2007_05_15/src/lib/libcmd/date.c 2007-05-09 06:07:11.000000000
+0200
@@ -206,7 +206,7 @@
*/
static int
-settime(const char* cmd, Time_t now, int adjust, int network)
+settime(void* context, const char* cmd, Time_t now, int adjust, int network)
{
char* s;
char** argv;
@@ -236,7 +236,7 @@
}
*argv++ = buf;
*argv = 0;
- if (!procrun(s, args))
+ if (!sh_run(context, argv - args, args))
return 0;
}
return -1;
@@ -473,7 +473,7 @@
tmxfmt(buf, sizeof(buf), format, now);
sfprintf(sfstdout, "%s\n", buf);
}
- else if (settime(cmd, now, increment, network))
+ else if (settime(context, cmd, now, increment, network))
error(ERROR_SYSTEM|3, "cannot set system time");
}
while (fmts != &fmt)
diff -r -N -u ksh93_2007_04_18/src/lib/libcmd/fds.c
ksh93_2007_05_15/src/lib/libcmd/fds.c
--- ksh93_2007_04_18/src/lib/libcmd/fds.c 2006-11-01 21:16:28.000000000
+0100
+++ ksh93_2007_05_15/src/lib/libcmd/fds.c 2007-05-09 20:53:09.000000000
+0200
@@ -21,7 +21,7 @@
#pragma prototyped
static const char usage[] =
-"[-?\n@(#)$Id: fds (AT&T Research) 2006-10-26 $\n]"
+"[-?\n@(#)$Id: fds (AT&T Research) 2007-05-09 $\n]"
USAGE_LICENSE
"[+NAME?fds - list open file descriptor status]"
"[+DESCRIPTION?\bfds\b lists the status for each open file descriptor. "
@@ -29,7 +29,7 @@
"calling shell, otherwise it lists the file descriptors passed across "
"\bexec\b(2).]"
"[l:long?List file descriptor details.]"
-"[+SEE ALSO?\blogname\b(1), \bwho\b(1), \bgetgroups\b(2)]"
+"[+SEE ALSO?\blogname\b(1), \bwho\b(1), \bgetgroups\b(2), \bgetsockname\b(2),
\bgetsockopts\b(2), ]"
;
#include <cmd.h>
@@ -52,6 +52,108 @@
#define major(x) (int)(((unsigned int)(x)>>8)&0xff)
#endif
+#undef getconf
+#define getconf(x) strtol(astconf(x,NiL,NiL),NiL,0)
+
+#ifdef S_IFSOCK
+
+typedef struct NV_s
+{
+ const char* name;
+ int value;
+} NV_t;
+
+static const NV_t family[] =
+{
+#ifdef AF_LOCAL
+ "pipe", AF_LOCAL,
+#endif
+#ifdef AF_UNIX
+ "pipe", AF_UNIX,
+#endif
+#ifdef AF_FILE
+ "FILE", AF_FILE,
+#endif
+#ifdef AF_INET
+ "INET", AF_INET,
+#endif
+#ifdef AF_AX25
+ "AX25", AF_AX25,
+#endif
+#ifdef AF_IPX
+ "IPX", AF_IPX,
+#endif
+#ifdef AF_APPLETALK
+ "APPLETALK", AF_APPLETALK,
+#endif
+#ifdef AF_NETROM
+ "NETROM", AF_NETROM,
+#endif
+#ifdef AF_BRIDGE
+ "BRIDGE", AF_BRIDGE,
+#endif
+#ifdef AF_ATMPVC
+ "ATMPVC", AF_ATMPVC,
+#endif
+#ifdef AF_X25
+ "X25", AF_X25,
+#endif
+#ifdef AF_INET6
+ "INET6", AF_INET6,
+#endif
+#ifdef AF_ROSE
+ "ROSE", AF_ROSE,
+#endif
+#ifdef AF_DECnet
+ "DECnet", AF_DECnet,
+#endif
+#ifdef AF_NETBEUI
+ "NETBEUI", AF_NETBEUI,
+#endif
+#ifdef AF_SECURITY
+ "SECURITY", AF_SECURITY,
+#endif
+#ifdef AF_KEY
+ "KEY", AF_KEY,
+#endif
+#ifdef AF_NETLINK
+ "NETLINK", AF_NETLINK,
+#endif
+#ifdef AF_ROUTE
+ "ROUTE", AF_ROUTE,
+#endif
+#ifdef AF_PACKET
+ "PACKET", AF_PACKET,
+#endif
+#ifdef AF_ASH
+ "ASH", AF_ASH,
+#endif
+#ifdef AF_ECONET
+ "ECONET", AF_ECONET,
+#endif
+#ifdef AF_ATMSVC
+ "ATMSVC", AF_ATMSVC,
+#endif
+#ifdef AF_SNA
+ "SNA", AF_SNA,
+#endif
+#ifdef AF_IRDA
+ "IRDA", AF_IRDA,
+#endif
+#ifdef AF_PPPOX
+ "PPPOX", AF_PPPOX,
+#endif
+#ifdef AF_WANPIPE
+ "WANPIPE", AF_WANPIPE,
+#endif
+#ifdef AF_BLUETOOTH
+ "BLUETOOTH", AF_BLUETOOTH,
+#endif
+ 0
+};
+
+#endif
+
int
b_fds(int argc, char** argv, void* context)
{
@@ -61,13 +163,21 @@
register char* x;
int flags;
int details;
+ int open_max;
struct stat st;
#ifdef S_IFSOCK
struct sockaddr_in addr;
+ char* a;
+ unsigned char* b;
+ unsigned char* e;
+ socklen_t addrlen;
socklen_t len;
int type;
+ int port;
int prot;
- char num[32];
+ char nam[256];
+ char num[64];
+ char fam[64];
#endif
cmdinit(argc, argv, context, ERROR_CATALOG, 0);
@@ -91,78 +201,142 @@
argv += opt_info.index;
if (error_info.errors || *argv)
error(ERROR_USAGE|4, "%s", optusage(NiL));
- for (i = 0; i <= OPEN_MAX; i++)
+ if ((open_max = getconf("OPEN_MAX")) <= 0)
+ open_max = OPEN_MAX;
+ for (i = 0; i <= open_max; i++)
+ {
if (fstat(i, &st))
- /* not open */;
- else if (details)
{
- if ((flags = fcntl(i, F_GETFL, (char*)0)) == -1)
- m = "--";
- else
- switch (flags & (O_RDONLY|O_WRONLY|O_RDWR))
- {
- case O_RDONLY:
- m = "r-";
- break;
- case O_WRONLY:
- m = "-w";
- break;
- case O_RDWR:
- m = "rw";
- break;
- default:
- m = "??";
- break;
- }
- x = (fcntl(i, F_GETFD, (char*)0) > 0) ? "x" : "-";
- if (isatty(i) && (s = ttyname(i)))
- sfprintf(sfstdout, "%02d %s%s %s %s\n", i, m,
x, fmtmode(st.st_mode, 0), s);
+ /* not open */
+ continue;
+ }
+ if (!details)
+ {
+ sfprintf(sfstdout, "%d\n", i);
+ continue;
+ }
+ if ((flags = fcntl(i, F_GETFL, (char*)0)) == -1)
+ m = "--";
+ else
+ switch (flags & (O_RDONLY|O_WRONLY|O_RDWR))
+ {
+ case O_RDONLY:
+ m = "r-";
+ break;
+ case O_WRONLY:
+ m = "-w";
+ break;
+ case O_RDWR:
+ m = "rw";
+ break;
+ default:
+ m = "??";
+ break;
+ }
+ x = (fcntl(i, F_GETFD, (char*)0) > 0) ? "x" : "-";
+ if (isatty(i) && (s = ttyname(i)))
+ {
+ sfprintf(sfstdout, "%02d %s%s %s %s\n", i, m, x,
fmtmode(st.st_mode, 0), s);
+ continue;
+ }
#ifdef S_IFSOCK
- else if ((len = sizeof(addr))
- && !getsockname(i, (struct sockaddr*)&addr,
(void*)&len)
- && len == sizeof(addr)
- && addr.sin_family == AF_INET
+ addrlen = sizeof(addr);
+ memset(&addr, 0, addrlen);
+ if (!getsockname(i, (struct sockaddr*)&addr, (void*)&addrlen))
+ {
+ type = 0;
+ prot = 0;
#ifdef SO_TYPE
- && (len = sizeof(type))
- && !getsockopt(i, SOL_SOCKET, SO_TYPE,
(void*)&type, (void*)&len)
- && len == sizeof(type)
-#else
- && !(type = 0)
+ len = sizeof(type);
+ if (getsockopt(i, SOL_SOCKET, SO_TYPE, (void*)&type,
(void*)&len))
+ type = -1;
#endif
#ifdef SO_PROTOTYPE
- && (len = sizeof(prot))
- && (!getsockopt(i, SOL_SOCKET, SO_PROTOTYPE,
(void*)&prot, (void*)&len) || !(prot = 0))
-#else
- && !(prot = 0)
+ len = sizeof(prot);
+ if (getsockopt(i, SOL_SOCKET, SO_PROTOTYPE,
(void*)&prot, (void*)&len))
+ prot = -1;
#endif
- )
+ if (!st.st_mode)
+ st.st_mode = S_IFSOCK|S_IRUSR|S_IWUSR;
+ s = 0;
+ switch (type)
{
- if (!st.st_mode)
- st.st_mode = S_IFSOCK|S_IRUSR|S_IWUSR;
- s = 0;
- switch (type)
+ case SOCK_DGRAM:
+ switch (addr.sin_family)
{
- case SOCK_DGRAM:
+ case AF_INET:
+#ifdef AF_INET6
+ case AF_INET6:
+#endif
s = "udp";
break;
- case SOCK_STREAM:
- if (prot == 0)
- s = "tcp";
+ }
+ break;
+ case SOCK_STREAM:
+ switch (addr.sin_family)
+ {
+ case AF_INET:
+#ifdef AF_INET6
+ case AF_INET6:
+#endif
#ifdef IPPROTO_SCTP
- else if (prot == IPPROTO_SCTP)
+ if (prot == IPPROTO_SCTP)
s = "sctp";
+ else
#endif
+ s = "tcp";
break;
}
- if (!s)
- sfprintf(sfstdout, s = num,
"type.%d.prot.%d", type, prot);
- sfprintf(sfstdout, "%02d %s%s %s
/dev/%s/%s/%d\n", i, m, x, fmtmode(st.st_mode, 0), s, inet_ntoa(addr.sin_addr),
ntohs(addr.sin_port));
+ break;
+#ifdef SOCK_RAW
+ case SOCK_RAW:
+ s = "raw";
+ break;
+#endif
+#ifdef SOCK_RDM
+ case SOCK_RDM:
+ s = "rdm";
+ break;
+#endif
+#ifdef SOCK_SEQPACKET
+ case SOCK_SEQPACKET:
+ s = "seqpacket";
+ break;
+#endif
}
+ if (!s)
+ {
+ for (type = 0; family[type].name &&
family[type].value != addr.sin_family; type++);
+ if (!(s = (char*)family[type].name))
+ sfsprintf(s = num, sizeof(num),
"family.%d", addr.sin_family);
+ }
+ port = 0;
+#ifdef INET6_ADDRSTRLEN
+ if (a = (char*)inet_ntop(addr.sin_family,
&addr.sin_addr, nam, sizeof(nam)))
+ port = ntohs(addr.sin_port);
+ else
#endif
+ if (addr.sin_family == AF_INET)
+ {
+ a = inet_ntoa(addr.sin_addr);
+ port = ntohs(addr.sin_port);
+ }
+ else
+ {
+ a = fam;
+ e = (b = (unsigned char*)&addr) + addrlen;
+ while (b < e && a < &fam[sizeof(fam)-1])
+ a += sfsprintf(a, &fam[sizeof(fam)] - a
- 1, ".%d", *b++);
+ a = fam + 1;
+ }
+ if (port)
+ sfprintf(sfstdout, "%02d %s%s %s
/dev/%s/%s/%d\n", i, m, x, fmtmode(st.st_mode, 0), s, a, port);
else
- sfprintf(sfstdout, "%02d %s%s %s
/dev/inode/%u/%u\n", i, m, x, fmtmode(st.st_mode, 0), st.st_dev, st.st_ino);
+ sfprintf(sfstdout, "%02d %s%s %s /dev/%s/%s\n",
i, m, x, fmtmode(st.st_mode, 0), s, a);
+ continue;
}
- else
- sfprintf(sfstdout, "%d\n", i);
+#endif
+ sfprintf(sfstdout, "%02d %s%s %s /dev/inode/%u/%u\n", i, m, x,
fmtmode(st.st_mode, 0), st.st_dev, st.st_ino);
+ }
return 0;
}
diff -r -N -u ksh93_2007_04_18/src/lib/libcmd/getconf.c
ksh93_2007_05_15/src/lib/libcmd/getconf.c
--- ksh93_2007_04_18/src/lib/libcmd/getconf.c 2007-02-07 21:08:17.000000000
+0100
+++ ksh93_2007_05_15/src/lib/libcmd/getconf.c 2007-05-09 06:09:07.000000000
+0200
@@ -121,7 +121,7 @@
typedef struct Path_s
{
- char* path;
+ const char* path;
int len;
} Path_t;
@@ -131,8 +131,8 @@
register char* name;
register char* path;
register char* value;
- register char* s;
- register char* t;
+ register const char* s;
+ register const char* t;
char* pattern;
char* native;
char* cmd;
@@ -387,7 +387,8 @@
* don't blame us for crappy diagnostics
*/
- if ((n = procrun(cmd, oargv)) >= EXIT_NOEXEC)
+ oargv[0] = cmd;
+ if ((n = sh_run(context, argc, oargv)) >= EXIT_NOEXEC)
error(ERROR_SYSTEM|2, "%s: exec error [%d]", cmd, n);
return n;
}
diff -r -N -u ksh93_2007_04_18/src/lib/libcmd/join.c
ksh93_2007_05_15/src/lib/libcmd/join.c
--- ksh93_2007_04_18/src/lib/libcmd/join.c 2006-11-02 16:39:53.000000000
+0100
+++ ksh93_2007_05_15/src/lib/libcmd/join.c 2007-05-08 23:15:39.000000000
+0200
@@ -134,6 +134,7 @@
int ignorecase;
char* same;
int samesize;
+ void* context;
File_t file[2];
} Join_t;
@@ -269,7 +270,7 @@
register char* cp;
register int n = 0;
- if (cmdquit())
+ if (sh_checksig(jp->context))
return 0;
if (discard && fp->discard)
sfraise(fp->iop, SFSK_DISCARD, NiL);
@@ -666,6 +667,7 @@
#endif
if (!(jp = init()))
error(ERROR_system(1),"out of space");
+ jp->context = context;
for (;;)
{
switch (n = optget(argv, usage))
diff -r -N -u ksh93_2007_04_18/src/lib/libcmd/Makefile
ksh93_2007_05_15/src/lib/libcmd/Makefile
--- ksh93_2007_04_18/src/lib/libcmd/Makefile 2007-02-26 17:32:20.000000000
+0100
+++ ksh93_2007_05_15/src/lib/libcmd/Makefile 2007-05-08 23:56:08.000000000
+0200
@@ -26,7 +26,7 @@
sumlib.o : +lsum
$(AR) x $(*:O=1) $(<)
-$(INCLUDEDIR) :INSTALLPROTO: cmd.h cmdext.h cmdlist.h
+$(INCLUDEDIR) :INSTALLPROTO: cmd.h cmdext.h cmdlist.h shcmd.h
"win32*" :NOOPTIMIZE: id.c
diff -r -N -u ksh93_2007_04_18/src/lib/libcmd/Mamfile
ksh93_2007_05_15/src/lib/libcmd/Mamfile
--- ksh93_2007_04_18/src/lib/libcmd/Mamfile 2007-04-18 20:07:33.000000000
+0200
+++ ksh93_2007_05_15/src/lib/libcmd/Mamfile 2007-05-16 05:16:05.000000000
+0200
@@ -432,6 +432,8 @@
exec - else mv 1.${COTEMP}.h cmdext.h
exec - fi
done cmdext.h dontcare generated
+make shcmd.h implicit
+done shcmd.h dontcare
make ${PACKAGE_ast_INCLUDE}/stak.h implicit
prev ${PACKAGE_ast_INCLUDE}/stk.h implicit
prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
@@ -778,6 +780,14 @@
exec - else mv 1.${COTEMP}.x ${PACKAGE_ast_INCLUDE}/cmdlist.h
exec - fi
done ${PACKAGE_ast_INCLUDE}/cmdlist.h generated
+make ${PACKAGE_ast_INCLUDE}/shcmd.h
+prev shcmd.h
+exec - proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o
since=1992,author=gsf+dgk' shcmd.h > 1.${COTEMP}.x
+exec - if cmp 2>/dev/null -s ${PACKAGE_ast_INCLUDE}/shcmd.h 1.${COTEMP}.x
+exec - then rm -f 1.${COTEMP}.x
+exec - else mv 1.${COTEMP}.x ${PACKAGE_ast_INCLUDE}/shcmd.h
+exec - fi
+done ${PACKAGE_ast_INCLUDE}/shcmd.h generated
done install virtual
make test
done test dontcare virtual
diff -r -N -u ksh93_2007_04_18/src/lib/libcmd/mkdir.c
ksh93_2007_05_15/src/lib/libcmd/mkdir.c
--- ksh93_2007_04_18/src/lib/libcmd/mkdir.c 2006-11-01 21:16:49.000000000
+0100
+++ ksh93_2007_05_15/src/lib/libcmd/mkdir.c 2007-04-26 02:39:36.000000000
+0200
@@ -27,7 +27,7 @@
*/
static const char usage[] =
-"[-?\n@(#)$Id: mkdir (AT&T Research) 2006-08-27 $\n]"
+"[-?\n@(#)$Id: mkdir (AT&T Research) 2007-04-25 $\n]"
USAGE_LICENSE
"[+NAME?mkdir - make directories]"
"[+DESCRIPTION?\bmkdir\b creates one or more directories. By "
@@ -70,6 +70,7 @@
register int pflag = 0;
char* name;
mode_t dmode;
+ struct stat st;
cmdinit(argc, argv, context, ERROR_CATALOG, 0);
while (n = optget(argv, usage)) switch (n)
@@ -142,7 +143,19 @@
error(ERROR_system(0), "%s:", name);
break;
}
- *arg = n;
+ if (!(*arg = n) && (mode &
(S_ISVTX|S_ISUID|S_ISGID)))
+ {
+ if (stat(name, &st))
+ {
+ error(ERROR_system(0), "%s:
cannot stat", name);
+ break;
+ }
+ if ((st.st_mode &
(S_ISVTX|S_ISUID|S_ISGID)) != (mode & (S_ISVTX|S_ISUID|S_ISGID)) && chmod(name,
mode))
+ {
+ error(ERROR_system(0), "%s:
cannot change mode from %s to %s", name, fmtperm(st.st_mode &
(S_ISVTX|S_ISUID|S_ISGID)), fmtperm(mode));
+ break;
+ }
+ }
}
}
}
diff -r -N -u ksh93_2007_04_18/src/lib/libcmd/pathchk.c
ksh93_2007_05_15/src/lib/libcmd/pathchk.c
--- ksh93_2007_04_18/src/lib/libcmd/pathchk.c 2006-11-01 21:16:58.000000000
+0100
+++ ksh93_2007_05_15/src/lib/libcmd/pathchk.c 2007-04-24 11:58:24.000000000
+0200
@@ -78,9 +78,9 @@
*/
static long mypathconf(const char *path, int op)
{
- register long r;
+ register long r;
- static const char* ops[] = { "NAME_MAX", "PATH_MAX" };
+ static const char* const ops[] = { "NAME_MAX", "PATH_MAX" };
errno=0;
if((r=strtol(astconf(ops[op], path, NiL), NiL, 0))<0 && errno==0)
diff -r -N -u ksh93_2007_04_18/src/lib/libcmd/RELEASE
ksh93_2007_05_15/src/lib/libcmd/RELEASE
--- ksh93_2007_04_18/src/lib/libcmd/RELEASE 2007-03-29 18:54:35.000000000
+0200
+++ ksh93_2007_05_15/src/lib/libcmd/RELEASE 2007-05-11 21:32:32.000000000
+0200
@@ -1,4 +1,10 @@
-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/src/lib/libcmd/rm.c
ksh93_2007_05_15/src/lib/libcmd/rm.c
--- ksh93_2007_04_18/src/lib/libcmd/rm.c 2006-11-21 10:36:33.000000000
+0100
+++ ksh93_2007_05_15/src/lib/libcmd/rm.c 2007-05-09 05:54:53.000000000
+0200
@@ -108,8 +108,6 @@
int v;
struct stat st;
- if (cmdquit())
- return -1;
if (ent->fts_info == FTS_NS || ent->fts_info == FTS_ERR ||
ent->fts_info == FTS_SLNONE)
{
if (!state->force)
@@ -403,7 +401,7 @@
set3d = 0;
if (fts = fts_open(argv, FTS_PHYSICAL, NiL))
{
- while ((ent = fts_read(fts)) && !rm(&state, ent));
+ while (!sh_checksig(context) && (ent = fts_read(fts)) &&
!rm(&state, ent));
fts_close(fts);
}
else if (!state.force)
diff -r -N -u ksh93_2007_04_18/src/lib/libcmd/shcmd.h
ksh93_2007_05_15/src/lib/libcmd/shcmd.h
--- ksh93_2007_04_18/src/lib/libcmd/shcmd.h 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_05_15/src/lib/libcmd/shcmd.h 2007-05-09 06:11:15.000000000
+0200
@@ -0,0 +1,80 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1992-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> *
+* *
+***********************************************************************/
+#pragma prototyped
+
+/*
+ * ksh builtin command api
+ */
+
+#ifndef _SHCMD_H
+#define _SHCMD_H 1
+
+#ifndef SH_VERSION
+# define Shell_t void
+#endif
+#ifndef NV_DEFAULT
+# define Namval_t void
+#endif
+#ifndef ERROR_NOTIFY
+# define ERROR_NOTIFY 1
+#endif
+
+typedef int (*Shbltin_f)(int, char**, void*);
+
+#undef Shbltin_t
+typedef struct Shbltin_s
+{
+ Shell_t *shp;
+ void *ptr;
+ int version;
+ int (*shrun)(int, char**);
+ int (*shtrap)(const char*, int);
+ void (*shexit)(int);
+ Namval_t *(*shbltin)(const char*, Shbltin_f, void*);
+ unsigned char notify;
+ unsigned char sigset;
+ unsigned char nosfio;
+ Namval_t *bnode;
+ Namval_t *vnode;
+ char *data;
+ int flags;
+} Shbltin_t;
+
+#if defined(SH_VERSION) || defined(_SH_PRIVATE)
+# undef Shell_t
+# undef Namval_t
+#else
+# define sh_run(c, ac, av) ((c)?(*((Shbltin_t*)(c))->shrun)(ac,av):-1)
+# define sh_system(c,str)
((c)?(*((Shbltin_t*)(c))->shtrap)(str,0):system(str))
+# define sh_exit(c,n)
((c)?(*((Shbltin_t*)(c))->shexit)(n):exit(n))
+# define sh_checksig(c) ((c) && ((Shbltin_t*)(c))->sigset)
+# if defined(SFIO_VERSION) || defined(_AST_H)
+# define LIB_INIT(c)
+# else
+# define LIB_INIT(c) ((c) && (((Shbltin_t*)(c))->nosfio = 1))
+# endif
+# ifndef _CMD_H
+# define cmdinit(ac,av,c,cat,flg) do { if((ac)<=0) return(0); \
+ (((Shbltin_t*)(c))->notify = ((flg)&ERROR_NOTIFY)?1:0);} while(0)
+# endif
+#endif
+
+#endif
diff -r -N -u ksh93_2007_04_18/src/lib/libcmd/uname.c
ksh93_2007_05_15/src/lib/libcmd/uname.c
--- ksh93_2007_04_18/src/lib/libcmd/uname.c 2007-01-22 21:49:20.000000000
+0100
+++ ksh93_2007_05_15/src/lib/libcmd/uname.c 2007-05-09 06:09:41.000000000
+0200
@@ -28,7 +28,7 @@
*/
static const char usage[] =
-"[-?\n@(#)$Id: uname (AT&T Research) 2007-01-22 $\n]"
+"[-?\n@(#)$Id: uname (AT&T Research) 2007-04-19 $\n]"
USAGE_LICENSE
"[+NAME?uname - identify the current system ]"
"[+DESCRIPTION?By default \buname\b writes the operating system name to"
@@ -61,7 +61,9 @@
"[f:list?List all \bsysinfo\b(2) names and values, one per line.]"
"[S:sethost?Set the hostname or nodename to \aname\a. No output is"
" written to standard output.]:[name]"
-
+"\n"
+"\n[ name ... ]\n"
+"\n"
"[+SEE ALSO?\bhostname\b(1), \bgetconf\b(1), \buname\b(2),"
" \bsysconf\b(2), \bsysinfo\b(2)]"
;
@@ -327,7 +329,7 @@
if (!streq(argv[0], s) && (!eaccess(s, X_OK) ||
!eaccess(s+=4, X_OK)))
{
argv[0] = s;
- return procrun(s, argv);
+ return sh_run(context, argc, argv);
}
error(2, "%s", opt_info.arg);
break;
@@ -367,7 +369,7 @@
while (t < e && (n = *s++))
*t++ = islower(n) ? toupper(n) : n;
*t = 0;
- sfprintf(sfstdout, "%s%c", *(t = astconf(buf, NiL,
NiL)) ? t : "unknown", *argv ? ' ' : '\n');
+ sfprintf(sfstdout, "%s%c", *(t = astconf(buf, NiL,
NiL)) ? t : *(t = astconf(buf+3, NiL, NiL)) ? t : "unknown", *argv ? ' ' :
'\n');
}
}
else
diff -r -N -u ksh93_2007_04_18/src/lib/libsum/sum-md5.c
ksh93_2007_05_15/src/lib/libsum/sum-md5.c
--- ksh93_2007_04_18/src/lib/libsum/sum-md5.c 2007-02-23 19:09:12.000000000
+0100
+++ ksh93_2007_05_15/src/lib/libsum/sum-md5.c 2007-04-24 12:06:53.000000000
+0200
@@ -65,7 +65,7 @@
unsigned char digest_sum[16]; /* sum of all digests */
} Md5_t;
-static unsigned char md5_pad[] =
+static const unsigned char md5_pad[] =
{
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,