On 3/30/07, Glenn Fowler <gsf at research.att.com> wrote:
>
> the AT&T Software Technology ast 2007-03-28 source and binary release
> has been posted to the download site
> http://www.research.att.com/sw/download/
> the notes and changes link has details on the release
>
> included is the ast-ksh package which contains the latest ksh93
> source for the ksh93 solaris integration project
>
> -- Glenn Fowler -- AT&T Research, Florham Park NJ --
patch diff from 20070111 to 20070328 attached
--
_ Felix Schulte
_|_|_ mailto:felix.schulte at gmail.com
(0 0)
ooO--(_)--Ooo
-------------- next part --------------
diff -r -N -u ksh93_2007_01_11/lib/package/ast-ksh.html
ksh93_2007_03_28/lib/package/ast-ksh.html
--- ksh93_2007_01_11/lib/package/ast-ksh.html 2007-01-12 10:54:36.000000000
+0100
+++ ksh93_2007_03_28/lib/package/ast-ksh.html 2007-03-29 19:07:08.000000000
+0200
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
-<META name="generator" content="mm2html (AT&T Labs Research) 2006-10-31">
+<META name="generator" content="mm2html (AT&T Labs Research) 2007-02-09">
<META name="description" content="ast-ksh package">
<META name="keywords" content="software, package">
<TITLE> ast-ksh package </TITLE>
@@ -22,7 +22,7 @@
<TABLE align=center border=0 bordercolor=white cellpadding=0 cellspacing=0
frame=void rules=none width=99% >
<TBODY>
<TR><TD align=left>
-<A href="#ksh93">ksh93</A> </TD><TD
align=left> libast </TD><TD
align=left> libcmd </TD><TD
align=left> libdll</TD></TR>
+<A href="#ksh93">ksh93</A> </TD><TD
align=left> libast </TD><TD
align=left> libcmd </TD><TD
align=left> libdll </TD><TD
align=left> libsum</TD></TR>
</TBODY></TABLE></TD></TR></TBODY></TABLE>
<P>
This package is a superset of the following package: ksh; you won't need this
if you download ast-ksh.
@@ -179,6 +179,7 @@
<TD align=left><A href="#ksh93 changes">ksh93</A></TD>
<TD align=left><A href="#libast changes">libast</A></TD>
<TD align=left><A href="#libcmd changes">libcmd</A></TD>
+<TD align=left><A href="#libsum changes">libsum</A></TD>
<TD align=left><A href="#libdll changes">libdll</A></TD>
</TR></TABLE>
</FONT></B>
@@ -192,6 +193,33 @@
<P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="ksh93
changes">ksh93 changes</A></H3></FONT></FONT></CENTER>
<PRE>
+07-03-08 --- Release ksh93s+ ---
+07-03-08 A bug in which set +o output command line options has been fixed.
+07-03-08 A bug in which an error in read (for example, an invalid variable
+ name), could leave the terminal in raw mode has been fixed.
+07-03-06 A bug in which read could core dump when specified with an array
+ variable with a subscript that is an arithmetic expression has
+ been fixed.
+07-03-06 Several serious bugs with the restricted shell were reported and
+ fixed.
+07-03-02 If a job is stopped, and subsequently restarted with a CONT
+ signal and exits normally, ksh93 was incorrectly exiting with
+ the exit status of the stop signal number.
+07-02-26 M-^L added to emacs mode to clear the screen.
+07-02-26 A bug in which setting a variable readonly in a subshell would
+ cause an unset error when the subshell completed has been fixed.
+07-02-19 The format with printf uses the new = flag to center the output.
+07-02-19 A bug in which ksh93 did not allow multibyte characters in
+ identifier names has been fixed.
+07-02-19 A bug introduced in ksh93 that causes global compound variable
+ definitions inside functions to exit with "no parent" has been fixed.
+07-02-19 A bug in which using compound commands in process redirection
+ arguments would give syntax errors <(...) and >(...) has been
fixed.
+07-01-29 A bug which caused the shell to core dump which can occur when a
+ built-in exits without closing files that it opens has been fixed.
+07-01-26 A bug in which ~(E) in patterns containing that are not inside
()
+ has been fixed.
+
06-12-29 --- Release ksh93s ---
06-12-29 A bug in which the value of IFS could be changed after a command
substitution has been fixed.
@@ -1624,6 +1652,30 @@
<P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libast
changes">libast changes</A></H3></FONT></FONT></CENTER>
<PRE>
+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 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
+07-02-27 comp/conf.sh: handle native getconf invalid numeric values
+07-02-21 comp/conf.sh,comp/conf.tab: handle SSIZE_MAX vs _POSIX_SSIZE_MAX
+07-02-20 sfio/sfvprintf.c: handle SF_WCWIDTH justification
+07-02-14 features/common: cover <stdint.h>, move to int_(bits)_t
+07-02-14 include/int.h: drop
+07-02-14 include/sfio.h: add SF_WCWIDTH
+07-02-12 comp/conf.sh: fix CONF_LIMIT bug that missed ULONG_MAX etc.
+07-02-12 comp/conf.tab: *LONGLONG* => *LLONG* to match posix
+07-02-12 features/float: *LONGLONG* => *LLONG* to match posix
+07-02-12 port/astconf.c: handle CONF_LIMITS_DEF with no deferral
+07-02-12 stdio/vasprintf.c: add trailing ' ' -- doh
+07-02-04 string/fmtelapsed.c: fix naive multi month/year logic
+07-02-02 misc/optget.c: add --??posix for getopts(1)/getopt(3)
+07-01-26 string/chresc.c: use mbchar()
+07-01-26 misc/optget.c: handle "o:-:" usage for old-style long options
+07-01-22 sfio/sfdisc.c,sfpool.c: handle push on streams with pending peek
+07-01-22 include/sfio.h: mv Sfieee_t to sfio/sfhdr.h
+07-01-17 tm/tmxfmt.c: fix terminating nil logic which clobbered size-1
07-01-11 misc/stk.c: a 2 day marathon bug fix (can we release now dr ek?)
07-01-05 comp/spawnveg.c: posix_spawnattr_setflags(POSIX_SPAWN_SETPGROUP)
07-01-05 misc/error.c: fix multibyte vs. printable logic
@@ -3022,6 +3074,18 @@
<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-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)
+07-02-24 Makefile: tweak cmdext.h action for --mam bootstrap
+07-02-09 Makefile: { cmdext.h cmdlist.h } depend on *.c list!
+07-02-09 Makefile: +lsum to bring in static -lsum (no dynamic right now)
+07-02-07 cksum.c: move from src/cmd/std with ftwalk => fts
+07-02-07 getconf.c: handle /bin == /usr/bin in defer logic
+07-01-26 chmod.c: don't FTS_FOLLOW if !FTS_PHYSICAL
+07-01-23 cut.c: Cut_t variable dimension list[] must be last member
+07-01-22 uname.c: fix -h typo that clobbered astconf() state -- ouch
07-01-02 fmt.c: fix buffer splice off by one bug -- what else
06-11-23 cmd.h: because of proto cmdinit cannot be a function like macro
06-11-21 cp.c: fix 06-10-31 const dot[] readonly assignment
@@ -3230,6 +3294,20 @@
</PRE>
<P>
+<P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libsum
changes">libsum changes</A></H3></FONT></FONT></CENTER>
+<PRE>
+
+05-02-14 sumlib.c: split into sum-*.c
+ sum-sha2.c: add SHA { 256 384 512 }
+04-02-29 Makefile: compile with $(CC.PIC) for codexlib/sum $(CC.DLL)
+03-12-16 add { crc prng } generic methods and maps[] to these
methods
+03-12-16 sum.h,sumlib.c: add sumdata()
+03-09-29 sumlib.c: fix FNV to use ^ instead of +
+03-04-28 sumlib.c: drop md5 `zeroize' for performance
+ sumlib.c: add FIPS 180-1 SHA-1
+
+</PRE>
+<P>
<P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libdll
changes">libdll changes</A></H3></FONT></FONT></CENTER>
<PRE>
@@ -3280,7 +3358,7 @@
<TR>
<TD align=left></TD>
<TD align=center></TD>
-<TD align=right>January 12, 2007</TD>
+<TD align=right>March 29, 2007</TD>
</TR>
</TABLE>
<P>
diff -r -N -u ksh93_2007_01_11/lib/package/ast-ksh.pkg
ksh93_2007_03_28/lib/package/ast-ksh.pkg
--- ksh93_2007_01_11/lib/package/ast-ksh.pkg 2005-02-10 10:00:52.000000000
+0100
+++ ksh93_2007_03_28/lib/package/ast-ksh.pkg 2007-02-23 19:05:30.000000000
+0100
@@ -1,4 +1,4 @@
-ast-ksh :PACKAGE: ksh93 libast libcmd libdll
+ast-ksh :PACKAGE: ksh93 libast libcmd libsum libdll
:COVERS: ksh
diff -r -N -u ksh93_2007_01_11/lib/package/ast-ksh.README
ksh93_2007_03_28/lib/package/ast-ksh.README
--- ksh93_2007_01_11/lib/package/ast-ksh.README 2007-01-12 10:54:35.000000000
+0100
+++ ksh93_2007_03_28/lib/package/ast-ksh.README 2007-03-29 19:07:08.000000000
+0200
@@ -92,6 +92,33 @@
:::::::: ksh93 ::::::::
+07-03-08 --- Release ksh93s+ ---
+07-03-08 A bug in which set +o output command line options has been fixed.
+07-03-08 A bug in which an error in read (for example, an invalid variable
+ name), could leave the terminal in raw mode has been fixed.
+07-03-06 A bug in which read could core dump when specified with an array
+ variable with a subscript that is an arithmetic expression has
+ been fixed.
+07-03-06 Several serious bugs with the restricted shell were reported and
+ fixed.
+07-03-02 If a job is stopped, and subsequently restarted with a CONT
+ signal and exits normally, ksh93 was incorrectly exiting with
+ the exit status of the stop signal number.
+07-02-26 M-^L added to emacs mode to clear the screen.
+07-02-26 A bug in which setting a variable readonly in a subshell would
+ cause an unset error when the subshell completed has been fixed.
+07-02-19 The format with printf uses the new = flag to center the output.
+07-02-19 A bug in which ksh93 did not allow multibyte characters in
+ identifier names has been fixed.
+07-02-19 A bug introduced in ksh93 that causes global compound variable
+ definitions inside functions to exit with "no parent" has been fixed.
+07-02-19 A bug in which using compound commands in process redirection
+ arguments would give syntax errors <(...) and >(...) has been fixed.
+07-01-29 A bug which caused the shell to core dump which can occur when a
+ built-in exits without closing files that it opens has been fixed.
+07-01-26 A bug in which ~(E) in patterns containing \ that are not inside ()
+ has been fixed.
+
06-12-29 --- Release ksh93s ---
06-12-29 A bug in which the value of IFS could be changed after a command
substitution has been fixed.
@@ -1521,6 +1548,30 @@
:::::::: libast ::::::::
+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 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
+07-02-27 comp/conf.sh: handle native getconf invalid numeric values
+07-02-21 comp/conf.sh,comp/conf.tab: handle SSIZE_MAX vs _POSIX_SSIZE_MAX
+07-02-20 sfio/sfvprintf.c: handle SF_WCWIDTH justification
+07-02-14 features/common: cover <stdint.h>, move to int_(bits)_t
+07-02-14 include/int.h: drop
+07-02-14 include/sfio.h: add SF_WCWIDTH
+07-02-12 comp/conf.sh: fix CONF_LIMIT bug that missed ULONG_MAX etc.
+07-02-12 comp/conf.tab: *LONGLONG* => *LLONG* to match posix
+07-02-12 features/float: *LONGLONG* => *LLONG* to match posix
+07-02-12 port/astconf.c: handle CONF_LIMITS_DEF with no deferral
+07-02-12 stdio/vasprintf.c: add trailing '\0' -- doh
+07-02-04 string/fmtelapsed.c: fix naive multi month/year logic
+07-02-02 misc/optget.c: add --??posix for getopts(1)/getopt(3)
+07-01-26 string/chresc.c: use mbchar()
+07-01-26 misc/optget.c: handle "o:-:" usage for old-style long options
+07-01-22 sfio/sfdisc.c,sfpool.c: handle push on streams with pending peek
+07-01-22 include/sfio.h: mv Sfieee_t to sfio/sfhdr.h
+07-01-17 tm/tmxfmt.c: fix terminating nil logic which clobbered size-1
07-01-11 misc/stk.c: a 2 day marathon bug fix (can we release now dr ek?)
07-01-05 comp/spawnveg.c: posix_spawnattr_setflags(POSIX_SPAWN_SETPGROUP)
07-01-05 misc/error.c: fix multibyte vs. printable logic
@@ -2916,6 +2967,18 @@
:::::::: libcmd ::::::::
+07-03-28 date.c: add --unelepsed=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)
+07-02-24 Makefile: tweak cmdext.h action for --mam bootstrap
+07-02-09 Makefile: { cmdext.h cmdlist.h } depend on *.c list!
+07-02-09 Makefile: +lsum to bring in static -lsum (no dynamic right now)
+07-02-07 cksum.c: move from src/cmd/std with ftwalk => fts
+07-02-07 getconf.c: handle /bin == /usr/bin in defer logic
+07-01-26 chmod.c: don't FTS_FOLLOW if !FTS_PHYSICAL
+07-01-23 cut.c: Cut_t variable dimension list[] must be last member
+07-01-22 uname.c: fix -h typo that clobbered astconf() state -- ouch
07-01-02 fmt.c: fix buffer splice off by one bug -- what else
06-11-23 cmd.h: because of proto cmdinit cannot be a function like macro
06-11-21 cp.c: fix 06-10-31 const dot[] readonly assignment
@@ -3122,6 +3185,17 @@
95-02-14 fix mkdir -p symlink bug
fix mkdir '/' skip bug that went one too far
+:::::::: libsum ::::::::
+
+05-02-14 sumlib.c: split into sum-*.c
+ sum-sha2.c: add SHA { 256 384 512 }
+04-02-29 Makefile: compile with $(CC.PIC) for codexlib/sum $(CC.DLL)
+03-12-16 add { crc prng } generic methods and maps[] to these methods
+03-12-16 sum.h,sumlib.c: add sumdata()
+03-09-29 sumlib.c: fix FNV to use ^ instead of +
+03-04-28 sumlib.c: drop md5 `zeroize' for performance
+ sumlib.c: add FIPS 180-1 SHA-1
+
:::::::: libdll ::::::::
06-10-11 dllscan.c: check sfstruse() return values -- doh
diff -r -N -u ksh93_2007_01_11/lib/package/ast-ksh.ver
ksh93_2007_03_28/lib/package/ast-ksh.ver
--- ksh93_2007_01_11/lib/package/ast-ksh.ver 2007-01-12 10:54:34.000000000
+0100
+++ ksh93_2007_03_28/lib/package/ast-ksh.ver 2007-03-28 18:39:59.000000000
+0200
@@ -1 +1 @@
-ast-ksh 2007-01-11 2007-01-11 1
+ast-ksh 2007-03-28 2007-03-28 1
diff -r -N -u ksh93_2007_01_11/lib/package/ksh.ver
ksh93_2007_03_28/lib/package/ksh.ver
--- ksh93_2007_01_11/lib/package/ksh.ver 2007-01-12 10:54:33.000000000
+0100
+++ ksh93_2007_03_28/lib/package/ksh.ver 2007-03-29 19:07:07.000000000
+0200
@@ -1 +1 @@
-ksh 2007-01-11 2007-01-11 1
+ksh 2007-03-28 2007-03-28 1
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/bltins/cd_pwd.c
ksh93_2007_03_28/src/cmd/ksh93/bltins/cd_pwd.c
--- ksh93_2007_01_11/src/cmd/ksh93/bltins/cd_pwd.c 2003-04-17
17:05:14.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/bltins/cd_pwd.c 2007-02-27
08:16:23.000000000 +0100
@@ -102,8 +102,8 @@
#if _WINIX
if(*dir != '/' && (dir[1]!=':'))
#else
-#endif /* _WINIX */
if(*dir != '/')
+#endif /* _WINIX */
{
#ifdef PATH_BFPATH
if(!(cdpath = (Pathcomp_t*)shp->cdpathlist) &&
(dp=(CDPNOD)->nvalue.cp))
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/bltins/getopts.c
ksh93_2007_03_28/src/cmd/ksh93/bltins/getopts.c
--- ksh93_2007_01_11/src/cmd/ksh93/bltins/getopts.c 2006-08-11
19:36:23.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/bltins/getopts.c 2007-02-14
09:17:46.000000000 +0100
@@ -175,7 +175,7 @@
{
Sfdouble_t d;
d = opt_info.number;
- nv_putval(np, (char*)&d,
NV_INTEGER|NV_DOUBLE|NV_LONG|NV_RDONLY);
+ nv_putval(np, (char*)&d, NV_LDOUBLE|NV_RDONLY);
}
nv_close(np);
sh_popcontext(&buff);
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/bltins/print.c
ksh93_2007_03_28/src/cmd/ksh93/bltins/print.c
--- ksh93_2007_01_11/src/cmd/ksh93/bltins/print.c 2006-10-13
22:16:05.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/bltins/print.c 2007-02-14
08:54:57.000000000 +0100
@@ -523,8 +523,8 @@
char* lastchar = "";
register int neg = 0;
Sfdouble_t d;
- Sfdouble_t longmin = LDBL_LONGLONG_MIN;
- Sfdouble_t longmax = LDBL_LONGLONG_MAX;
+ Sfdouble_t longmin = LDBL_LLONG_MIN;
+ Sfdouble_t longmax = LDBL_LLONG_MAX;
int format = fe->fmt;
int n;
int fold = fe->base;
@@ -599,14 +599,14 @@
np =
nv_open(argp,sh.var_tree,NV_VARNAME|NV_NOASSIGN|NV_NOARRAY);
nv_unset(np);
nv_onattr(np,NV_INTEGER);
- if (np->nvalue.lp = new_of(long,0))
+ if (np->nvalue.lp = new_of(int32_t,0))
*np->nvalue.lp = 0;
nv_setsize(np,10);
- if(sizeof(int)==sizeof(long))
+ if(sizeof(int)==sizeof(int32_t))
value->ip = (int*)np->nvalue.lp;
else
{
- long sl = 1;
+ int32_t sl = 1;
value->ip = (int*)(((char*)np->nvalue.lp) +
(*((char*)&sl) ? 0 : sizeof(int)));
}
nv_close(np);
@@ -645,7 +645,7 @@
case 'X':
case 'u':
case 'U':
- longmax = LDBL_ULONGLONG_MAX;
+ longmax = LDBL_ULLONG_MAX;
case '.':
if(fe->size==2 && strchr("bcsqHPRQTZ",*fe->form))
{
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/bltins/read.c
ksh93_2007_03_28/src/cmd/ksh93/bltins/read.c
--- ksh93_2007_01_11/src/cmd/ksh93/bltins/read.c 2006-12-19
20:19:01.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/bltins/read.c 2007-03-08
23:16:47.000000000 +0100
@@ -183,36 +183,11 @@
struct checkpt buff;
if(!(iop=shp->sftable[fd]) && !(iop=sh_iostream(fd)))
return(1);
- if(flags>>D_FLAG) /* delimiter not new-line or fixed size read */
- {
- if(flags&(N_FLAG|NN_FLAG))
- size = ((unsigned)flags)>>D_FLAG;
- else
- delim = ((unsigned)flags)>>D_FLAG;
- if(shp->fdstatus[fd]&IOTTY)
- tty_raw(fd,1);
- }
- if(!(flags&(N_FLAG|NN_FLAG)))
- {
- /* set up state table based on IFS */
- ifs = nv_getval(np=nv_scoped(IFSNOD));
- if((flags&R_FLAG) && shp->ifstable['\\']==S_ESC)
- shp->ifstable['\\'] = 0;
- else if(!(flags&R_FLAG) && shp->ifstable['\\']==0)
- shp->ifstable['\\'] = S_ESC;
- shp->ifstable[delim] = S_NL;
- if(delim!='\n')
- {
- shp->ifstable['\n'] = 0;
- nv_putval(np, ifs, NV_RDONLY);
- }
- shp->ifstable[0] = S_EOF;
- }
if(names && (name = *names))
{
if(val= strchr(name,'?'))
*val = 0;
- np = nv_open(name,shp->var_tree,NV_NOASSIGN|NV_VARNAME);
+ np =
nv_open(name,shp->var_tree,NV_NOASSIGN|NV_VARNAME|NV_ARRAY);
if((flags&V_FLAG) && shp->ed_context)
((struct edit*)shp->ed_context)->e_default = np;
if(flags&A_FLAG)
@@ -235,6 +210,32 @@
else
np = REPLYNOD;
}
+ if(flags>>D_FLAG) /* delimiter not new-line or fixed size read */
+ {
+ if(flags&(N_FLAG|NN_FLAG))
+ size = ((unsigned)flags)>>D_FLAG;
+ else
+ delim = ((unsigned)flags)>>D_FLAG;
+ if(shp->fdstatus[fd]&IOTTY)
+ tty_raw(fd,1);
+ }
+ if(!(flags&(N_FLAG|NN_FLAG)))
+ {
+ Namval_t *mp;
+ /* set up state table based on IFS */
+ ifs = nv_getval(mp=nv_scoped(IFSNOD));
+ if((flags&R_FLAG) && shp->ifstable['\\']==S_ESC)
+ shp->ifstable['\\'] = 0;
+ else if(!(flags&R_FLAG) && shp->ifstable['\\']==0)
+ shp->ifstable['\\'] = S_ESC;
+ shp->ifstable[delim] = S_NL;
+ if(delim!='\n')
+ {
+ shp->ifstable['\n'] = 0;
+ nv_putval(mp, ifs, NV_RDONLY);
+ }
+ shp->ifstable[0] = S_EOF;
+ }
sfclrerr(iop);
if(np->nvfun && np->nvfun->disc->readf)
return((* np->nvfun->disc->readf)(np,iop,delim,np->nvfun));
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/bltins/shopen.c
ksh93_2007_03_28/src/cmd/ksh93/bltins/shopen.c
--- ksh93_2007_01_11/src/cmd/ksh93/bltins/shopen.c 2006-10-13
05:58:32.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/bltins/shopen.c 2007-03-20
20:08:28.000000000 +0100
@@ -17,15 +17,17 @@
* David Korn <dgk at research.att.com> *
* *
***********************************************************************/
+#pragma prototyped
static const char id[] = "\n@(#)$Id: open (AT&T Research) 1998-07-07 $\0\n";
-#include <sys/stat.h>
-#include <fcntl.h>
#include <shell.h>
#include <option.h>
#include <stk.h>
#include <tm.h>
+#ifndef SH_DICT
+# define SH_DICT "libshell"
+#endif
/*
* time formatting related
@@ -52,7 +54,7 @@
char *last;
if(val)
{
- time_t t;
+ int32_t t;
if(flag&NV_INTEGER)
{
if(flag&NV_LONG)
@@ -61,9 +63,11 @@
t = *(double*)val;
}
else
+ {
t = tmdate(val, &last, (time_t*)0);
- if(*last)
- errormsg(SH_DICT,ERROR_exit(1),"%s: invalid date/time
string",val);
+ if(*last)
+ errormsg(SH_DICT,ERROR_exit(1),"%s: invalid
date/time string",val);
+ }
nv_putv(np,(char*)&t,NV_INTEGER,nfp);
}
else
@@ -121,7 +125,7 @@
{
if(val)
{
- mode_t mode;
+ int32_t mode;
char *last;
if(flag&NV_INTEGER)
{
@@ -131,9 +135,11 @@
mode = *(double*)val;
}
else
+ {
mode = strperm(val, &last,0);
- if(*last)
- errormsg(SH_DICT,ERROR_exit(1),"%s: invalid mode
string",val);
+ if(*last)
+ errormsg(SH_DICT,ERROR_exit(1),"%s: invalid
mode string",val);
+ }
nv_putv(np,(char*)&mode,NV_INTEGER,nfp);
}
else
@@ -238,6 +244,7 @@
if(!(nq=nodes[n]))
{
nodes[n] = nq = sh_newnode(fp,np);
+ nfp->last = "";
}
if(name[len]==0)
return(nq);
@@ -328,7 +335,7 @@
if(!outfile)
return((char*)0);
sfputc(out,0);
- return((char*)out->data);
+ return((char*)out->_data);
}
static char *get_classval(Namval_t* np, Namfun_t* nfp)
@@ -359,7 +366,7 @@
fieldcreate
};
-static mkclass(Namval_t *np, Shclass_t *sp)
+static int mkclass(Namval_t *np, Shclass_t *sp)
{
struct dcclass *tcp = newof(NULL,struct
dcclass,1,sp->nelem*sizeof(Namval_t*));
if(!tcp)
@@ -377,29 +384,29 @@
*/
static struct stat *Sp;
+struct filedata
+{
+ struct stat statb;
+ int fd;
+ char *name;
+};
+
static Shfield_t filefield[] =
{
{ "atime", NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_atime),
sizeof(Sp->st_atime), make_time},
{ "ctime", NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_ctime),
sizeof(Sp->st_ctime), make_time},
{ "dev", NV_INTEGER|NV_RDONLY, offsetof(struct
stat,st_dev),sizeof(Sp->st_dev)},
- { "fd", NV_INTEGER|NV_RDONLY, sizeof(struct stat),
sizeof(int)},
+ { "fd", NV_INTEGER|NV_RDONLY, offsetof(struct filedata,fd),
sizeof(int)},
{ "gid", NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_gid),
sizeof(Sp->st_gid)},
{ "ino", NV_LONG|NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_ino),
sizeof(Sp->st_ino)},
- { "name", NV_RDONLY, sizeof(struct stat)+sizeof(int), -1 },
- { "nlink", NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_nlink),
sizeof(Sp->st_nlink)},
{ "mode", NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_mode),
sizeof(Sp->st_mode), make_mode},
{ "mtime", NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_mtime),
sizeof(Sp->st_mtime), make_time},
+ { "name", NV_RDONLY, offsetof(struct filedata,name), -1 },
+ { "nlink", NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_nlink),
sizeof(Sp->st_nlink)},
{ "size", NV_LONG|NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_size),
sizeof(Sp->st_size)},
{ "uid", NV_INTEGER|NV_RDONLY, offsetof(struct stat,st_uid),
sizeof(Sp->st_uid)}
};
-struct filedata
-{
- struct stat statb;
- int fd;
- char *name;
-};
-
static Shclass_t Fileclass =
{
sizeof(filefield)/sizeof(*filefield),
@@ -410,7 +417,35 @@
#define letterbit(bit) (1<<((bit)-'a'))
-static const char sh_optopen[] = "abceirwm:[mode] var file";
+static const char sh_optopen[] =
+"[-?\n@(#)$Id: open (AT&T Labs Research) 2007-03-11 $\n]"
+"[-author?David Korn <dgk at research.att.com>]"
+"[-license?http://www.opensource.org/licenses/cpl1.0.txt]"
+"[+NAME? open - create a shell variable correspnding to a file]"
+"[+DESCRIPTION?\bopen\b creates the compound variable \avar\a correspinding "
+ "to the file given by the pathname \afile\a. The elements of \avar\a "
+ "are the names of elements in the \astat\a structure with the \bst_\b "
+ "prefix removed.]"
+"[+?If the \b-r\b and/or \b-w\b mode is specified, then \afile\a is opened and
"
+ "the variable \avar\a\b.fd\b is the file descriptor.]"
+"[a:append?Open for append.]"
+"[b:binary?Open in binary mode.]"
+"[c:create?Open for create.]"
+"[i:inherit?Open without the close-on-exec bit set.]"
+"[r:read?Open with read access.]"
+"[w:write?Open with write access.]"
+"[m:mode]:[mode:=rwrwrw?Open with access mode \amode\a.]"
+"[x:exclusive?Open exclusive.]"
+"\n"
+"\nvar file\n"
+"\n"
+"[+EXIT STATUS?]{"
+ "[+0?Success.]"
+ "[+>0?An error occurred.]"
+"}"
+"[+SEE ALSO?\bstat\b(2)]"
+;
+
extern int b_open(int argc, char *argv[], void *extra)
{
@@ -439,7 +474,7 @@
oflag |= O_TEXT;
#endif
break;
- case 'e':
+ case 'x':
oflag |= O_EXCL;
break;
case 'c':
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/bltins/typeset.c
ksh93_2007_03_28/src/cmd/ksh93/bltins/typeset.c
--- ksh93_2007_01_11/src/cmd/ksh93/bltins/typeset.c 2007-01-12
01:02:47.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/bltins/typeset.c 2007-03-22
17:19:09.000000000 +0100
@@ -45,6 +45,7 @@
struct tdata
{
Shell_t *sh;
+ Namval_t *tp;
Sfio_t *outfile;
char *prefix;
int aflag;
@@ -52,7 +53,6 @@
int scanmask;
Dt_t *scanroot;
char **argnam;
- Namval_t *tp;
};
@@ -339,9 +339,11 @@
{
register char *name;
char *last = 0;
- int
nvflags=(flag&(NV_ARRAY|NV_NOARRAY|NV_NOSCOPE|NV_VARNAME|NV_IDENT|NV_ASSIGN));
+ int nvflags=(flag&(NV_ARRAY|NV_NOARRAY|NV_VARNAME|NV_IDENT|NV_ASSIGN));
int r=0, ref=0;
Shell_t *shp =tp->sh;
+ if(!sh.prefix)
+ nvflags |= NV_NOSCOPE;
flag &= ~(NV_NOARRAY|NV_NOSCOPE|NV_VARNAME|NV_IDENT);
if(argv[1])
{
@@ -490,7 +492,15 @@
if(ref)
{
if(tp->aflag=='-')
- nv_setref(np);
+ {
+ Dt_t *hp=0;
+ if(nv_isattr(np,NV_PARAM) &&
shp->st.prevst)
+ {
+
if(!(hp=(Dt_t*)shp->st.prevst->save_tree))
+ hp =
dtvnext(shp->var_tree);
+ }
+ nv_setref(np,hp,NV_VARNAME);
+ }
else
nv_unref(np);
}
@@ -870,10 +880,10 @@
sfputc(file,flag);
if(flag != '\n')
{
- if(nv_isref(np) && np->nvenv)
+ if(nv_isref(np) && nv_refsub(np))
{
sfputr(file,sh_fmtq(cp),-1);
- sfprintf(file,"[%s]\n", sh_fmtq(np->nvenv));
+ sfprintf(file,"[%s]\n", sh_fmtq(nv_refsub(np)));
}
else
sfputr(file,sh_fmtq(cp),'\n');
@@ -921,7 +931,7 @@
tp->outfile = file;
if(flag&NV_INTEGER)
tp->scanmask |= (NV_DOUBLE|NV_EXPNOTE);
- namec = nv_scan(root,nullscan,(void*)0,tp->scanmask,flag);
+ namec = nv_scan(root,nullscan,(void*)tp,tp->scanmask,flag);
argv = tp->argnam = (char**)stakalloc((namec+1)*sizeof(char*));
namec = nv_scan(root, pushname, (void*)tp, tp->scanmask, flag);
if(mbcoll())
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/data/builtins.c
ksh93_2007_03_28/src/cmd/ksh93/data/builtins.c
--- ksh93_2007_01_11/src/cmd/ksh93/data/builtins.c 2006-12-19
20:16:28.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/data/builtins.c 2007-03-27
20:07:41.000000000 +0200
@@ -21,6 +21,7 @@
#include <shell.h>
#include <signal.h>
+#include "defs.h"
#include "shtable.h"
#include "ulimit.h"
#include "name.h"
@@ -36,13 +37,17 @@
# define bltin(x) 0
#endif
-#if SHOPT_CMDLIB_DIR
-# undef SHOPT_CMDLIB_BLTIN
-# define SHOPT_CMDLIB_BLTIN 1
-# define BDIR SH_CMDLIB_DIR "/"
-#else
-# define BDIR
+#ifndef SH_CMDLIB_DIR
+# define SH_CMDLIB_DIR "/opt/ast/bin"
+#endif
+#if defined(SHOPT_CMDLIB_DIR) && !defined(SHOPT_CMDLIB_HDR)
+# 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),
+
+#undef basename
+#undef dirname
/*
* The order up through "[" is significant
@@ -62,6 +67,7 @@
"test", NV_BLTIN|BLT_ENV|NV_NOFREE, bltin(test),
"[", NV_BLTIN|BLT_ENV, bltin(test),
"let", NV_BLTIN|BLT_ENV, bltin(let),
+ "export", NV_BLTIN|BLT_SPC|BLT_DCL, bltin(readonly),
#if SHOPT_BASH
"local", NV_BLTIN|BLT_ENV|BLT_SPC|BLT_DCL,bltin(typeset),
#endif
@@ -72,7 +78,6 @@
"alias", NV_BLTIN|BLT_SPC|BLT_DCL, bltin(alias),
"hash", NV_BLTIN|BLT_SPC|BLT_DCL, bltin(alias),
"exit", NV_BLTIN|BLT_ENV|BLT_SPC, bltin(return),
- "export", NV_BLTIN|BLT_SPC|BLT_DCL, bltin(readonly),
"eval", NV_BLTIN|BLT_ENV|BLT_SPC|BLT_EXIT,bltin(eval),
"fc", NV_BLTIN|BLT_ENV|BLT_EXIT, bltin(hist),
"hist", NV_BLTIN|BLT_ENV|BLT_EXIT, bltin(hist),
@@ -100,7 +105,7 @@
"jobs", NV_BLTIN|BLT_ENV, bltin(jobs),
#endif /* JOBS */
"false", NV_BLTIN|BLT_ENV, bltin(false),
- "/bin/getconf", NV_BLTIN|BLT_ENV, bltin(getconf),
+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),
@@ -120,25 +125,21 @@
"wait", NV_BLTIN|BLT_ENV|BLT_EXIT, bltin(wait),
"type", NV_BLTIN|BLT_ENV, bltin(whence),
"whence", NV_BLTIN|BLT_ENV, bltin(whence),
-#if SHOPT_CMDLIB_BLTIN
-#define Q(f) #f /* libpp cpp workaround -- fixed 2005-04-11 */
-#define CMDLIST(f) BDIR Q(f), NV_BLTIN|NV_NOFREE, bltin(f),
-#include <cmdlist.h>
-#undef CMDLIST
-#undef Q
+#ifdef SHOPT_CMDLIB_HDR
+#include SHOPT_CMDLIB_HDR
#else
- "/bin/basename",NV_BLTIN|NV_NOFREE, bltin(basename),
- "/bin/chmod", NV_BLTIN|NV_NOFREE, bltin(chmod),
- "/bin/dirname", NV_BLTIN|NV_NOFREE, bltin(dirname),
- "/bin/head", NV_BLTIN|NV_NOFREE, bltin(head),
- "/bin/mkdir", NV_BLTIN|NV_NOFREE, bltin(mkdir),
- "/bin/logname", NV_BLTIN|NV_NOFREE, bltin(logname),
- "/bin/cat", NV_BLTIN|NV_NOFREE, bltin(cat),
- "/bin/cmp", NV_BLTIN|NV_NOFREE, bltin(cmp),
- "/bin/cut", NV_BLTIN|NV_NOFREE, bltin(cut),
- "/bin/uname", NV_BLTIN|NV_NOFREE, bltin(uname),
- "/bin/wc", NV_BLTIN|NV_NOFREE, bltin(wc),
- "/bin/sync", NV_BLTIN|NV_NOFREE, bltin(sync),
+ CMDLIST(basename)
+ CMDLIST(chmod)
+ CMDLIST(dirname)
+ CMDLIST(head)
+ CMDLIST(mkdir)
+ CMDLIST(logname)
+ CMDLIST(cat)
+ CMDLIST(cmp)
+ CMDLIST(cut)
+ CMDLIST(uname)
+ CMDLIST(wc)
+ CMDLIST(sync)
#endif
"", 0, 0
};
@@ -1170,6 +1171,9 @@
"the collating element \aname\a.]"
"[+-?The escape sequence \b\\x{\b\ahex\a\b}\b expands to the "
"character corresponding to the hexidecimal value \ahex\a.]"
+ "[+-?The format modifier flag \b=\b can be used to center a field to "
+ "a specified width. When the output is a terminal, the "
+ "character width is used rather than the number of bytes.]"
"[+-?Each of the integral format specifiers can have a third "
"modifier after width and precision that specifies the "
"base of the conversion from 2 to 64. In this case the "
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/edit/emacs.c
ksh93_2007_03_28/src/cmd/ksh93/edit/emacs.c
--- ksh93_2007_01_11/src/cmd/ksh93/edit/emacs.c 2006-11-29 23:12:00.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/edit/emacs.c 2007-02-27 02:53:00.000000000
+0100
@@ -63,6 +63,7 @@
#include <ast.h>
#include <ctype.h>
+#include "FEATURE/cmds"
#if KSHELL
# include "defs.h"
#endif /* KSHELL */
@@ -989,6 +990,12 @@
draw(ep,UPDATE);
return(-1);
+#ifdef _cmd_tput
+ case cntl('L'): /* clear screen */
+ sh_trap("tput clear", 0);
+ draw(ep,REFRESH);
+ return(-1);
+#endif
case '[': /* feature not in book */
switch(i=ed_getchar(ep->ed,1))
{
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/features/math.sh
ksh93_2007_03_28/src/cmd/ksh93/features/math.sh
--- ksh93_2007_01_11/src/cmd/ksh93/features/math.sh 2007-01-04
23:03:11.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/features/math.sh 2007-02-06
20:17:30.000000000 +0100
@@ -20,7 +20,7 @@
: generate the ksh math builtin table
: include math.tab
-# @(#)math.sh (AT&T Research) 2007-01-04
+# @(#)math.sh (AT&T Research) 2007-02-02
command=$0
iffeflags="-n -v -F ast_standards.h"
@@ -51,23 +51,19 @@
eval `iffe $iffeflags -c "$cc" - typ long.double : lib $tests $iffehdrs
$iffelibs 2>&$stderr`
lib=
-mac=
for name in $names
do eval x='$'_lib_${name}l y='$'_lib_${name}
case $x in
1) lib="$lib,${name}l" ;;
- '') mac="$mac,${name}l" ;;
esac
case $y in
1) case $x in
'') lib="$lib,${name}" ;;
esac
;;
- '') mac="$mac,${name}" ;;
esac
done
-eval `iffe $iffeflags -c "$cc" - dat,npt $lib $iffehdrs $iffelibs 2>&$stderr`
-eval `iffe $iffeflags -c "$cc" - mac $mac $iffehdrs 2>&$stderr`
+eval `iffe $iffeflags -c "$cc" - dat,npt,mac $lib $iffehdrs $iffelibs
2>&$stderr`
cat <<!
#pragma prototyped
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/features/poll
ksh93_2007_03_28/src/cmd/ksh93/features/poll
--- ksh93_2007_01_11/src/cmd/ksh93/features/poll 2006-12-10
10:27:00.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/features/poll 2007-03-20
22:33:33.000000000 +0100
@@ -60,6 +60,7 @@
}end
tst socketpair_devfd note{ /dev/fd/N handles socketpair() }end execute{
#include <ast.h>
+ #include <fs3d.h>
#include <sys/types.h>
#include <sys/socket.h>
int main()
@@ -67,6 +68,7 @@
int devfd;
int n;
int sfd[2];
+ fs3d(FS3D_OFF);
close(0);
open("/dev/null", O_RDONLY);
if ((n = open("/dev/fd/0", O_RDONLY)) < 0)
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/builtins.h
ksh93_2007_03_28/src/cmd/ksh93/include/builtins.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/builtins.h 2004-01-14
21:33:18.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/builtins.h 2007-03-27
20:09:44.000000000 +0200
@@ -38,8 +38,9 @@
#define SYSTEST (sh.bltin_cmds+10)
#define SYSBRACKET (sh.bltin_cmds+11)
#define SYSLET (sh.bltin_cmds+12)
+#define SYSEXPORT (sh.bltin_cmds+13)
#if SHOPT_BASH
-# define SYSLOCAL (sh.bltin_cmds+13)
+# define SYSLOCAL (sh.bltin_cmds+14)
#else
# define SYSLOCAL 0
#endif
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/defs.h
ksh93_2007_03_28/src/cmd/ksh93/include/defs.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/defs.h 2007-01-12
00:43:17.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/defs.h 2007-03-27
20:14:45.000000000 +0200
@@ -69,9 +69,9 @@
int execbrk;
int loopcnt;
int firstline;
- long optindex;
- long optnum;
- long tmout; /* value for TMOUT */
+ int32_t optindex;
+ int32_t optnum;
+ int32_t tmout; /* value for TMOUT */
short optchar;
short opterror;
int ioset;
@@ -133,7 +133,7 @@
pid_t pid; /* process id of shell */ \
pid_t bckpid; /* background process id */ \
pid_t cpid; \
- long ppid; /* parent process id of shell */ \
+ int32_t ppid; /* parent process id of shell */ \
int topfd; \
int sigmax; /* maximum number of signals */ \
int savesig; \
@@ -192,6 +192,7 @@
void *jmpbuffer; \
void *mktype; \
Sfio_t *strbuf; \
+ Dt_t *last_root; \
char ifstable[256]; \
Shopt_t offoptions;
@@ -209,6 +210,10 @@
#define SH_DICT (void*)e_dict
#endif
+#ifndef SH_CMDLIB_DIR
+#define SH_CMDLIB_DIR "/opt/ast/bin"
+#endif
+
/* states */
/* low numbered states are same as options */
#define SH_NOFORK 0 /* set when fork not necessary, not a state */
@@ -356,11 +361,11 @@
#define sh_onstate(x) (sh.st.states |= sh_state(x))
#define sh_offstate(x) (sh.st.states &= ~sh_state(x))
#define sh_getstate() (sh.st.states)
-#define sh_setstate(x) (sh.st.states = x)
+#define sh_setstate(x) (sh.st.states = (x))
#define sh_sigcheck() do{if(sh.trapnote&SH_SIGSET)sh_exit(SH_EXITSIG);}
while(0)
-extern time_t sh_mailchk;
+extern int32_t sh_mailchk;
extern const char e_dict[];
/* sh_printopts() mode flags -- set --[no]option by default */
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/edit.h
ksh93_2007_03_28/src/cmd/ksh93/include/edit.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/edit.h 2006-12-19
15:41:39.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/edit.h 2007-02-14
08:56:39.000000000 +0100
@@ -129,7 +129,7 @@
char e_inmacro; /* processing macro expansion */
#if KSHELL
char e_vi_insert[2]; /* for sh_keytrap */
- long e_col; /* for sh_keytrap */
+ int32_t e_col; /* for sh_keytrap */
#else
char e_prbuff[PRSIZE]; /* prompt buffer */
#endif /* KSHELL */
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/fault.h
ksh93_2007_03_28/src/cmd/ksh93/include/fault.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/fault.h 2003-12-19
17:05:05.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/fault.h 2007-03-22
20:54:19.000000000 +0100
@@ -94,7 +94,7 @@
int mode;
struct openlist *olist;
#if (ERROR_VERSION >= 20030214L)
- struct Error_context_s err;
+ Error_context_t err;
#else
struct errorcontext err;
#endif
@@ -103,7 +103,7 @@
#define sh_pushcontext(bp,n) ( (bp)->mode=(n) , (bp)->olist=0, \
(bp)->topfd=sh.topfd, (bp)->prev=sh.jmplist, \
(bp)->err = *ERROR_CONTEXT_BASE, \
- sh.jmplist = (sigjmp_buf*)(bp) \
+ sh.jmplist = (sigjmp_buf*)(&(bp)->buff)
\
)
#define sh_popcontext(bp) (sh.jmplist=(bp)->prev, errorpop(&((bp)->err)))
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/fcin.h
ksh93_2007_03_28/src/cmd/ksh93/include/fcin.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/fcin.h 2003-02-26
04:29:14.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/fcin.h 2007-03-23
09:14:01.000000000 +0100
@@ -37,6 +37,7 @@
unsigned char *fcptr; /* pointer to next input char */
unsigned char fcchar; /* saved character */
void (*fcfun)(Sfio_t*,const char*,int); /* advance function */
+ int fcleft; /* for multibyte boundary */
Sfoff_t fcoff; /* offset for last read */
} Fcin_t;
@@ -54,6 +55,7 @@
extern int fcfopen(Sfio_t*);
extern int fcclose(void);
void fcnotify(void(*)(Sfio_t*,const char*,int));
+extern int fcmbstate(const char*,int*,int*);
extern Fcin_t _Fcin; /* used by macros */
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/history.h
ksh93_2007_03_28/src/cmd/ksh93/include/history.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/history.h 2003-03-21
18:35:49.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/history.h 2007-02-15
11:00:45.000000000 +0100
@@ -26,7 +26,6 @@
*/
#include <ast.h>
-#include <sfio.h>
#define HIST_CHAR '!'
#define HIST_VERSION 1 /* history file format version no. */
@@ -36,7 +35,7 @@
Sfdisc_t histdisc; /* discipline for history */
Sfio_t *histfp; /* history file stream pointer */
char *histname; /* name of history file */
- long histind; /* current command number index */
+ int32_t histind; /* current command number index */
int histsize; /* number of accessible history lines */
#ifdef _HIST_PRIVATE
_HIST_PRIVATE
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/io.h
ksh93_2007_03_28/src/cmd/ksh93/include/io.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/io.h 2005-11-23 16:53:38.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/io.h 2007-03-05 15:26:03.000000000
+0100
@@ -75,7 +75,6 @@
__EXPORT__
#endif
extern Sfio_t *sh_iostream(int);
-struct ionod;
extern int sh_redirect(struct ionod*,int);
extern void sh_iosave(int,int);
extern void sh_iounsave(void);
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/lexstates.h
ksh93_2007_03_28/src/cmd/ksh93/include/lexstates.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/lexstates.h 2007-01-05
23:23:56.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/lexstates.h 2007-03-14
17:01:46.000000000 +0100
@@ -79,6 +79,8 @@
#define ST_QNEST 10
#define ST_NONE 11
+#include "FEATURE/locale"
+
#if _hdr_wchar
# include <wchar.h>
# if _hdr_wctype
@@ -102,13 +104,19 @@
# define isblank(x) ((x)==' '||(x)=='\t')
#endif
+#undef LEN
#if SHOPT_MULTIBYTE
+ static int NXT, LEN;
# define isaname(c) ((c)>0xff?isalpha(c): sh_lexstates[ST_NAME][(c)]==0)
# define isaletter(c) ((c)>0xff?isalpha(c):
sh_lexstates[ST_DOL][(c)]==S_ALP && (c)!='.')
#else
+# undef mbwide
+# define mbwide() (0)
+# define LEN 1
# define isaname(c) (sh_lexstates[ST_NAME][c]==0)
# define isaletter(c) (sh_lexstates[ST_DOL][c]==S_ALP && (c)!='.')
#endif
+#define STATE(s,c) (mbwide()?(c=fcmbstate(s,&NXT,&LEN),NXT):s[c=fcget()])
#define isadigit(c) (sh_lexstates[ST_DOL][c]==S_DIG)
#define isastchar(c) ((c)=='@' || (c)=='*')
#define isexp(c) (sh_lexstates[ST_MACRO][c]==S_PAT||(c)=='$'||(c)=='`')
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/name.h
ksh93_2007_03_28/src/cmd/ksh93/include/name.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/name.h 2006-11-13
22:07:05.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/name.h 2007-03-05
14:52:11.000000000 +0100
@@ -35,22 +35,23 @@
/* Nodes can have all kinds of values */
union Value
{
- const char *cp;
- int *ip;
- char c;
- int i;
- unsigned u;
- long *lp;
- Sflong_t *llp; /* for long long arithmetic */
- short s;
- double *dp; /* for floating point arithmetic */
- Sfdouble_t *ldp; /* for long floating point arithmetic */
- struct Namarray *array; /* for array node */
- struct Namval *np; /* for Namval_t node */
- union Value *up; /* for indirect node */
- struct Ufunction *rp; /* shell user defined functions */
- struct Namfun *funp; /* discipline pointer */
- int (*bfp)(int,char*[],void*);/* builtin entry point function pointer */
+ const char *cp;
+ int *ip;
+ char c;
+ int i;
+ unsigned int u;
+ int32_t *lp;
+ Sflong_t *llp; /* for long long arithmetic */
+ int16_t s;
+ double *dp; /* for floating point arithmetic */
+ Sfdouble_t *ldp; /* for long floating point arithmetic */
+ struct Namarray *array; /* for array node */
+ struct Namval *np; /* for Namval_t node */
+ union Value *up; /* for indirect node */
+ struct Ufunction *rp; /* shell user defined functions */
+ struct Namfun *funp; /* discipline pointer */
+ struct Namref *nrp; /* name reference */
+ int (*bfp)(int,char*[],void*);/* builtin entry
point function pointer */
};
#include "nval.h"
@@ -74,6 +75,14 @@
#define ARRAY_DELETE 2
+struct Namref
+{
+ Namval_t *np;
+ Namval_t *table;
+ Dt_t *root;
+ char *sub;
+};
+
/* This describes a user shell function node */
struct Ufunction
{
@@ -84,6 +93,10 @@
char *fname; /* file name where function defined */
};
+#ifndef ARG_RAW
+ struct argnod;
+#endif /* !ARG_RAW */
+
/* attributes of Namval_t items */
/* The following attributes are for internal use */
@@ -120,8 +133,11 @@
#define nv_setattr(n,f) ((n)->nvflag = (f))
#define nv_context(n) ((void*)(n)->nvfun) /* for builtins */
-#define nv_table(n) ((Namval_t*)((n)->nvfun)) /* for references */
-#define nv_refnode(n) ((Namval_t*)((n)->nvalue.np)) /* for references */
+/* The following are for name references */
+#define nv_refnode(n) ((n)->nvalue.nrp->np)
+#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 */
@@ -141,7 +157,6 @@
extern int array_maxindex(Namval_t*);
extern char *nv_endsubscript(Namval_t*, char*, int);
extern Namfun_t *nv_cover(Namval_t*);
-struct argnod; /* struct not declared yet */
extern Namarr_t *nv_arrayptr(Namval_t*);
extern int nv_setnotify(Namval_t*,char **);
extern int nv_unsetnotify(Namval_t*,char **);
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/nval.h
ksh93_2007_03_28/src/cmd/ksh93/include/nval.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/nval.h 2006-09-08
05:18:52.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/include/nval.h 2007-03-21
16:37:54.000000000 +0100
@@ -46,6 +46,7 @@
typedef struct Namarray Namarr_t;
typedef struct Nambltin Nambltin_t;
typedef struct Namtype Namtype_t;
+
/*
* This defines the template for nodes that have their own assignment
* and or lookup functions
@@ -188,6 +189,16 @@
#define NV_PUBLIC (~(NV_NOSCOPE|NV_ASSIGN|NV_IDENT|NV_VARNAME|NV_NOADD))
+/* numeric types */
+#define NV_INT16 (NV_SHORT|NV_INTEGER)
+#define NV_UINT16 (NV_UNSIGN|NV_SHORT|NV_INTEGER)
+#define NV_INT32 (NV_INTEGER)
+#define NV_UNT32 (NV_UNSIGN|NV_INTEGER)
+#define NV_INT64 (NV_LONG|NV_INTEGER)
+#define NV_UINT64 (NV_UNSIGN|NV_LONG|NV_INTEGER)
+#define NV_FLOAT (NV_SHORT|NV_DOUBLE|NV_INTEGER)
+#define NV_LDOUBLE (NV_LONG|NV_DOUBLE|NV_INTEGER)
+
/* name-value pair macros */
#define nv_isattr(np,f) ((np)->nvflag & (f))
#define nv_onattr(n,f) ((n)->nvflag |= (f))
@@ -243,8 +254,8 @@
extern void *nv_context(Namval_t*);
extern Namval_t *nv_create(const char*, Dt_t*, int,Namfun_t*);
extern Dt_t *nv_dict(Namval_t*);
-extern Sfdouble_t nv_getn(Namval_t*, Namfun_t*);
-extern Sfdouble_t nv_getnum(Namval_t*);
+extern Sfdouble_t nv_getn(Namval_t*, Namfun_t*);
+extern Sfdouble_t nv_getnum(Namval_t*);
extern char *nv_getv(Namval_t*, Namfun_t*);
extern char *nv_getval(Namval_t*);
extern Namfun_t *nv_hasdisc(Namval_t*, const Namdisc_t*);
@@ -257,7 +268,7 @@
extern int nv_scan(Dt_t*,void(*)(Namval_t*,void*),void*,int,int);
extern Namval_t *nv_scoped(Namval_t*);
extern char *nv_setdisc(Namval_t*,const char*,Namval_t*,Namfun_t*);
-extern void nv_setref(Namval_t*);
+extern void nv_setref(Namval_t*, Dt_t*,int);
extern int nv_settype(Namval_t*, Namval_t*, int);
extern void nv_setvec(Namval_t*,int,int,char*[]);
extern void nv_setvtree(Namval_t*);
@@ -267,6 +278,7 @@
extern Namval_t *nv_search(const char *, Dt_t*, int);
extern void nv_unscope(void);
extern char *nv_name(Namval_t*);
+extern Namval_t *nv_type(Namval_t*);
extern const Namdisc_t *nv_discfun(int);
#ifdef _DLL
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/streval.h
ksh93_2007_03_28/src/cmd/ksh93/include/streval.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/streval.h 2006-10-13
17:44:24.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/include/streval.h 2007-02-12
17:55:26.000000000 +0100
@@ -33,34 +33,34 @@
#endif
#if _ast_fltmax_double
-#define LDBL_LONGLONG_MAX DBL_LONGLONG_MAX
-#define LDBL_ULONGLONG_MAX DBL_ULONGLONG_MAX
-#define LDBL_LONGLONG_MIN DBL_LONGLONG_MIN
+#define LDBL_LLONG_MAX DBL_LLONG_MAX
+#define LDBL_ULLONG_MAX DBL_ULLONG_MAX
+#define LDBL_LLONG_MIN DBL_LLONG_MIN
#endif
-#ifndef LDBL_LONGLONG_MAX
+#ifndef LDBL_LLONG_MAX
# ifdef LLONG_MAX
-# define LDBL_LONGLONG_MAX ((Sfdouble_t)LLONG_MAX)
+# define LDBL_LLONG_MAX ((Sfdouble_t)LLONG_MAX)
# else
-# ifdef LONGLONG_MAX
-# define LDBL_LONGLONG_MAX ((Sfdouble_t)LONGLONG_MAX)
+# ifdef LLONG_MAX
+# define LDBL_LLONG_MAX ((Sfdouble_t)LLONG_MAX)
# else
-# define LDBL_LONGLONG_MAX ((Sfdouble_t)((((Sflong_t)1) <<
(8*sizeof(Sflong_t)-1)) -1 ))
+# define LDBL_LLONG_MAX ((Sfdouble_t)((((Sflong_t)1) <<
(8*sizeof(Sflong_t)-1)) -1 ))
# endif
# endif
#endif
-#ifndef LDBL_ULONGLONG_MAX
+#ifndef LDBL_ULLONG_MAX
# ifdef ULLONG_MAX
-# define LDBL_ULONGLONG_MAX ((Sfdouble_t)ULLONG_MAX)
+# define LDBL_ULLONG_MAX ((Sfdouble_t)ULLONG_MAX)
# else
-# define LDBL_ULONGLONG_MAX (2.*((Sfdouble_t)LDBL_LONGLONG_MAX))
+# define LDBL_ULLONG_MAX (2.*((Sfdouble_t)LDBL_LLONG_MAX))
# endif
#endif
-#ifndef LDBL_LONGLONG_MIN
+#ifndef LDBL_LLONG_MIN
# ifdef LLONG_MIN
-# define LDBL_LONGLONG_MIN ((Sfdouble_t)LLONG_MIN)
+# define LDBL_LLONG_MIN ((Sfdouble_t)LLONG_MIN)
# else
-# define LDBL_LONGLONG_MIN (-LDBL_LONGLONG_MAX)
+# define LDBL_LLONG_MIN (-LDBL_LLONG_MAX)
# endif
#endif
#ifndef LDBL_DIG
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/include/version.h
ksh93_2007_03_28/src/cmd/ksh93/include/version.h
--- ksh93_2007_01_11/src/cmd/ksh93/include/version.h 2006-11-17
19:46:51.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/include/version.h 2007-03-06
18:35:34.000000000 +0100
@@ -17,4 +17,4 @@
* David Korn <dgk at research.att.com> *
* *
***********************************************************************/
-#define SH_RELEASE "1993-12-28 s"
+#define SH_RELEASE "1993-12-28 s+"
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/Makefile
ksh93_2007_03_28/src/cmd/ksh93/Makefile
--- ksh93_2007_01_11/src/cmd/ksh93/Makefile 2006-10-18 20:20:32.000000000
+0200
+++ ksh93_2007_03_28/src/cmd/ksh93/Makefile 2007-03-25 05:47:28.000000000
+0200
@@ -6,6 +6,7 @@
VERSION = 1.1
LICENSE = since=1982,author=dgk
CATALOG = libshell
+ERROR_CONTEXT_T == Error_context_t /* workaround until switch from
errorpush()/errorpop() => errorctx() */
/*
* set these variables to 1 to enable, 0 to disable, null to probe
@@ -16,8 +17,8 @@
SHOPT_ACCTFILE == /* per user accounting info */
SHOPT_BASH == /* bash compatibility code */
SHOPT_BRACEPAT == 1 /* C-shell {...,...} expansions (, required) */
-SHOPT_CMDLIB_BLTIN == 0 /* all -lcmd commands builtin */
-SHOPT_CMDLIB_DIR == /* SHOPT_CMDLIB_BLTIN prefix SH_CMDLIB_DIR */
+SHOPT_CMDLIB_HDR == /* -lcmd builtin list: <cmdlist.h> */
+SHOPT_CMDLIB_DIR == /* SHOPT_CMDLIB_HDR prefix SH_CMDLIB_DIR +
<cmdlist.h> */
SHOPT_CRNL == /* accept <cr><nl> for <nl> */
SHOPT_DYNAMIC == 1 /* dynamic loading for builtins */
SHOPT_ECHOPRINT == /* make echo equivalent to print */
@@ -76,7 +77,7 @@
KSHELL == 1 /* this is ksh */
-SH_CMDLIB_DIR == "/opt/ast/bin" /* SHOPT_CMDLIB_DIR dir prefix */
+SH_CMDLIB_DIR == /* SHOPT_CMDLIB_DIR dir prefix */
SH_DICT == /* message catalog */
DEBUG == /* debugging purposes only */
@@ -96,18 +97,18 @@
LDFLAGS += $(CC.LD.LAZY) $(CC.LD.NORECORD)
end
-if ! "$(-mam:N=static*)"
- if CC.HOSTTYPE == "sol([789]|[1-9][0-9]).*"
- LIBS_opt += +lsocket -lnsl
- elif CC.HOSTTYPE != "sgi.mips*"
- LIBS_opt += +lsocket +lnsl
- end
+if "$(-mam:N=static*)"
+ LIBS_opt += -lsocket -lnsl
+elif CC.HOSTTYPE == "sol?([789]|[1-9][0-9]).*"
+ LIBS_opt += +lsocket -lnsl
+elif CC.HOSTTYPE != "sgi.mips*"
+ LIBS_opt += +lsocket +lnsl
end
if CC.HOSTTYPE == "linux.sparc"
/* the linux.sparc linker still has some problems */
LIBS_opt += -ldll
end
-LIBS_opt += -lsecdb +lintl -ldl
+LIBS_opt += -lsecdb -ldl
if CC.HOSTTYPE == "sol.*"
LIBS_opt += +lw
end
@@ -184,8 +185,9 @@
echo ";" >> $(<)
end
-:: math.tab syscall.s mamexec mamstate.c deparse.c shopen.c $(DOCFILES) \
- bash.c bash_pre_rc.sh hexpand.c mkservice.c
+:: math.tab syscall.s mamexec mamstate.c deparse.c $(DOCFILES) \
+ bash.c bash_pre_rc.sh hexpand.c mkservice.c \
+ shopen.mk shopen.c
:: shtests \
alias.sh append.sh arith.sh arrays.sh attributes.sh basic.sh \
@@ -222,8 +224,9 @@
mkdir $tmp
for i in *.sh
do tst=$tmp/shcomp-${i%.sh}.ksh
- shcomp $i > $tst
- SHELL=$(*:O=1:P=A) $(*:O=1:P=A) $(*:O=3:B) $tst
+ if $(*:O=4) $i > $tst
+ then SHELL=$(*:O=1:P=A) $(*:O=1:P=A) $(*:O=3:B) $tst
+ fi
rm -f $tst
done
rm -rf $tmp
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/Mamfile
ksh93_2007_03_28/src/cmd/ksh93/Mamfile
--- ksh93_2007_01_11/src/cmd/ksh93/Mamfile 2007-01-12 10:54:39.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/Mamfile 2007-03-29 19:07:09.000000000
+0200
@@ -1,4 +1,4 @@
-info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-01-11
+info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-03-26
setv INSTALLROOT ../../..
setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
setv PACKAGE_ast_LIB ${INSTALLROOT}/lib
@@ -140,7 +140,7 @@
done sh/pmain.c
meta pmain.o %.c>%.o sh/pmain.c pmain
prev sh/pmain.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_DYNAMIC -D_BLD_shell -D_PACKAGE_ast -c sh/pmain.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_DYNAMIC -D_BLD_shell -D_PACKAGE_ast -DERROR_CONTEXT_T=Error_context_t
-c sh/pmain.c
done pmain.o generated
make libshell.a archive
make shell.req
@@ -152,7 +152,7 @@
exec - case "" in
exec - *?) echo " " ;;
exec - esac
-exec - for i in shell dll cmd ast m jobs i secdb intl dl
+exec - for i in shell dll cmd ast m jobs i socket nsl secdb dl
exec - do case $i in
exec - "shell"|shell)
exec - ;;
@@ -187,11 +187,12 @@
done +ljobs dontcare virtual
make +li
done +li dontcare virtual
+make ${mam_libsocket}
+done ${mam_libsocket} dontcare virtual
+bind -lnsl dontcare
make ${mam_libsecdb}
done ${mam_libsecdb} dontcare virtual
-make +lintl
-done +lintl dontcare virtual
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} : run features/time
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} ${mam_libnsl} : run features/time
make ${PACKAGE_ast_INCLUDE}/times.h implicit
make ${PACKAGE_ast_INCLUDE}/ast_time.h implicit
done ${PACKAGE_ast_INCLUDE}/ast_time.h dontcare
@@ -208,9 +209,9 @@
prev shell.req
prev +ljobs
prev +li
+prev ${mam_libsocket}
prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} : run features/dynamic
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} ${mam_libnsl} : run features/dynamic
make ${PACKAGE_ast_INCLUDE}/fs3d.h implicit
prev ${PACKAGE_ast_INCLUDE}/ast_fs.h implicit
prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
@@ -223,9 +224,9 @@
prev shell.req
prev +ljobs
prev +li
+prev ${mam_libsocket}
prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} : run features/options
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} ${mam_libnsl} : run features/options
done FEATURE/options dontcare generated
prev ${PACKAGE_ast_INCLUDE}/option.h implicit
done include/builtins.h
@@ -246,9 +247,9 @@
prev shell.req
prev +ljobs
prev +li
+prev ${mam_libsocket}
prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} : run features/sigfeatures
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} ${mam_libnsl} : run features/sigfeatures
done FEATURE/sigfeatures dontcare generated
make FEATURE/setjmp implicit
meta FEATURE/setjmp features/%>FEATURE/% features/setjmp setjmp
@@ -257,9 +258,9 @@
prev shell.req
prev +ljobs
prev +li
+prev ${mam_libsocket}
prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} : run features/setjmp
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} ${mam_libnsl} : run features/setjmp
done FEATURE/setjmp dontcare generated
prev ${PACKAGE_ast_INCLUDE}/sfio.h implicit
prev ${PACKAGE_ast_INCLUDE}/error.h implicit
@@ -267,7 +268,6 @@
done ${PACKAGE_ast_INCLUDE}/sig.h dontcare
done include/fault.h
make include/history.h implicit
-prev ${PACKAGE_ast_INCLUDE}/sfio.h implicit
prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
done include/history.h
prev ${PACKAGE_ast_INCLUDE}/cdt.h implicit
@@ -279,7 +279,7 @@
done bltins/alarm.c
meta alarm.o %.c>%.o bltins/alarm.c alarm
prev bltins/alarm.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/alarm.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH
-DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-DSHOPT_ESH -c bltins/alarm.c
done alarm.o generated
make cd_pwd.o
make bltins/cd_pwd.c
@@ -299,9 +299,9 @@
prev shell.req
prev +ljobs
prev +li
+prev ${mam_libsocket}
prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} : def acct
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} ${mam_libnsl} : def acct
done FEATURE/acct dontcare generated
prev include/nval.h implicit
prev FEATURE/options implicit
@@ -317,7 +317,7 @@
done bltins/cd_pwd.c
meta cd_pwd.o %.c>%.o bltins/cd_pwd.c cd_pwd
prev bltins/cd_pwd.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_SUID_EXEC
-DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c
bltins/cd_pwd.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_SUID_EXEC
-DSHOPT_BRACEPAT -DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/cd_pwd.c
done cd_pwd.o generated
make cflow.o
make bltins/cflow.c
@@ -332,7 +332,7 @@
done bltins/cflow.c
meta cflow.o %.c>%.o bltins/cflow.c cflow
prev bltins/cflow.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA
-DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/cflow.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA
-DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-DSHOPT_ESH -c bltins/cflow.c
done cflow.o generated
make deparse.o
make sh/deparse.c
@@ -345,7 +345,7 @@
done sh/deparse.c
meta deparse.o %.c>%.o sh/deparse.c deparse
prev sh/deparse.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -D_BLD_shell
-DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/deparse.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -D_BLD_shell
-DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t
-DSHOPT_ESH -c sh/deparse.c
done deparse.o generated
make getopts.o
make bltins/getopts.c
@@ -357,7 +357,7 @@
done bltins/getopts.c
meta getopts.o %.c>%.o bltins/getopts.c getopts
prev bltins/getopts.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/getopts.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH
-DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-DSHOPT_ESH -c bltins/getopts.c
done getopts.o generated
make hist.o
make bltins/hist.c
@@ -372,9 +372,9 @@
prev shell.req
prev +ljobs
prev +li
+prev ${mam_libsocket}
prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} : run features/ttys
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} ${mam_libnsl} : run features/ttys
done FEATURE/ttys dontcare generated
done include/terminal.h dontcare
prev FEATURE/setjmp implicit
@@ -386,9 +386,9 @@
prev shell.req
prev +ljobs
prev +li
+prev ${mam_libsocket}
prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} : run features/locale
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} ${mam_libnsl} : run features/locale
done FEATURE/locale dontcare generated
prev FEATURE/options implicit
done include/edit.h dontcare
@@ -407,7 +407,7 @@
done bltins/hist.c
meta hist.o %.c>%.o bltins/hist.c hist
prev bltins/hist.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -DSHOPT_ESH -DSHOPT_VSH
-D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC -c bltins/hist.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -DSHOPT_ESH -DSHOPT_VSH
-D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DERROR_CONTEXT_T=Error_context_t
-DSHOPT_DYNAMIC -c bltins/hist.c
done hist.o generated
make misc.o
make bltins/misc.c
@@ -428,7 +428,7 @@
done bltins/misc.c
meta misc.o %.c>%.o bltins/misc.c misc
prev bltins/misc.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_ESH -DKSHELL
-DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_KIA -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -c bltins/misc.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_ESH -DKSHELL
-DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_KIA -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c bltins/misc.c
done misc.o generated
make print.o
make bltins/print.c
@@ -466,7 +466,7 @@
done bltins/print.c
meta print.o %.c>%.o bltins/print.c print
prev bltins/print.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -D_PACKAGE_ast -D_BLD_shell -DSHOPT_PFSH -DSHOPT_ESH -DKSHELL
-DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -c bltins/print.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -D_PACKAGE_ast -D_BLD_shell -DSHOPT_PFSH -DSHOPT_ESH -DKSHELL
-DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -c
bltins/print.c
done print.o generated
make read.o
make bltins/read.c
@@ -490,6 +490,7 @@
prev ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
done ${PACKAGE_ast_INCLUDE}/ast_wchar.h dontcare
done ${PACKAGE_ast_INCLUDE}/wchar.h dontcare
+prev FEATURE/locale implicit
done include/lexstates.h
prev include/variables.h implicit
prev include/defs.h implicit
@@ -498,7 +499,7 @@
done bltins/read.c
meta read.o %.c>%.o bltins/read.c read
prev bltins/read.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -DSHOPT_HISTEXPAND -DKSHELL -DSHOPT_ESH -DSHOPT_VSH
-D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC -c bltins/read.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -DSHOPT_HISTEXPAND -DKSHELL -DSHOPT_ESH -DSHOPT_VSH
-D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC
-DERROR_CONTEXT_T=Error_context_t -c bltins/read.c
done read.o generated
make sleep.o
make bltins/sleep.c
@@ -509,9 +510,9 @@
prev shell.req
prev +ljobs
prev +li
+prev ${mam_libsocket}
prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} : run features/poll
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} ${mam_libnsl} : run features/poll
done FEATURE/poll generated
prev FEATURE/time implicit
prev include/builtins.h implicit
@@ -520,7 +521,7 @@
done bltins/sleep.c
meta sleep.o %.c>%.o bltins/sleep.c sleep
prev bltins/sleep.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/sleep.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH
-DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-DSHOPT_ESH -c bltins/sleep.c
done sleep.o generated
make trap.o
make bltins/trap.c
@@ -530,7 +531,7 @@
done bltins/trap.c
meta trap.o %.c>%.o bltins/trap.c trap
prev bltins/trap.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/trap.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c bltins/trap.c
done trap.o generated
make test.o
make bltins/test.c
@@ -543,9 +544,9 @@
prev shell.req
prev +ljobs
prev +li
+prev ${mam_libsocket}
prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} : run features/externs
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} ${mam_libnsl} : run features/externs
done FEATURE/externs generated
prev include/builtins.h implicit
prev include/test.h implicit
@@ -557,7 +558,7 @@
done bltins/test.c
meta test.o %.c>%.o bltins/test.c test
prev bltins/test.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DKSHELL
-DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/test.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DKSHELL
-DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-DSHOPT_ESH -c bltins/test.c
done test.o generated
make typeset.o
make bltins/typeset.c
@@ -572,7 +573,7 @@
done bltins/typeset.c
meta typeset.o %.c>%.o bltins/typeset.c typeset
prev bltins/typeset.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_DYNAMIC -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell
-DSHOPT_ESH -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -c
bltins/typeset.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_DYNAMIC -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell
-DSHOPT_ESH -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT
-DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND -c bltins/typeset.c
done typeset.o generated
make ulimit.o
make bltins/ulimit.c
@@ -584,9 +585,9 @@
prev shell.req
prev +ljobs
prev +li
+prev ${mam_libsocket}
prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} : run features/rlimits
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} ${mam_libnsl} : run features/rlimits
done FEATURE/rlimits dontcare generated
prev FEATURE/time implicit
done include/ulimit.h
@@ -599,7 +600,7 @@
done bltins/ulimit.c
meta ulimit.o %.c>%.o bltins/ulimit.c ulimit
prev bltins/ulimit.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_DYNAMIC -c
bltins/ulimit.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_DYNAMIC
-DERROR_CONTEXT_T=Error_context_t -c bltins/ulimit.c
done ulimit.o generated
make umask.o
make bltins/umask.c
@@ -612,7 +613,7 @@
done bltins/umask.c
meta umask.o %.c>%.o bltins/umask.c umask
prev bltins/umask.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_DYNAMIC -c
bltins/umask.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_DYNAMIC
-DERROR_CONTEXT_T=Error_context_t -c bltins/umask.c
done umask.o generated
make whence.o
make bltins/whence.c
@@ -632,7 +633,7 @@
done bltins/whence.c
meta whence.o %.c>%.o bltins/whence.c whence
prev bltins/whence.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA
-DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-DSHOPT_ESH -c bltins/whence.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA
-DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DERROR_CONTEXT_T=Error_context_t
-DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c bltins/whence.c
done whence.o generated
make main.o
make sh/main.c
@@ -650,18 +651,18 @@
prev shell.req
prev +ljobs
prev +li
+prev ${mam_libsocket}
prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} : def execargs
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} ${mam_libnsl} : def execargs
done FEATURE/execargs generated
make FEATURE/pstat implicit
meta FEATURE/pstat >FEATURE/% pstat
prev shell.req
prev +ljobs
prev +li
+prev ${mam_libsocket}
prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} : def pstat
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} ${mam_libnsl} : def pstat
done FEATURE/pstat generated
prev FEATURE/time implicit
make include/timeout.h implicit
@@ -683,7 +684,7 @@
done sh/main.c
meta main.o %.c>%.o sh/main.c main
prev sh/main.c
-exec - ${CC} ${mam_cc_FLAGS} ${-debug-symbols?1?${mam_cc_DEBUG}
-D_BLD_DEBUG?${CCFLAGS.FORCE}?} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_BRACEPAT -D_PACKAGE_ast -DSHOPT_ESH -DSHOPT_KIA -D_BLD_shell
-DSHOPT_MULTIBYTE -DSHOPT_PFSH -DKSHELL -DSHOPT_SUID_EXEC -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -c sh/main.c
+exec - ${CC} ${mam_cc_FLAGS} ${-debug-symbols?1?${mam_cc_DEBUG}
-D_BLD_DEBUG?${CCFLAGS.FORCE}?} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_BRACEPAT -D_PACKAGE_ast -DSHOPT_ESH -DSHOPT_KIA -D_BLD_shell
-DSHOPT_MULTIBYTE -DSHOPT_PFSH -DKSHELL -DSHOPT_SUID_EXEC -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c sh/main.c
done main.o generated
make nvdisc.o
make sh/nvdisc.c
@@ -694,11 +695,10 @@
done sh/nvdisc.c
meta nvdisc.o %.c>%.o sh/nvdisc.c nvdisc
prev sh/nvdisc.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_NAMESPACE -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -D_BLD_shell
-D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/nvdisc.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_NAMESPACE -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -D_BLD_shell
-D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c sh/nvdisc.c
done nvdisc.o generated
make arith.o
make sh/arith.c
-prev FEATURE/locale implicit
prev include/variables.h implicit
prev include/streval.h implicit
prev include/name.h implicit
@@ -707,7 +707,7 @@
done sh/arith.c
meta arith.o %.c>%.o sh/arith.c arith
prev sh/arith.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH -D_BLD_shell -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/arith.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c sh/arith.c
done arith.o generated
make args.o
make sh/args.c
@@ -722,7 +722,7 @@
done sh/args.c
meta args.o %.c>%.o sh/args.c args
prev sh/args.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_OPTIMIZE -DSHOPT_RAWONLY -DSHOPT_HISTEXPAND -DSHOPT_PFSH -D_BLD_shell
-DKSHELL -D_PACKAGE_ast -DSHOPT_KIA -DSHOPT_MULTIBYTE -DSHOPT_ESH -DSHOPT_VSH
-DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_DYNAMIC -c sh/args.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_OPTIMIZE -DSHOPT_RAWONLY -DSHOPT_HISTEXPAND -DSHOPT_PFSH -D_BLD_shell
-DKSHELL -D_PACKAGE_ast -DSHOPT_KIA -DSHOPT_MULTIBYTE -DSHOPT_ESH -DSHOPT_VSH
-DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_DYNAMIC
-DERROR_CONTEXT_T=Error_context_t -c sh/args.c
done args.o generated
make array.o
make sh/array.c
@@ -732,7 +732,7 @@
done sh/array.c
meta array.o %.c>%.o sh/array.c array
prev sh/array.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH
-DSHOPT_MULTIBYTE -DSHOPT_PFSH -c sh/array.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -DSHOPT_MULTIBYTE -DSHOPT_PFSH -c
sh/array.c
done array.o generated
make completion.o
make edit/completion.c
@@ -746,7 +746,7 @@
done edit/completion.c
meta completion.o %.c>%.o edit/completion.c completion
prev edit/completion.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -DSHOPT_ESH -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DKSHELL
-DSHOPT_VSH -DSHOPT_PFSH -D_BLD_shell -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT
-DSHOPT_DYNAMIC -c edit/completion.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -DSHOPT_ESH -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DKSHELL
-DSHOPT_VSH -DSHOPT_PFSH -D_BLD_shell -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT
-DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c edit/completion.c
done completion.o generated
make defs.o
make sh/defs.c
@@ -758,7 +758,7 @@
done sh/defs.c
meta defs.o %.c>%.o sh/defs.c defs
prev sh/defs.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -DSHOPT_ESH -DSHOPT_VSH
-D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -D_BLD_shell -DSHOPT_DYNAMIC -c
sh/defs.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -DSHOPT_ESH -DSHOPT_VSH
-D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -D_BLD_shell -DSHOPT_DYNAMIC
-DERROR_CONTEXT_T=Error_context_t -c sh/defs.c
done defs.o generated
make edit.o
make edit/edit.c
@@ -776,9 +776,9 @@
prev shell.req
prev +ljobs
prev +li
+prev ${mam_libsocket}
prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} : run features/cmds
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} ${mam_libnsl} : run features/cmds
done FEATURE/cmds generated
prev FEATURE/time implicit
prev FEATURE/options implicit
@@ -787,7 +787,7 @@
done edit/edit.c
meta edit.o %.c>%.o edit/edit.c edit
prev edit/edit.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_RAWONLY -DSHOPT_ESH -DSHOPT_VSH -DSHOPT_MULTIBYTE -DSHOPT_HISTEXPAND
-DKSHELL -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC -c edit/edit.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_RAWONLY -DSHOPT_ESH -DSHOPT_VSH -DSHOPT_MULTIBYTE -DSHOPT_HISTEXPAND
-DKSHELL -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC
-DERROR_CONTEXT_T=Error_context_t -c edit/edit.c
done edit.o generated
make expand.o
make sh/expand.c
@@ -816,7 +816,7 @@
done sh/expand.c
meta expand.o %.c>%.o sh/expand.c expand
prev sh/expand.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_BRACEPAT -DSHOPT_SUID_EXEC -D_BLD_shell -D_PACKAGE_ast
-DSHOPT_MULTIBYTE -DSHOPT_PFSH -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-DSHOPT_ESH -c sh/expand.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_BRACEPAT -DSHOPT_SUID_EXEC -D_BLD_shell -D_PACKAGE_ast
-DSHOPT_MULTIBYTE -DSHOPT_PFSH -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c sh/expand.c
done expand.o generated
make fault.o
make sh/fault.c
@@ -832,7 +832,7 @@
done sh/fault.c
meta fault.o %.c>%.o sh/fault.c fault
prev sh/fault.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_KIA -DSHOPT_ESH -DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_SUID_EXEC
-DSHOPT_BRACEPAT -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DKSHELL
-DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -c sh/fault.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_KIA -DSHOPT_ESH -DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_SUID_EXEC
-DSHOPT_BRACEPAT -D_BLD_shell -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DKSHELL
-DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c
sh/fault.c
done fault.o generated
make fcin.o
make sh/fcin.c
@@ -843,7 +843,7 @@
done sh/fcin.c
meta fcin.o %.c>%.o sh/fcin.c fcin
prev sh/fcin.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -c sh/fcin.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -DERROR_CONTEXT_T=Error_context_t -c sh/fcin.c
done fcin.o generated
make history.o
make edit/history.c
@@ -862,13 +862,12 @@
done edit/history.c
meta history.o %.c>%.o edit/history.c history
prev edit/history.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_VSH -DSHOPT_ESH -DSHOPT_MULTIBYTE -D_PACKAGE_ast -D_BLD_shell -DKSHELL
-DSHOPT_PFSH -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -c edit/history.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_VSH -DSHOPT_ESH -DSHOPT_MULTIBYTE -D_PACKAGE_ast -D_BLD_shell -DKSHELL
-DSHOPT_PFSH -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c edit/history.c
done history.o generated
make init.o
make sh/init.c
make include/version.h implicit
done include/version.h
-prev FEATURE/locale implicit
prev include/lexstates.h implicit
prev FEATURE/dynamic implicit
prev FEATURE/time implicit
@@ -887,7 +886,7 @@
done sh/init.c
meta init.o %.c>%.o sh/init.c init
prev sh/init.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_PFSH -DSHOPT_NAMESPACE -DSHOPT_MULTIBYTE -D_PACKAGE_ast -D_BLD_shell
-DSHOPT_KIA -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_ESH -DSHOPT_VSH
-DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_DYNAMIC -c sh/init.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_PFSH -DSHOPT_NAMESPACE -DSHOPT_MULTIBYTE -D_PACKAGE_ast -D_BLD_shell
-DSHOPT_KIA -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_ESH -DSHOPT_VSH
-DERROR_CONTEXT_T=Error_context_t -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT
-DSHOPT_DYNAMIC -c sh/init.c
done init.o generated
make io.o
make sh/io.c
@@ -910,7 +909,7 @@
done sh/io.c
meta io.o %.c>%.o sh/io.c io
prev sh/io.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_RAWONLY -DSHOPT_VSH -DSHOPT_ESH -DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE
-DKSHELL -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -D_BLD_shell -DSHOPT_SUID_EXEC
-DSHOPT_BRACEPAT -DSHOPT_DYNAMIC -c sh/io.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_RAWONLY -DSHOPT_VSH -DSHOPT_ESH -DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE
-DKSHELL -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA -D_BLD_shell -DSHOPT_SUID_EXEC
-DSHOPT_BRACEPAT -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c sh/io.c
done io.o generated
make jobs.o
make sh/jobs.c
@@ -927,7 +926,7 @@
done sh/jobs.c
meta jobs.o %.c>%.o sh/jobs.c jobs
prev sh/jobs.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_VSH -DSHOPT_ESH -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH
-D_BLD_shell -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -c sh/jobs.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_VSH -DSHOPT_ESH -D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH
-D_BLD_shell -DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-DERROR_CONTEXT_T=Error_context_t -c sh/jobs.c
done jobs.o generated
make lex.o
make sh/lex.c
@@ -946,7 +945,7 @@
done sh/lex.c
meta lex.o %.c>%.o sh/lex.c lex
prev sh/lex.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -DSHOPT_KIA -D_BLD_shell -D_PACKAGE_ast -DSHOPT_PFSH -DKSHELL
-DSHOPT_DYNAMIC -DSHOPT_HISTEXPAND -DSHOPT_ESH -c sh/lex.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -DSHOPT_KIA -D_PACKAGE_ast -D_BLD_shell -DSHOPT_PFSH -DKSHELL
-DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_HISTEXPAND
-DSHOPT_ESH -c sh/lex.c
done lex.o generated
make macro.o
make sh/macro.c
@@ -963,7 +962,7 @@
done sh/macro.c
meta macro.o %.c>%.o sh/macro.c macro
prev sh/macro.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_BRACEPAT -DKSHELL -DSHOPT_OPTIMIZE -DSHOPT_FILESCAN -DSHOPT_MULTIBYTE
-D_PACKAGE_ast -DSHOPT_SUID_EXEC -D_BLD_shell -DSHOPT_PFSH -DSHOPT_KIA
-DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/macro.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_BRACEPAT -DKSHELL -DSHOPT_OPTIMIZE -DSHOPT_FILESCAN -DSHOPT_MULTIBYTE
-D_PACKAGE_ast -DSHOPT_SUID_EXEC -D_BLD_shell -DSHOPT_PFSH -DSHOPT_KIA
-DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t
-DSHOPT_ESH -c sh/macro.c
done macro.o generated
make name.o
make sh/name.c
@@ -971,7 +970,6 @@
prev include/shnodes.h implicit
prev include/streval.h implicit
prev FEATURE/externs implicit
-prev FEATURE/locale implicit
prev include/timeout.h implicit
prev include/lexstates.h implicit
prev include/path.h implicit
@@ -980,7 +978,7 @@
done sh/name.c
meta name.o %.c>%.o sh/name.c name
prev sh/name.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_OPTIMIZE -DSHOPT_MULTIBYTE -D_BLD_shell -D_PACKAGE_ast -DSHOPT_PFSH
-DSHOPT_KIA -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/name.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_OPTIMIZE -D_BLD_shell -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH
-DSHOPT_KIA -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c sh/name.c
done name.o generated
make nvtree.o
make sh/nvtree.c
@@ -990,7 +988,7 @@
done sh/nvtree.c
meta nvtree.o %.c>%.o sh/nvtree.c nvtree
prev sh/nvtree.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -D_BLD_shell -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH
-DSHOPT_MULTIBYTE -DSHOPT_PFSH -c sh/nvtree.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -D_BLD_shell -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -DSHOPT_MULTIBYTE -DSHOPT_PFSH -c
sh/nvtree.c
done nvtree.o generated
make parse.o
make sh/parse.c
@@ -1006,7 +1004,7 @@
done sh/parse.c
meta parse.o %.c>%.o sh/parse.c parse
prev sh/parse.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_NAMESPACE -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -D_BLD_shell
-D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_ESH
-DSHOPT_DYNAMIC -DSHOPT_HISTEXPAND -DKSHELL -c sh/parse.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_NAMESPACE -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -D_BLD_shell
-D_PACKAGE_ast -DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_ESH
-DERROR_CONTEXT_T=Error_context_t -DSHOPT_DYNAMIC -DSHOPT_HISTEXPAND -DKSHELL
-c sh/parse.c
done parse.o generated
make path.o
make sh/path.c
@@ -1028,7 +1026,7 @@
done sh/path.c
meta path.o %.c>%.o sh/path.c path
prev sh/path.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSH_CMDLIB_DIR=\""/opt/ast/bin"\" -D_PACKAGE_ast -DSHOPT_SUID_EXEC
-DSHOPT_PFSH -DSHOPT_MULTIBYTE -DSHOPT_ESH -D_BLD_shell -DKSHELL
-DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -c sh/path.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -DSHOPT_SUID_EXEC -DSHOPT_PFSH -DSHOPT_MULTIBYTE -DSHOPT_ESH
-D_BLD_shell -DKSHELL -DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-DERROR_CONTEXT_T=Error_context_t -c sh/path.c
done path.o generated
make string.o
make sh/string.c
@@ -1043,7 +1041,7 @@
done sh/string.c
meta string.o %.c>%.o sh/string.c string
prev sh/string.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-D_BLD_shell -DSHOPT_ESH -DSHOPT_PFSH -c sh/string.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-D_BLD_shell -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -DSHOPT_PFSH -c
sh/string.c
done string.o generated
make streval.o
make sh/streval.c
@@ -1054,7 +1052,7 @@
done sh/streval.c
meta streval.o %.c>%.o sh/streval.c streval
prev sh/streval.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -D_PACKAGE_ast -c sh/streval.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -D_PACKAGE_ast -DERROR_CONTEXT_T=Error_context_t -c sh/streval.c
done streval.o generated
make subshell.o
make sh/subshell.c
@@ -1070,7 +1068,7 @@
done sh/subshell.c
meta subshell.o %.c>%.o sh/subshell.c subshell
prev sh/subshell.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -D_BLD_shell -D_PACKAGE_ast
-DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DKSHELL -DSHOPT_HISTEXPAND
-DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/subshell.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT -D_BLD_shell -D_PACKAGE_ast
-DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DERROR_CONTEXT_T=Error_context_t
-DKSHELL -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -DSHOPT_ESH -c sh/subshell.c
done subshell.o generated
make tdump.o
make sh/tdump.c
@@ -1082,7 +1080,7 @@
done sh/tdump.c
meta tdump.o %.c>%.o sh/tdump.c tdump
prev sh/tdump.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DKSHELL -D_PACKAGE_ast -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT
-DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-DSHOPT_ESH -c sh/tdump.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DKSHELL -D_PACKAGE_ast -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT
-DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c sh/tdump.c
done tdump.o generated
make timers.o
make sh/timers.c
@@ -1096,7 +1094,7 @@
done sh/timers.c
meta timers.o %.c>%.o sh/timers.c timers
prev sh/timers.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -D_BLD_shell -DSHOPT_ESH
-DSHOPT_MULTIBYTE -DSHOPT_PFSH -c sh/timers.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -D_BLD_shell
-DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -DSHOPT_MULTIBYTE -DSHOPT_PFSH -c
sh/timers.c
done timers.o generated
make trestore.o
make sh/trestore.c
@@ -1108,7 +1106,7 @@
done sh/trestore.c
meta trestore.o %.c>%.o sh/trestore.c trestore
prev sh/trestore.c
-exec - ${CC} ${mam_cc_FLAGS} ${-debug-symbols?1?${mam_cc_DEBUG}
-D_BLD_DEBUG?${CCFLAGS.FORCE}?} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DKSHELL -D_PACKAGE_ast -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT
-DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-DSHOPT_ESH -c sh/trestore.c
+exec - ${CC} ${mam_cc_FLAGS} ${-debug-symbols?1?${mam_cc_DEBUG}
-D_BLD_DEBUG?${CCFLAGS.FORCE}?} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_BLD_shell -DKSHELL -D_PACKAGE_ast -DSHOPT_SUID_EXEC -DSHOPT_BRACEPAT
-DSHOPT_MULTIBYTE -DSHOPT_PFSH -DSHOPT_KIA -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC
-DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c sh/trestore.c
done trestore.o generated
make waitevent.o
make sh/waitevent.c
@@ -1116,7 +1114,7 @@
done sh/waitevent.c
meta waitevent.o %.c>%.o sh/waitevent.c waitevent
prev sh/waitevent.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -D_BLD_shell -D_PACKAGE_ast -DSHOPT_ESH
-DSHOPT_MULTIBYTE -DSHOPT_PFSH -c sh/waitevent.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -D_BLD_shell -D_PACKAGE_ast
-DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -DSHOPT_MULTIBYTE -DSHOPT_PFSH -c
sh/waitevent.c
done waitevent.o generated
make xec.o
make sh/xec.c
@@ -1142,7 +1140,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 -DSHOPT_ESH -c 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
done xec.o generated
make env.o
make sh/env.c
@@ -1178,7 +1176,7 @@
done data/msg.c
meta msg.o %.c>%.o data/msg.c msg
prev data/msg.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_SUID_EXEC -DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -DSHOPT_ESH
-DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_KIA
-DSHOPT_BRACEPAT -DSHOPT_DYNAMIC -c data/msg.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_SUID_EXEC -DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -DSHOPT_ESH
-DSHOPT_VSH -D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_KIA
-DSHOPT_BRACEPAT -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c
data/msg.c
done msg.o generated
make strdata.o
make data/strdata.c
@@ -1191,9 +1189,9 @@
prev shell.req
prev +ljobs
prev +li
+prev ${mam_libsocket}
prev ${mam_libsecdb}
-prev +lintl
-exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} : run features/math.sh data/math.tab
+exec - iffe -v -c '${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ' ref
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE}
-I${INSTALLROOT}/include ${mam_libdll} ${mam_libcmd} ${mam_libast} ${mam_libm}
${mam_libdl} ${mam_libnsl} : run features/math.sh data/math.tab
make ${PACKAGE_ast_INCLUDE}/ast_standards.h implicit
done ${PACKAGE_ast_INCLUDE}/ast_standards.h dontcare
done FEATURE/math generated
@@ -1224,7 +1222,7 @@
done data/keywords.c
meta keywords.o %.c>%.o data/keywords.c keywords
prev data/keywords.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_NAMESPACE -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA
-D_BLD_shell -DSHOPT_DYNAMIC -c data/keywords.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_NAMESPACE -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_KIA
-D_BLD_shell -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -c
data/keywords.c
done keywords.o generated
make options.o
make data/options.c
@@ -1235,7 +1233,7 @@
done data/options.c
meta options.o %.c>%.o data/options.c options
prev data/options.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_PFSH -DSHOPT_HISTEXPAND -D_BLD_shell -D_PACKAGE_ast -DSHOPT_MULTIBYTE
-DSHOPT_DYNAMIC -DSHOPT_ESH -c data/options.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_PFSH -DSHOPT_HISTEXPAND -D_BLD_shell -D_PACKAGE_ast -DSHOPT_MULTIBYTE
-DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -c data/options.c
done options.o generated
make signals.o
make data/signals.c
@@ -1245,7 +1243,7 @@
done data/signals.c
meta signals.o %.c>%.o data/signals.c signals
prev data/signals.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -c data/signals.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -DERROR_CONTEXT_T=Error_context_t -c data/signals.c
done signals.o generated
make aliases.o
make data/aliases.c
@@ -1261,9 +1259,6 @@
done aliases.o generated
make builtins.o
make data/builtins.c
-make ${PACKAGE_ast_INCLUDE}/cmdlist.h implicit
-prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
-done ${PACKAGE_ast_INCLUDE}/cmdlist.h dontcare
prev FEATURE/cmds implicit
prev include/jobs.h implicit
prev include/builtins.h implicit
@@ -1271,11 +1266,12 @@
prev include/name.h implicit
prev include/ulimit.h implicit
prev include/shtable.h implicit
+prev include/defs.h implicit
prev include/shell.h implicit
done data/builtins.c
meta builtins.o %.c>%.o data/builtins.c builtins
prev data/builtins.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_KIA -DSHOPT_PFSH -DUSAGE_LICENSE=\""[-author?David Korn <dgk at
research.att.com>][-copyright?Copyright (c) 1982-2007 AT&T Knowledge
Ventures][-license?http://www.opensource.org/licenses/cpl1.0.txt][--catalog?libshell]"\"
-DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSH_CMDLIB_DIR=\""/opt/ast/bin"\"
-DSHOPT_CMDLIB_BLTIN=0 -DSHOPT_MULTIBYTE -D_PACKAGE_ast -D_BLD_shell -DKSHELL
-DSHOPT_DYNAMIC -c data/builtins.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_KIA -DSHOPT_PFSH -DUSAGE_LICENSE=\""[-author?David Korn <dgk at
research.att.com>][-copyright?Copyright (c) 1982-2007 AT&T Knowledge
Ventures][-license?http://www.opensource.org/licenses/cpl1.0.txt][--catalog?libshell]"\"
-DSHOPT_BRACEPAT -DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -D_PACKAGE_ast
-D_BLD_shell -DKSHELL -DSHOPT_DYNAMIC -DERROR_CONTEXT_T=Error_context_t
-DSHOPT_ESH -c data/builtins.c
done builtins.o generated
make variables.o
make data/variables.c
@@ -1289,7 +1285,7 @@
done data/variables.c
meta variables.o %.c>%.o data/variables.c variables
prev data/variables.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -D_BLD_shell
-D_PACKAGE_ast -DSHOPT_ESH -DSHOPT_PFSH -c data/variables.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -DSHOPT_HISTEXPAND -DSHOPT_DYNAMIC -D_BLD_shell
-D_PACKAGE_ast -DERROR_CONTEXT_T=Error_context_t -DSHOPT_ESH -DSHOPT_PFSH -c
data/variables.c
done variables.o generated
make lexstates.o
make data/lexstates.c
@@ -1308,11 +1304,12 @@
prev include/history.h implicit
prev include/io.h implicit
prev include/defs.h implicit
+prev FEATURE/cmds implicit
prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
done edit/emacs.c
meta emacs.o %.c>%.o edit/emacs.c emacs
prev edit/emacs.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -DSHOPT_HISTEXPAND -DKSHELL -DSHOPT_ESH -DSHOPT_VSH
-D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC -c edit/emacs.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_MULTIBYTE -DSHOPT_HISTEXPAND -DKSHELL -DSHOPT_ESH -DSHOPT_VSH
-D_PACKAGE_ast -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC
-DERROR_CONTEXT_T=Error_context_t -c edit/emacs.c
done emacs.o generated
make vi.o
make edit/vi.c
@@ -1328,7 +1325,7 @@
done edit/vi.c
meta vi.o %.c>%.o edit/vi.c vi
prev edit/vi.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_RAWONLY -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DKSHELL
-DSHOPT_ESH -DSHOPT_VSH -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC -c edit/vi.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_RAWONLY -DSHOPT_MULTIBYTE -D_PACKAGE_ast -DSHOPT_HISTEXPAND -DKSHELL
-DSHOPT_ESH -DSHOPT_VSH -DSHOPT_PFSH -D_BLD_shell -DSHOPT_DYNAMIC
-DERROR_CONTEXT_T=Error_context_t -c edit/vi.c
done vi.o generated
make hexpand.o
make edit/hexpand.c
@@ -1337,7 +1334,7 @@
done edit/hexpand.c
meta hexpand.o %.c>%.o edit/hexpand.c hexpand
prev edit/hexpand.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -DSHOPT_ESH -DSHOPT_VSH
-D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_DYNAMIC -D_BLD_shell -c edit/hexpand.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSHOPT_HISTEXPAND -DSHOPT_MULTIBYTE -DKSHELL -DSHOPT_ESH -DSHOPT_VSH
-D_PACKAGE_ast -DSHOPT_PFSH -DSHOPT_DYNAMIC -D_BLD_shell
-DERROR_CONTEXT_T=Error_context_t -c edit/hexpand.c
done hexpand.o generated
exec - ${AR} cr libshell.a alarm.o cd_pwd.o cflow.o deparse.o getopts.o hist.o
misc.o print.o read.o sleep.o trap.o test.o typeset.o ulimit.o umask.o whence.o
main.o nvdisc.o arith.o args.o array.o completion.o defs.o edit.o expand.o
fault.o fcin.o history.o init.o io.o
exec - ${AR} cr libshell.a jobs.o lex.o macro.o name.o nvtree.o parse.o path.o
string.o streval.o subshell.o tdump.o timers.o trestore.o waitevent.o xec.o
env.o limits.o msg.o strdata.o testops.o keywords.o options.o signals.o
aliases.o builtins.o variables.o lexstates.o emacs.o vi.o hexpand.o
@@ -1346,9 +1343,9 @@
bind -lshell
prev +ljobs
prev +li
+prev ${mam_libsocket}
prev ${mam_libsecdb}
-prev +lintl
-exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS}
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -o ksh pmain.o
${mam_libshell} ${mam_libdl} ${mam_libast}
+exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS}
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -o ksh pmain.o
${mam_libshell} ${mam_libnsl} ${mam_libdl} ${mam_libast}
done ksh generated
make shcomp
make shcomp.o
@@ -1362,16 +1359,16 @@
setv SH_DICT -DSH_DICT="\"libshell\""
setv _BLD_shell -U_BLD_shell
setv _BLD_DLL -U_BLD_DLL
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSH_DICT=\""libshell"\" -DSHOPT_KIA -D_PACKAGE_ast -DSHOPT_DYNAMIC
-DUSAGE_LICENSE=\""[-author?David Korn <dgk at
research.att.com>][-copyright?Copyright (c) 1982-2007 AT&T Knowledge
Ventures][-license?http://www.opensource.org/licenses/cpl1.0.txt][--catalog?libshell]"\"
-c sh/shcomp.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -Iinclude -I${PACKAGE_ast_INCLUDE}
-DSH_DICT=\""libshell"\" -DSHOPT_KIA -D_PACKAGE_ast -DSHOPT_DYNAMIC
-DERROR_CONTEXT_T=Error_context_t -DUSAGE_LICENSE=\""[-author?David Korn <dgk
at research.att.com>][-copyright?Copyright (c) 1982-2007 AT&T Knowledge
Ventures][-license?http://www.opensource.org/licenses/cpl1.0.txt][--catalog?libshell]"\"
-c sh/shcomp.c
done shcomp.o generated
prev libshell.a archive
prev +ljobs
prev +li
+prev ${mam_libsocket}
prev ${mam_libsecdb}
-prev +lintl
setv CC.DLL -UCC.DLL
setv SH_DICT -DSH_DICT="\"libshell\""
-exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS}
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -o shcomp shcomp.o
${mam_libshell} ${mam_libdl} ${mam_libast}
+exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS}
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -o shcomp shcomp.o
${mam_libshell} ${mam_libnsl} ${mam_libdl} ${mam_libast}
done shcomp generated
make suid_exec
make suid_exec.o
@@ -1387,14 +1384,14 @@
prev sh/suid_exec.c
setv CC.DLL -UCC.DLL
setv _BLD_shell -U_BLD_shell
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -c sh/suid_exec.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE}
-DERROR_CONTEXT_T=Error_context_t -D_PACKAGE_ast -c sh/suid_exec.c
done suid_exec.o generated
prev +ljobs
prev +li
+prev ${mam_libsocket}
prev ${mam_libsecdb}
-prev +lintl
setv CC.DLL -UCC.DLL
-exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS}
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -o suid_exec suid_exec.o
${mam_libast} ${mam_libdl} ${mam_libast}
+exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS}
${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -o suid_exec suid_exec.o
${mam_libast} ${mam_libnsl} ${mam_libdl} ${mam_libast}
done suid_exec generated
make shell
prev libshell.a archive
@@ -1544,8 +1541,9 @@
exec - mkdir $tmp
exec - for i in *.sh
exec - do tst=$tmp/shcomp-${i%.sh}.ksh
-exec - shcomp $i > $tst
-exec - SHELL=${INSTALLROOT}/bin/ksh ${INSTALLROOT}/bin/ksh shtests $tst
+exec - if shcomp $i > $tst
+exec - then SHELL=${INSTALLROOT}/bin/ksh ${INSTALLROOT}/bin/ksh
shtests $tst
+exec - fi
exec - rm -f $tst
exec - done
exec - rm -rf $tmp
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/nval.3
ksh93_2007_03_28/src/cmd/ksh93/nval.3
--- ksh93_2007_01_11/src/cmd/ksh93/nval.3 2005-06-14 17:25:39.000000000
+0200
+++ ksh93_2007_03_28/src/cmd/ksh93/nval.3 2007-03-20 14:51:26.000000000
+0100
@@ -87,7 +87,7 @@
int nv_scan(Dt_t *\fIdict\fP, void(*\fIfn\fP)(Namval_t*,void*), void
*\fIdata\fP, int \fImask\fP, int \fIflags\fP);
Dt_t nv_dict(Namval_t *\fInp\fP);
void nv_setvtree(Namval_t *\fInp\fP);
-void nv_setref(Namval_t *\fInp\fP);
+void nv_setref(Namval_t *\fInp\fP, Dt_t *\fIdp\fP, int \fIflags\fP);
Namval_t *nv_lastdict(void);
.ft R
.fi
@@ -601,7 +601,10 @@
.PP
The \f5nv_setref()\fP function makes the name-value pair \f5np\fP
into a reference to the variable whose name is given by
-the value of \f5np\fP.
+the value of \f5np\fP. The \f5nv_open()\fP open function is
+called with this name, the dictionary given by \f5dp\fP,
+and the \f5flags\fP argument.
+A \f5NULL\fP value causes the shell global variable dictionary to be searched.
.PP
The \f5nv_setvtree()\fP function makes the name-value pair \f5np\fP
into a tree structured variable so that \f5nv_getval()\fP
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/README
ksh93_2007_03_28/src/cmd/ksh93/README
--- ksh93_2007_01_11/src/cmd/ksh93/README 2003-03-14 04:39:10.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/README 2007-03-25 04:06:09.000000000
+0200
@@ -36,7 +36,7 @@
SH_CMDLIB_DIR nmake state variable can be used to
specify a directory.
CMDLIB_DIR off Sets CMDLIB_BLTIN=1 and provides a default value
- of "/opt/ast/bin/" for SH_CMDLIB_DIR.
+ of "/opt/ast/bin" for SH_CMDLIB_DIR.
COMPOUND_ARRAY
on Allows all components of compound variables except the
first to be any string by enclosing in [...]. It also
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/RELEASE
ksh93_2007_03_28/src/cmd/ksh93/RELEASE
--- ksh93_2007_01_11/src/cmd/ksh93/RELEASE 2006-12-29 16:53:04.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/RELEASE 2007-03-27 20:54:06.000000000
+0200
@@ -1,3 +1,30 @@
+07-03-08 --- Release ksh93s+ ---
+07-03-08 A bug in which set +o output command line options has been fixed.
+07-03-08 A bug in which an error in read (for example, an invalid variable
+ name), could leave the terminal in raw mode has been fixed.
+07-03-06 A bug in which read could core dump when specified with an array
+ variable with a subscript that is an arithmetic expression has
+ been fixed.
+07-03-06 Several serious bugs with the restricted shell were reported and
+ fixed.
+07-03-02 If a job is stopped, and subsequently restarted with a CONT
+ signal and exits normally, ksh93 was incorrectly exiting with
+ the exit status of the stop signal number.
+07-02-26 M-^L added to emacs mode to clear the screen.
+07-02-26 A bug in which setting a variable readonly in a subshell would
+ cause an unset error when the subshell completed has been fixed.
+07-02-19 The format with printf uses the new = flag to center the output.
+07-02-19 A bug in which ksh93 did not allow multibyte characters in
+ identifier names has been fixed.
+07-02-19 A bug introduced in ksh93 that causes global compound variable
+ definitions inside functions to exit with "no parent" has been fixed.
+07-02-19 A bug in which using compound commands in process redirection
+ arguments would give syntax errors <(...) and >(...) has been fixed.
+07-01-29 A bug which caused the shell to core dump which can occur when a
+ built-in exits without closing files that it opens has been fixed.
+07-01-26 A bug in which ~(E) in patterns containing \ that are not inside ()
+ has been fixed.
+
06-12-29 --- Release ksh93s ---
06-12-29 A bug in which the value of IFS could be changed after a command
substitution has been fixed.
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/args.c
ksh93_2007_03_28/src/cmd/ksh93/sh/args.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/args.c 2006-10-06 03:13:26.000000000
+0200
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/args.c 2007-03-27 20:52:51.000000000
+0200
@@ -638,7 +638,6 @@
else if (value&(SH_BASHEXTRA|SH_BASHOPT))
continue;
on = !!is_option(&oflags,value);
- value &= 0xff;
name = tp->sh_name;
if(name[0] == 'n' && name[1] == 'o' && name[2] != 't')
{
@@ -662,7 +661,7 @@
on?'-':'+',
name);
}
- else if(value!=SH_INTERACTIVE && value!=SH_RESTRICTED &&
value!=SH_PFSH && is_option(&oflags,value))
+ else if(!(value&SH_COMMANDLINE) &&
is_option(&oflags,value&0xff))
sfprintf(sfstdout,"
%s%s%s",(mode&PRINT_SHOPT)?"":"--",on?"":"no",name);
}
if(!(mode&(PRINT_VERBOSE|PRINT_ALL)))
@@ -757,7 +756,7 @@
#if _pipe_socketpair && !_socketpair_devfd
# define sh_pipe arg_pipe
/*
- * create a real pipe (not a socked) and print message on failure
+ * create a real pipe (not a socket) and print message on failure
*/
static int arg_pipe(register int pv[])
{
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/arith.c
ksh93_2007_03_28/src/cmd/ksh93/sh/arith.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/arith.c 2006-10-11 22:26:21.000000000
+0200
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/arith.c 2007-03-14 17:02:22.000000000
+0100
@@ -30,10 +30,9 @@
#include "name.h"
#include "streval.h"
#include "variables.h"
-#include "FEATURE/locale"
-#ifndef LONGLONG_MAX
-#define LONGLONG_MAX LONG_MAX
+#ifndef LLONG_MAX
+#define LLONG_MAX LONG_MAX
#endif
static Sfdouble_t Zero, NaN, Inf;
@@ -41,14 +40,14 @@
{
{ 0 },
"Inf",
- NV_NOFREE|NV_INTEGER|NV_DOUBLE|NV_LONG,NV_RDONLY
+ NV_NOFREE|NV_LDOUBLE,NV_RDONLY
};
static Namval_t NaNnod =
{
{ 0 },
"NaN",
- NV_NOFREE|NV_INTEGER|NV_DOUBLE|NV_LONG,NV_RDONLY
+ NV_NOFREE|NV_LDOUBLE,NV_RDONLY
};
static Namval_t *scope(register Namval_t *np,register struct lval *lvalue,int
assign)
@@ -76,7 +75,7 @@
{
while(nv_isref(mp))
{
- sub = mp->nvenv;
+ sub = nv_refsub(mp);
mp = nv_refnode(mp);
}
np = mp;
@@ -104,16 +103,18 @@
{
register Namval_t *np = (Namval_t*)(lvalue->value);
np = scope(np,lvalue,1);
- nv_putval(np, (char*)&n, NV_INTEGER|NV_DOUBLE|NV_LONG);
+ nv_putval(np, (char*)&n, NV_LDOUBLE);
r=nv_getnum(np);
break;
}
case LOOKUP:
{
register int c = *str;
+ register char *xp=str;
lvalue->value = (char*)0;
if(c=='.')
- c = str[1];
+ str++;
+ c = mbchar(str);
if(isaletter(c))
{
register Namval_t *np;
@@ -121,7 +122,8 @@
char *cp;
while(1)
{
- while(c= *++str, isaname(c));
+ while(xp=str, c=mbchar(str), isaname(c));
+ str = xp;
if(c!='.')
break;
dot=1;
@@ -181,7 +183,11 @@
}
}
else
- while(c= *++str, isaname(c));
+ {
+ str++;
+ while(xp=str, c=mbchar(str),
isaname(c));
+ str = xp;
+ }
}
*str = 0;
if(strcmp(*ptr,"Inf")==0)
@@ -232,7 +238,7 @@
}
else
{
- char lastbase=0, *val = str, oerrno = errno;
+ char lastbase=0, *val = xp, oerrno = errno;
errno = 0;
r = strtonll(val,&str, &lastbase,-1);
if(*str=='8' || *str=='9')
@@ -250,7 +256,7 @@
if(*val==0 || *val=='.' || *val=='x' ||
*val=='X')
val--;
}
- if(r==LONGLONG_MAX && errno)
+ if(r==LLONG_MAX && errno)
c='e';
else
c = *str;
@@ -323,7 +329,11 @@
register Sfdouble_t d;
char base=0, *last;
if(*str==0)
+ {
+ if(ptr)
+ *ptr = (char*)str;
return(0);
+ }
errno = 0;
d = strtonll(str,&last,&base,-1);
if(*last || errno)
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/array.c
ksh93_2007_03_28/src/cmd/ksh93/sh/array.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/array.c 2006-11-16 21:48:47.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/array.c 2007-03-15 21:58:02.000000000
+0100
@@ -33,9 +33,9 @@
#define NUMSIZE (4+(ARRAY_MAX>999)+(ARRAY_MAX>9999)+(ARRAY_MAX>99999))
#define is_associative(ap) array_assoc((Namarr_t*)(ap))
-#define array_setbit(cp, n) (cp[(n)/CHAR_BIT] |= 2<<(((n)&(CHAR_BIT-1))))
-#define array_clrbit(cp, n) (cp[(n)/CHAR_BIT] &= ~(2<<(((n)&(CHAR_BIT-1)))))
-#define array_isbit(cp, n) (cp[(n)/CHAR_BIT] & 2<<(((n)&(CHAR_BIT-1))))
+#define array_setbit(cp, n) (cp[(n)/CHAR_BIT] |= 1<<(((n)&(CHAR_BIT-1))))
+#define array_clrbit(cp, n) (cp[(n)/CHAR_BIT] &= ~(1<<(((n)&(CHAR_BIT-1)))))
+#define array_isbit(cp, n) (cp[(n)/CHAR_BIT] & 1<<(((n)&(CHAR_BIT-1))))
#define NV_CHILD NV_EXPORT
static char Empty[] = "";
@@ -238,7 +238,7 @@
else if(nv_isattr(np,NV_INTEGER))
{
Sfdouble_t d= nv_getnum(np);
- nv_putval(mp,(char*)&d,NV_LONG|NV_DOUBLE|NV_INTEGER);
+ nv_putval(mp,(char*)&d,NV_LDOUBLE);
}
else
nv_putval(mp,nv_getval(np),NV_RDONLY);
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/defs.c
ksh93_2007_03_28/src/cmd/ksh93/sh/defs.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/defs.c 2006-06-12 17:42:16.000000000
+0200
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/defs.c 2007-02-14 08:59:16.000000000
+0100
@@ -43,5 +43,5 @@
char *sh_lexstates[ST_NONE] = {0};
struct jobs job = {0};
-time_t sh_mailchk = 600;
+int32_t sh_mailchk = 600;
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/fault.c
ksh93_2007_03_28/src/cmd/ksh93/sh/fault.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/fault.c 2006-08-05 05:31:04.000000000
+0200
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/fault.c 2007-02-14 08:59:55.000000000
+0100
@@ -71,12 +71,12 @@
if(sig==SIGWINCH)
{
int rows=0, cols=0;
- long v;
+ int32_t v;
astwinsize(2,&rows,&cols);
if(v = cols)
- nv_putval(COLUMNS, (char*)&v, NV_INTEGER);
+ nv_putval(COLUMNS, (char*)&v, NV_INT32);
if(v = rows)
- nv_putval(LINES, (char*)&v, NV_INTEGER);
+ nv_putval(LINES, (char*)&v, NV_INT32);
}
#endif /* SIGWINCH */
if(sh.savesig)
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/fcin.c
ksh93_2007_03_28/src/cmd/ksh93/sh/fcin.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/fcin.c 2006-02-09 06:19:29.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/fcin.c 2007-03-01 07:58:58.000000000
+0100
@@ -121,6 +121,7 @@
if(_Fcin.fcchar)
*_Fcin.fclast = _Fcin.fcchar;
_Fcin.fclast = 0;
+ _Fcin.fcleft = 0;
return(fcfill());
}
@@ -148,3 +149,63 @@
_Fcin = *fp;
}
+struct Extra
+{
+ unsigned char buff[2*MB_LEN_MAX];
+ unsigned char *next;
+};
+
+int fcmbstate(const char *state, int *s, int *len)
+{
+ static struct Extra extra;
+ register int i, c, n;
+ if(_Fcin.fcleft)
+ {
+ if((c = mbsize(extra.next)) < 0)
+ c = 1;
+ if((_Fcin.fcleft -= c) <=0)
+ {
+ _Fcin.fcptr = (unsigned char*)fcfirst() - _Fcin.fcleft;
+ _Fcin.fcleft = 0;
+ }
+ *len = c;
+ if(c==1)
+ *s = state[*extra.next++];
+ else if(c==0)
+ _Fcin.fcleft = 0;
+ else
+ {
+ c = mbchar(extra.next);
+ *s = state['a'];
+ }
+ return(c);
+ }
+ switch(*len = mbsize(_Fcin.fcptr))
+ {
+ case -1:
+ if(_Fcin._fcfile && (n=(_Fcin.fclast-_Fcin.fcptr)) < MB_LEN_MAX)
+ {
+ memcmp(extra.buff, _Fcin.fcptr, n);
+ _Fcin.fcptr = _Fcin.fclast;
+ for(i=n; i < MB_LEN_MAX+n; i++)
+ {
+ if((extra.buff[i] = fcgetc(c))==0)
+ break;
+ }
+ _Fcin.fcleft = n;
+ extra.next = extra.buff;
+ return(fcmbstate(state,s,len));
+ }
+ *len = 1;
+ /* fall through */
+ case 0:
+ case 1:
+ *s = state[c=fcget()];
+ break;
+ default:
+ c = mbchar(_Fcin.fcptr);
+ *s = state['a'];
+ }
+ return(c);
+}
+
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/init.c
ksh93_2007_03_28/src/cmd/ksh93/sh/init.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/init.c 2007-01-12 08:35:51.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/init.c 2007-03-14 17:02:29.000000000
+0100
@@ -44,7 +44,6 @@
#include "FEATURE/time"
#include "FEATURE/dynamic"
#include "lexstates.h"
-#include "FEATURE/locale"
#include "version.h"
#if SHOPT_MULTIBYTE
@@ -79,7 +78,7 @@
{
Namfun_t hdr;
Shell_t *sh;
- long rand_last;
+ int32_t rand_last;
};
struct ifs
@@ -1269,7 +1268,7 @@
#endif /* _hdr_locale */
(PPIDNOD)->nvalue.lp = (&shp->ppid);
(TMOUTNOD)->nvalue.lp = (&shp->st.tmout);
- (MCHKNOD)->nvalue.lp = (long*)(&sh_mailchk);
+ (MCHKNOD)->nvalue.lp = (&sh_mailchk);
(OPTINDNOD)->nvalue.lp = (&shp->st.optindex);
/* set up the seconds clock */
shp->alias_tree = inittree(shp,shtab_aliases);
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/io.c
ksh93_2007_03_28/src/cmd/ksh93/sh/io.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/io.c 2006-12-11 20:27:10.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/io.c 2007-03-20 21:22:35.000000000
+0100
@@ -656,7 +656,7 @@
}
#endif
}
- if (fd > 0)
+ if (fd >= 0)
{
if((mode=sh_iocheckfd(fd))==IOCLOSE)
return(-1);
@@ -975,6 +975,8 @@
}
else if(iof&IORDW)
{
+ if(sh_isoption(SH_RESTRICTED))
+
errormsg(SH_DICT,ERROR_exit(1),e_restricted,fname);
io_op[2] = '>';
o_mode = O_RDWR|O_CREAT;
goto openit;
@@ -1145,7 +1147,7 @@
{
if(np)
{
- long v;
+ int32_t v;
fn = fd;
if(fd<10)
{
@@ -1156,9 +1158,9 @@
fd = fn;
}
nv_unset(np);
- nv_onattr(np,NV_INTEGER);
+ nv_onattr(np,NV_INT32);
v = fn;
- nv_putval(np,(void*)&v, NV_INTEGER);
+ nv_putval(np,(char*)&v, NV_INT32);
sh_iocheckfd(fd);
}
else
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/jobs.c
ksh93_2007_03_28/src/cmd/ksh93/sh/jobs.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/jobs.c 2006-10-25 02:55:22.000000000
+0200
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/jobs.c 2007-03-03 02:42:46.000000000
+0100
@@ -271,7 +271,10 @@
continue;
}
else if (WIFCONTINUED(wstat) && wcontinued)
+ {
pw->p_flag &= ~(P_NOTIFY|P_SIGNALLED|P_STOPPED);
+ pw->p_exit = 0;
+ }
else
#endif /* SIGTSTP */
{
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/lex.c
ksh93_2007_03_28/src/cmd/ksh93/sh/lex.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/lex.c 2007-01-05 23:24:09.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/lex.c 2007-03-21 19:24:38.000000000
+0100
@@ -302,38 +302,6 @@
#define sh_lex lextoken
#endif
-#if SHOPT_MULTIBYTE
-static int mb_stateskip(const char *state, int *c, int *len)
-{
- int curChar, lexState;
- lexState = 0;
- do
- {
- switch(*len = mbsize(_Fcin.fcptr))
- {
- case -1: /* bogus multiByte char - parse as bytes? */
- case 0: /* NULL byte */
- case 1:
- lexState = state[curChar=fcget()];
- break;
- default:
- /*
- * None of the state tables contain entries
- * for multibyte characters. However, they
- * should be treated the same as any other
- * alpha character, so we'll use the state
- * which would normally be assigned to the
- * 'a' character.
- */
- curChar = mbchar(_Fcin.fcptr);
- lexState = state['a'];
- }
- }
- while(lexState == 0);
- *c = curChar;
- return(lexState);
-}
-#endif /* SHOPT_MULTIBYTE */
/*
* Get the next word and put it on the top of the stak
* A pointer to the current word is stored in shlex.arg
@@ -346,12 +314,10 @@
register int n, c, mode=ST_BEGIN, wordflags=0;
register Lex_t *lp = (Lex_t*)shp->lex_context;
int inlevel=lexd.level, assignment=0, ingrave=0;
+ Sfio_t *sp;
#if SHOPT_MULTIBYTE
- int LEN;
-#else
-# define LEN 1
+ LEN=1;
#endif /* SHOPT_MULTIBYTE */
- Sfio_t *sp;
if(lexd.paren)
{
lexd.paren = 0;
@@ -398,17 +364,7 @@
{
/* skip over characters in the current state */
state = sh_lexstates[mode];
-#if SHOPT_MULTIBYTE
- LEN=1;
- if(mbwide())
- {
- int curchar;
- n = mb_stateskip(state, &curchar, &LEN);
- c = curchar;
- }
- else
-#endif /* SHOPT_MULTIBYTE */
- while((n = state[c=fcget()])==0);
+ while((n=STATE(state,c))==0);
switch(n)
{
case S_BREAK:
@@ -602,7 +558,11 @@
else if(c!='<' && c!='>')
n = 0;
else if(n==LPAREN)
+ {
c |= SYMLPAR;
+ lex.reservok = 1;
+ lex.skipword = 0;
+ }
else if(n=='|')
c |= SYMPIPE;
else if(c=='<' && n=='>')
@@ -1656,30 +1616,8 @@
{
if(n!=S_NL)
{
-#if SHOPT_MULTIBYTE
- if(mbwide())
- {
- do
- {
- switch(mbsize(_Fcin.fcptr))
- {
- case -1: /* bogus multiByte char
- parse as bytes? */
- case 0: /* NULL byte */
- case 1:
- n = state[fcget()];
- break;
- default:
- /* treat as alpha */
- mbchar(_Fcin.fcptr);
- n = state['a'];
- }
- }
- while(n == 0);
- }
- else
-#endif /* SHOPT_MULTIBYTE */
/* skip over regular characters */
- while((n=state[fcget()])==0);
+ while((n=STATE(state,c))==0);
}
if(n==S_EOF || !(c=fcget()))
{
@@ -2065,7 +2003,7 @@
}
*--dp = 0;
#if ERROR_VERSION >= 20000317L
- msg =
ERROR_translate(0,0,error_info.id,ep);
+ msg =
ERROR_translate(0,error_info.id,0,ep);
#else
# if ERROR_VERSION >= 20000101L
msg = ERROR_translate(error_info.id,ep);
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/macro.c
ksh93_2007_03_28/src/cmd/ksh93/sh/macro.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/macro.c 2006-12-18 17:45:48.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/macro.c 2007-02-20 17:21:07.000000000
+0100
@@ -48,6 +48,10 @@
# define STR_GROUP 0
#endif
+#if !SHOPT_MULTIBYTE
+#define mbchar(p) (*(unsigned char*)p++)
+#endif
+
static int _c_;
typedef struct _mac_
{
@@ -407,6 +411,7 @@
int oldquote = mp->quote;
int ansi_c = 0;
int paren = 0;
+ int ere = 0;
int brace = 0;
Sfio_t *sp = mp->sp;
mp->sp = NIL(Sfio_t*);
@@ -502,7 +507,7 @@
{
/* preserve \digit for pattern matching */
/* also \alpha for extended patterns */
- if(!mp->lit && !mp->quote && (n==S_DIG ||
(paren && sh_lexstates[ST_DOL][*(unsigned char*)cp]==S_ALP)))
+ if(!mp->lit && !mp->quote && (n==S_DIG ||
((paren+ere) && sh_lexstates[ST_DOL][*(unsigned char*)cp]==S_ALP)))
break;
/* followed by file expansion */
if(!mp->lit && (n==S_ESC || (!mp->quote &&
@@ -637,7 +642,15 @@
{
mp->patfound = mp->pattern;
if((n=cp[-1])==LPAREN)
+ {
paren++;
+ if((cp-first)>1 && cp[-2]=='~')
+ {
+ char *p = cp;
+ while((c=mbchar(p)) &&
c!=RPAREN && c!='E');
+ ere = c=='E';
+ }
+ }
else if(n==RPAREN)
--paren;
}
@@ -919,7 +932,8 @@
mp->zeros = 0;
idbuff[0] = 0;
idbuff[1] = 0;
- switch(sh_lexstates[ST_DOL][c=fcget()])
+ c = fcget();
+ switch(c>0x7f?S_ALP:sh_lexstates[ST_DOL][c])
{
case S_RBRA:
if(type<M_SIZE)
@@ -1020,7 +1034,7 @@
np = 0;
do
stakputc(c);
- while(((c=fcget()),isaname(c))||type && c=='.');
+ while(((c=fcget()),(c>0x7f||isaname(c)))||type &&
c=='.');
while(c==LBRACT && type)
{
sh.argaddr=0;
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/main.c
ksh93_2007_03_28/src/cmd/ksh93/sh/main.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/main.c 2007-01-12 01:01:02.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/main.c 2007-03-05 23:51:41.000000000
+0100
@@ -135,10 +135,9 @@
register char *name;
register int fdin;
register Sfio_t *iop;
- register int rshflag; /* set for restricted shell */
register Shell_t *shp;
struct stat statb;
- int i;
+ int i, rshflag; /* set for restricted shell */
char *command;
#ifdef _lib_sigvec
/* This is to clear mask that my be left on by rlogin */
@@ -161,6 +160,8 @@
{
/* begin script execution here */
sh_reinit((char**)0);
+ if(rshflag)
+ sh_onoption(SH_RESTRICTED);
}
shp->fn_depth = shp->dot_depth = 0;
command = error_info.id;
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/name.c
ksh93_2007_03_28/src/cmd/ksh93/sh/name.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/name.c 2007-01-04 05:08:27.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/name.c 2007-03-28 07:19:13.000000000
+0200
@@ -31,7 +31,6 @@
#include "path.h"
#include "lexstates.h"
#include "timeout.h"
-#include "FEATURE/locale"
#include "FEATURE/externs"
#include "streval.h"
@@ -75,6 +74,10 @@
# define _data data
#endif
+#if !SHOPT_MULTIBYTE
+# define mbchar(p) (*(unsigned char*)p++)
+#endif /* SHOPT_MULTIBYTE */
+
/* ======== name value pair routines ======== */
#include "shnodes.h"
@@ -414,7 +417,7 @@
Namval_t *nv_create(const char *name, Dt_t *root, int flags, Namfun_t *dp)
{
- register char *cp=(char*)name, *sp;
+ char *cp=(char*)name, *sp, *xp;
register int c;
register Namval_t *np=0, *nq=0;
Namfun_t *fp=0;
@@ -505,11 +508,13 @@
}
while(nv_isref(np))
{
- sub = np->nvenv;
- sh.last_table = nv_table(np);
+ root = nv_reftree(np);
+ sh.last_table = nv_reftable(np);
+ sub = nv_refsub(np);
np = nv_refnode(np);
if(sub && c!='.')
nv_putsub(np,sub,0L);
+ flags |= NV_NOSCOPE;
}
if(sub && c==0)
return(np);
@@ -529,6 +534,7 @@
}
flags |= NV_NOREF;
}
+ sh.last_root = root;
do
{
if(!np)
@@ -654,9 +660,10 @@
break;
default:
dp->last = cp;
- if(!isaletter(c))
+ if((c = mbchar(cp)) && !isaletter(c))
return(np);
- while(c= *(unsigned char*)(++cp),isaname(c));
+ while(xp=cp, c=mbchar(cp), isaname(c));
+ cp = xp;
}
}
return(np);
@@ -691,6 +698,7 @@
sh.last_table = sh.namespace;
if(!root)
root = sh.var_tree;
+ sh.last_root = root;
if(root==sh_subfuntree(1))
{
flags |= NV_NOREF;
@@ -716,7 +724,7 @@
{
while(nv_isref(np))
{
- sh.last_table = nv_table(np);
+ sh.last_table = nv_reftable(np);
np = nv_refnode(np);
}
}
@@ -915,7 +923,7 @@
}
else
{
- if(nv_isattr(np, NV_LONG) &&
sizeof(long)<sizeof(Sflong_t))
+ if(nv_isattr(np, NV_LONG) &&
sizeof(int32_t)<sizeof(Sflong_t))
{
Sflong_t ll=0,oll=0;
if(flags&NV_INTEGER)
@@ -934,18 +942,18 @@
if(flags&NV_LONG)
ll = *((Sfulong_t*)sp);
else if(flags&NV_SHORT)
- ll = *((unsigned
short*)sp);
+ ll = *((uint16_t*)sp);
else
- ll = *((unsigned
long*)sp);
+ ll = *((uint32_t*)sp);
}
else
{
if(flags&NV_LONG)
ll = *((Sflong_t*)sp);
else if(flags&NV_SHORT)
- ll = *((short*)sp);
+ ll = *((uint16_t*)sp);
else
- ll = *((long*)sp);
+ ll = *((uint32_t*)sp);
}
}
else if(sp)
@@ -958,7 +966,7 @@
}
else
{
- long l=0,ol=0;
+ int32_t l=0,ol=0;
if(flags&NV_INTEGER)
{
if(flags&NV_DOUBLE)
@@ -970,49 +978,49 @@
ll = *((float*)sp);
else
ll = *((double*)sp);
- l = (long)ll;
+ l = (int32_t)ll;
}
else if(nv_isattr(np,NV_UNSIGN))
{
if(flags&NV_LONG)
l = *((Sfulong_t*)sp);
else if(flags&NV_SHORT)
- l = *((unsigned
short*)sp);
+ l = *((uint16_t*)sp);
else
- l = *(unsigned long*)sp;
+ l = *(uint32_t*)sp;
}
else
{
if(flags&NV_LONG)
l = *((Sflong_t*)sp);
else if(flags&NV_SHORT)
- l = *((short*)sp);
+ l = *((int16_t*)sp);
else
- l = *(long*)sp;
+ l = *(int32_t*)sp;
}
}
else if(sp)
{
Sfdouble_t ld = sh_arith(sp);
if(ld<0)
- l = (long)ld;
+ l = (int32_t)ld;
else
- l = (unsigned long)ld;
+ l = (uint32_t)ld;
}
if(nv_size(np) <= 1)
nv_setsize(np,10);
if(nv_isattr (np, NV_SHORT))
{
- short s=0;
+ int16_t s=0;
if(flags&NV_APPEND)
s = up->s;
- up->s = s+(short)l;
+ up->s = s+(int16_t)l;
nv_onattr(np,NV_NOFREE);
}
else
{
if(!up->lp)
- up->lp = new_of(long,0);
+ up->lp = new_of(int32_t,0);
else if(flags&NV_APPEND)
ol = *(up->lp);
*(up->lp) = l+ol;
@@ -1039,7 +1047,7 @@
else if(flags&NV_LONG)
sfprintf(sh.strbuf,"%lld\0",*((Sflong_t*)sp));
else
- sfprintf(sh.strbuf,"%ld\0",*((long*)sp));
+ sfprintf(sh.strbuf,"%ld\0",*((int32_t*)sp));
sp = sfstruse(sh.strbuf);
}
if(nv_isattr(np, NV_HOST)==NV_HOST && sp)
@@ -1496,8 +1504,8 @@
if(nv_isref(np))
{
nv_offattr(np,NV_NOFREE|NV_REF);
+ free((void*)np->nvalue.nrp);
np->nvalue.cp = 0;
- np->nvfun = 0;
}
if(!cp)
return;
@@ -1598,11 +1606,7 @@
if(!nv_isarray(np) || !nv_arrayptr(np))
{
if(nv_isref(np))
- {
- if(np->nvenv)
- free((void*)np->nvenv);
- np->nvfun = 0;
- }
+ free((void*)np->nvalue.nrp);
nv_setsize(np,0);
if(!nv_isattr(np,NV_MINIMAL) || nv_isattr(np,NV_EXPORT))
{
@@ -1781,8 +1785,8 @@
goto done;
if(nv_isref(np))
{
- sh.last_table = nv_table(np);
- return(nv_name(up->np));
+ sh.last_table = nv_reftable(np);
+ return(nv_name(nv_refnode(np)));
}
if(np->nvfun)
{
@@ -1829,9 +1833,9 @@
if(nv_isattr (np,NV_LONG))
ll = *(Sfulong_t*)up->llp;
else if(nv_isattr (np,NV_SHORT))
- ll = (unsigned short)up->s;
+ ll = (uint16_t)up->s;
else
- ll = *(unsigned long*)(up->lp);
+ ll = *(uint32_t*)(up->lp);
}
else if(nv_isattr (np,NV_LONG))
ll = *up->llp;
@@ -1911,9 +1915,9 @@
if(nv_isattr(np, NV_LONG))
r = (Sflong_t)*((Sfulong_t*)up->llp);
else if(nv_isattr(np, NV_SHORT))
- r = (Sflong_t)((unsigned short)up->s);
+ r = (Sflong_t)((uint16_t)up->s);
else
- r = *((unsigned long*)up->lp);
+ r = *((uint32_t*)up->lp);
}
else
{
@@ -1950,7 +1954,7 @@
int oldsize,oldatts;
/* check for restrictions */
- if(sh_isoption(SH_RESTRICTED) && ((sp=nv_name(np))==nv_name(PATHNOD) ||
sp==nv_name(SHELLNOD) || sp==nv_name(ENVNOD) ))
+ if(sh_isoption(SH_RESTRICTED) && ((sp=nv_name(np))==nv_name(PATHNOD) ||
sp==nv_name(SHELLNOD) || sp==nv_name(ENVNOD) || sp==nv_name(FPATHNOD)))
errormsg(SH_DICT,ERROR_exit(1),e_restricted,nv_name(np));
/* handle attributes that do not change data separately */
n = np->nvflag;
@@ -2044,7 +2048,7 @@
}
/*
- * This version of getenv the hash storage to access environment values
+ * This version of getenv uses the hash storage to access environment values
*/
char *getenv(const char *name)
/*@
@@ -2056,6 +2060,8 @@
return(oldgetenv(name));
if((np = nv_search(name,sh.var_tree,0)) && nv_isattr(np,NV_EXPORT))
return(nv_getval(np));
+ if(name[0] == 'P' && name[1] == 'A' && name[2] == 'T' && name[3] == 'H'
&& name[4] == 0)
+ return(oldgetenv(name));
return(0);
}
#endif /* _NEXT_SOURCE */
@@ -2146,13 +2152,12 @@
}
/*
- * Create a reference node from <np>
+ * Create a reference node from <np> to $np in dictionary <hp>
*/
-void nv_setref(register Namval_t *np)
+void nv_setref(register Namval_t *np, Dt_t *hp, int flags)
{
register Namval_t *nq, *nr;
register char *ep,*cp;
- Dt_t *hp=sh.var_tree;
if(nv_isref(np))
return;
if(nv_isarray(np))
@@ -2161,18 +2166,13 @@
errormsg(SH_DICT,ERROR_exit(1),e_noref,nv_name(np));
if((ep = lastdot(cp)) && nv_isattr(np,NV_MINIMAL))
errormsg(SH_DICT,ERROR_exit(1),e_badref,nv_name(np));
- if(nv_isattr(np,NV_PARAM))
- {
- if(sh.st.prevst && !(hp=(Dt_t*)sh.st.prevst->save_tree))
- {
- if(!(hp=dtvnext(sh.var_tree)))
- hp = sh.var_tree;
- }
- }
- nr= nq = nv_open(cp, hp, NV_VARNAME|NV_NOREF);
+ if(!hp)
+ hp = sh.var_tree;
+ nr= nq = nv_open(cp, hp, flags|NV_NOREF);
while(nv_isref(nr))
{
- sh.last_table = nv_table(nr);
+ sh.last_table = nv_reftable(nr);
+ hp = nv_reftree(nr);
nr = nv_refnode(nr);
}
if(nr==np)
@@ -2192,10 +2192,12 @@
ep = nv_getsub(nq);
}
nv_unset(np);
- np->nvalue.np = nq;
+ np->nvalue.nrp = newof(0,struct Namref,1,0);
+ np->nvalue.nrp->np = nq;
+ np->nvalue.nrp->root = hp;
if(ep)
- np->nvenv = strdup(ep);
- np->nvfun = (Namfun_t*)sh.last_table;
+ np->nvalue.nrp->sub = strdup(ep);
+ np->nvalue.nrp->table = sh.last_table;
nv_onattr(np,NV_REF|NV_NOFREE);
}
@@ -2256,12 +2258,13 @@
*/
void nv_unref(register Namval_t *np)
{
- Namval_t *nq = nv_refnode(np);
+ Namval_t *nq;
if(!nv_isref(np))
return;
+ nq = nv_refnode(np);
nv_offattr(np,NV_NOFREE|NV_REF);
- np->nvalue.cp = strdup(nv_name(nq=nv_refnode(np)));
- np->nvfun = 0;
+ free((void*)np->nvalue.nrp);
+ np->nvalue.cp = strdup(nv_name(nq));
#if SHOPT_OPTIMIZE
{
Namfun_t *fp;
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/nvdisc.c
ksh93_2007_03_28/src/cmd/ksh93/sh/nvdisc.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/nvdisc.c 2006-12-04 21:53:11.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/nvdisc.c 2007-02-14 09:07:50.000000000
+0100
@@ -75,7 +75,7 @@
Sfdouble_t nv_getn(Namval_t *np, register Namfun_t *nfp)
{
register Namfun_t *fp;
- register Sfdouble_t d=0;
+ register Sfdouble_t d=0;
char *str;
if((fp = nfp) != NIL(Namfun_t*) && !nv_local)
fp = nfp = nfp->next;
@@ -768,9 +768,9 @@
if(nv_isattr(np,NV_LONG))
size = sizeof(Sflong_t);
else if(nv_isattr(np,NV_SHORT))
- size = sizeof(short);
+ size = sizeof(int16_t);
else
- size = sizeof(long);
+ size = sizeof(int32_t);
}
if(!(nval = malloc(size)))
return(0);
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/nvtree.c
ksh93_2007_03_28/src/cmd/ksh93/sh/nvtree.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/nvtree.c 2006-12-14 03:46:11.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/nvtree.c 2007-02-19 21:48:09.000000000
+0100
@@ -374,18 +374,26 @@
}
}
-static void outval(char *name, const char *vname, Sfio_t *outfile, int indent,
int noscope)
+struct Walk
+{
+ Sfio_t *out;
+ Dt_t *root;
+ int noscope;
+ int indent;
+};
+
+static void outval(char *name, const char *vname, struct Walk *wp)
{
register Namval_t *np, *nq;
register Namfun_t *fp;
int isarray=0, associative=0, special=0;
-
if(!(np=nv_open(vname,sh.var_tree,NV_ARRAY|NV_VARNAME|NV_NOADD|NV_NOASSIGN|noscope)))
+
if(!(np=nv_open(vname,wp->root,NV_ARRAY|NV_VARNAME|NV_NOADD|NV_NOASSIGN|wp->noscope)))
return;
if(nv_isarray(np) && *name=='.')
special = 1;
if(!special && (fp=nv_hasdisc(np,&treedisc)))
{
- if(!outfile)
+ if(!wp->out)
{
fp = nv_stack(np,fp);
if(fp = nv_stack(np,NIL(Namfun_t*)))
@@ -403,9 +411,9 @@
if(array_elem(nv_arrayptr(np))==0)
isarray=2;
else
- nq =
nv_putsub(np,NIL(char*),ARRAY_SCAN|(outfile?ARRAY_NOCHILD:0));
+ nq =
nv_putsub(np,NIL(char*),ARRAY_SCAN|(wp->out?ARRAY_NOCHILD:0));
}
- if(!outfile)
+ if(!wp->out)
{
_nv_unset(np,NV_RDONLY);
nv_close(np);
@@ -416,20 +424,20 @@
if(special)
{
associative = 1;
- sfnputc(outfile,'\t',indent);
+ sfnputc(wp->out,'\t',wp->indent);
}
else
{
- sfnputc(outfile,'\t',indent);
- nv_attribute(np,outfile,"typeset",'=');
- nv_outname(outfile,name,-1);
- sfputc(outfile,(isarray==2?'\n':'='));
+ sfnputc(wp->out,'\t',wp->indent);
+ nv_attribute(np,wp->out,"typeset",'=');
+ nv_outname(wp->out,name,-1);
+ sfputc(wp->out,(isarray==2?'\n':'='));
if(isarray)
{
if(isarray==2)
return;
- sfwrite(outfile,"(\n",2);
- sfnputc(outfile,'\t',++indent);
+ sfwrite(wp->out,"(\n",2);
+ sfnputc(wp->out,'\t',++wp->indent);
}
}
while(1)
@@ -439,8 +447,8 @@
{
if(!(fmtq = nv_getsub(np)))
break;
- sfprintf(outfile,"[%s]",sh_fmtq(fmtq));
- sfputc(outfile,'=');
+ sfprintf(wp->out,"[%s]",sh_fmtq(fmtq));
+ sfputc(wp->out,'=');
}
if(!(fmtq = sh_fmtq(nv_getval(np))))
fmtq = "";
@@ -449,33 +457,34 @@
char *qp = strchr(fmtq,'\'');
if(!qp || qp>ep)
{
- sfwrite(outfile,fmtq,ep-fmtq);
- sfputc(outfile,'\\');
+ sfwrite(wp->out,fmtq,ep-fmtq);
+ sfputc(wp->out,'\\');
fmtq = ep;
}
}
if(*name=='[' && !isarray)
- sfprintf(outfile,"(%s)\n",fmtq);
+ sfprintf(wp->out,"(%s)\n",fmtq);
else
- sfputr(outfile,fmtq,'\n');
+ sfputr(wp->out,fmtq,'\n');
if(!nv_nextsub(np))
break;
- sfnputc(outfile,'\t',indent);
+ sfnputc(wp->out,'\t',wp->indent);
}
if(isarray && !special)
{
- sfnputc(outfile,'\t',--indent);
- sfwrite(outfile,")\n",2);
+ sfnputc(wp->out,'\t',--wp->indent);
+ sfwrite(wp->out,")\n",2);
}
}
/*
* format initialization list given a list of assignments <argp>
*/
-static char **genvalue(char **argv, register Sfio_t *outfile, const char
*prefix, int n, int indent, int noscope)
+static char **genvalue(char **argv, const char *prefix, int n, struct Walk *wp)
{
register char *cp,*nextcp,*arg;
register int m,r;
+ register Sfio_t *outfile = wp->out;
if(n==0)
m = strlen(prefix);
else if(cp=nextdot(prefix))
@@ -486,7 +495,7 @@
if(outfile)
{
sfwrite(outfile,"(\n",2);
- indent++;
+ wp->indent++;
}
for(; arg= *argv; argv++)
{
@@ -505,11 +514,11 @@
{
if(outfile)
{
- sfnputc(outfile,'\t',indent);
+ sfnputc(outfile,'\t',wp->indent);
nv_outname(outfile,cp,nextcp-cp);
sfputc(outfile,'=');
}
- argv = genvalue(argv,outfile,cp,n+m+r
,indent,noscope);
+ argv = genvalue(argv,cp,n+m+r,wp);
if(outfile)
sfputc(outfile,'\n');
if(*argv)
@@ -518,25 +527,25 @@
}
else if(outfile && argv[1] &&
memcmp(arg,argv[1],r=strlen(arg))==0 && argv[1][r]=='[')
{
- Namval_t *np =
nv_open(arg,sh.var_tree,NV_VARNAME|NV_NOADD|NV_NOASSIGN|noscope);
+ Namval_t *np =
nv_open(arg,wp->root,NV_VARNAME|NV_NOADD|NV_NOASSIGN|wp->noscope);
if(!np)
continue;
- sfnputc(outfile,'\t',indent);
+ sfnputc(outfile,'\t',wp->indent);
nv_attribute(np,outfile,"typeset",1);
nv_close(np);
sfputr(outfile,arg+m+(n?n+1:0),'=');
- argv = genvalue(++argv,outfile,cp,cp-arg
,indent,noscope);
+ argv = genvalue(++argv,cp,cp-arg ,wp);
sfputc(outfile,'\n');
}
else if(outfile && *cp=='[')
{
- sfnputc(outfile,'\t',indent);
+ sfnputc(outfile,'\t',wp->indent);
sfputr(outfile,cp,'=');
- argv = genvalue(++argv,outfile,cp,cp-arg
,indent,noscope);
+ argv = genvalue(++argv,cp,cp-arg ,wp);
sfputc(outfile,'\n');
}
else
- outval(cp,arg,outfile,indent,noscope);
+ outval(cp,arg,wp);
}
else
break;
@@ -547,10 +556,10 @@
cp = (char*)prefix;
if(c=='.')
cp[m-1] = 0;
- outval(".",prefix-n,outfile,indent,noscope);
+ outval(".",prefix-n,wp);
if(c=='.')
cp[m-1] = c;
- sfnputc(outfile,'\t',indent-1);
+ sfnputc(outfile,'\t',wp->indent-1);
sfputc(outfile,')');
}
return(--argv);
@@ -562,6 +571,7 @@
static char *walk_tree(register Namval_t *np, int dlete)
{
static Sfio_t *out;
+ struct Walk walk;
Sfio_t *outfile;
int savtop = staktell();
char *savptr = stakfreeze(0);
@@ -605,7 +615,11 @@
outfile = out =
sfnew((Sfio_t*)0,(char*)0,-1,-1,SF_WRITE|SF_STRING);
else
sfseek(outfile,0L,SEEK_SET);
- genvalue(argv,outfile,name,0,0,noscope);
+ walk.out = outfile;
+ walk.root = sh.last_root;
+ walk.indent = 0;
+ walk.noscope = noscope;
+ genvalue(argv,name,0,&walk);
stakset(savptr,savtop);
if(!outfile)
return((char*)0);
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/path.c
ksh93_2007_03_28/src/cmd/ksh93/sh/path.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/path.c 2007-01-12 01:02:27.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/path.c 2007-03-06 18:25:51.000000000
+0100
@@ -663,7 +663,7 @@
pp = path_nextcomp(pp,name,0);
if(endpath)
return(endpath);
- if(!isfun)
+ if(!isfun && !sh_isoption(SH_RESTRICTED))
{
if(nv_search(stakptr(PATH_OFFSET),sh.bltin_tree,0))
return(oldpp);
@@ -986,6 +986,24 @@
path = sp;
}
#endif /* SHELLMAGIC */
+ if(sh_isoption(SH_RESTRICTED))
+ {
+ int fd;
+ if((fd = sh_open(opath,O_RDONLY,0)) >= 0)
+ {
+ char buff[PATH_MAX];
+ n = read(fd,buff,sizeof(buff));
+ close(fd);
+ if(n>2 && buff[0]=='#' && buff[1]=='!')
+ {
+ for(s=buff; n>0 && *s!='\n'; n--,s++)
+ {
+ if(*s=='/')
+
errormsg(SH_DICT,ERROR_exit(1),e_restricted,opath);
+ }
+ }
+ }
+ }
if(spawn && !sh_isoption(SH_PFSH))
pid = _spawnveg(opath, &argv[0],envp, spawn>>1);
else
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/streval.c
ksh93_2007_03_28/src/cmd/ksh93/sh/streval.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/streval.c 2006-12-20 20:34:34.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/streval.c 2007-02-12 17:53:30.000000000
+0100
@@ -230,15 +230,15 @@
arith_error(node.value,ptr,ep->emode);
*++sp = num;
type = node.isfloat;
- if(num > LDBL_ULONGLONG_MAX || num < LDBL_LONGLONG_MIN)
+ if(num > LDBL_ULLONG_MAX || num < LDBL_LLONG_MIN)
type = 1;
else
{
Sfdouble_t d=num;
- if(num > LDBL_LONGLONG_MAX && num <=
LDBL_ULONGLONG_MAX)
+ if(num > LDBL_LLONG_MAX && num <=
LDBL_ULLONG_MAX)
{
type = 2;
- d -= LDBL_LONGLONG_MAX;
+ d -= LDBL_LLONG_MAX;
}
if((Sflong_t)d!=d)
type = 1;
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/subshell.c
ksh93_2007_03_28/src/cmd/ksh93/sh/subshell.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/subshell.c 2006-10-24
16:19:13.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/subshell.c 2007-02-26
22:27:37.000000000 +0100
@@ -167,7 +167,7 @@
}
else
{
- short subshell;
+ int16_t subshell;
/* this is the child part of the fork */
/* setting subpid to 1 causes subshell to exit when reached */
sh_onstate(SH_FORKED);
@@ -175,7 +175,7 @@
sh_offstate(SH_MONITOR);
subshell_data = 0;
subshell = sh.subshell = 0;
- nv_putval(SH_SUBSHELLNOD, (char*)&subshell,
NV_INTEGER|NV_SHORT);
+ nv_putval(SH_SUBSHELLNOD, (char*)&subshell, NV_INT16);
sp->subpid=0;
}
}
@@ -230,7 +230,7 @@
lq = lp->next;
if(nv_isarray(mp))
nv_putsub(mp,NIL(char*),ARRAY_SCAN);
- nv_unset(mp);
+ _nv_unset(mp,NV_RDONLY);
nv_setsize(mp,nv_size(np));
if(!nv_isattr(np,NV_MINIMAL) || nv_isattr(np,NV_EXPORT))
mp->nvenv = np->nvenv;
@@ -296,7 +296,7 @@
register Namval_t *np,*nq;
for(np=(Namval_t*)dtfirst(root);np;np=nq)
{
- _nv_unset(np,1);
+ _nv_unset(np,NV_RDONLY);
nq = (Namval_t*)dtnext(root,np);
dtdelete(root,np);
free((void*)np);
@@ -329,7 +329,7 @@
register struct subshell *sp = &sub_data;
int jmpval,nsig;
int savecurenv = shp->curenv;
- short subshell;
+ int16_t subshell;
char *savsig;
Sfio_t *iop=0;
struct checkpt buff;
@@ -347,7 +347,7 @@
savst = shp->st;
sh_pushcontext(&buff,SH_JMPSUB);
subshell = shp->subshell+1;
- nv_putval(SH_SUBSHELLNOD, (char*)&subshell, NV_INTEGER|NV_SHORT);
+ nv_putval(SH_SUBSHELLNOD, (char*)&subshell, NV_INT16);
shp->subshell = subshell;
sp->prev = subshell_data;
subshell_data = sp;
@@ -482,7 +482,7 @@
if(shp->subshell)
shp->subshell--;
subshell = shp->subshell;
- nv_putval(SH_SUBSHELLNOD, (char*)&subshell, NV_INTEGER|NV_SHORT);
+ nv_putval(SH_SUBSHELLNOD, (char*)&subshell, NV_INT16);
#ifdef PATH_BFPATH
path_delete((Pathcomp_t*)shp->pathlist);
shp->pathlist = (void*)sp->pathlist;
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh/xec.c
ksh93_2007_03_28/src/cmd/ksh93/sh/xec.c
--- ksh93_2007_01_11/src/cmd/ksh93/sh/xec.c 2007-01-12 01:01:32.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh/xec.c 2007-03-27 20:10:43.000000000
+0200
@@ -338,7 +338,7 @@
{
Shscope_t *sp;
struct Level *lp = (struct Level*)fp;
- short level, oldlevel = (short)nv_getnum(np);
+ int16_t level, oldlevel = (int16_t)nv_getnum(np);
nv_putv(np,val,flags,fp);
level = nv_getnum(np);
if(level<0 || level > lp->maxlevel)
@@ -364,15 +364,15 @@
*/
int sh_debug(const char *trap, const char *name, const char *subscript, char
*const argv[], int flags)
{
- struct sh_scoped savst;
- Shscope_t *sp, *topmost;
- Namval_t *np = SH_COMMANDNOD;
- struct Level lev;
- char *sav = stakptr(0);
- int n=4, offset=staktell();
- const char *cp = "+=( ";
- Sfio_t *iop = stkstd;
- short level;
+ struct sh_scoped savst;
+ Shscope_t *sp, *topmost;
+ Namval_t *np = SH_COMMANDNOD;
+ struct Level lev;
+ char *sav = stakptr(0);
+ int n=4, offset=staktell();
+ const char *cp = "+=( ";
+ Sfio_t *iop = stkstd;
+ int16_t level;
if(name)
{
sfputr(iop,name,-1);
@@ -411,14 +411,14 @@
lev.hdr.disc = &level_disc;
lev.maxlevel = --level;
nv_unset(SH_LEVELNOD);
- nv_onattr(SH_LEVELNOD,NV_INTEGER|NV_SHORT|NV_NOFREE);
- nv_putval(SH_LEVELNOD,(char*)&level,NV_INTEGER|NV_SHORT);
+ nv_onattr(SH_LEVELNOD,NV_INT16|NV_NOFREE);
+ nv_putval(SH_LEVELNOD,(char*)&level,NV_INT16);
nv_disc(SH_LEVELNOD,&lev.hdr,NV_FIRST);
savst = sh.st;
sh.st.trap[SH_DEBUGTRAP] = 0;
n = sh_trap(trap,0);
np->nvalue.cp = 0;
- nv_putval(SH_LEVELNOD,(char*)&level,NV_INTEGER|NV_SHORT);
+ nv_putval(SH_LEVELNOD,(char*)&level,NV_INT16);
nv_disc(SH_LEVELNOD,&lev.hdr,NV_POP);
nv_unset(SH_LEVELNOD);
nv_putval(SH_PATHNAMENOD, sh.st.filename ,NV_NOFREE);
@@ -669,13 +669,23 @@
{
if(checkopt(com,'n'))
flgs |= NV_NOREF;
+#if SHOPT_TYPEDEF
+ else if(checkopt(com,'T'))
+ {
+ sh.prefix = NV_CLASS;
+ flgs |= NV_TYPE;
+
+ }
+#endif /* SHOPT_TYPEDEF */
if(checkopt(com,'A'))
flgs |= NV_ARRAY;
else if(checkopt(com,'a'))
flgs |= NV_IARRAY;
- if(sh.fn_depth || np==SYSLOCAL)
+ if((sh.fn_depth && !sh.prefix)
|| np==SYSLOCAL)
flgs |= NV_NOSCOPE;
}
+ else if(np==SYSEXPORT)
+ flgs |= NV_EXPORT;
else if(np)
flgs = NV_IDENT|NV_ASSIGN;
#if 0
@@ -839,7 +849,7 @@
if(item->strm)
{
sfclrlock(item->strm);
- if(item->strm
== sh.hist_ptr->histfp)
+ if(sh.hist_ptr
&& item->strm == sh.hist_ptr->histfp)
hist_close(sh.hist_ptr);
else
sfclose(item->strm);
@@ -928,10 +938,13 @@
staklink(slp->slptr);
if(nq)
{
+ struct Namref nr;
sh.last_table = last_table;
+ memset(&nr,0,sizeof(nr));
+ nr.np = nq;
nv_putval(SH_NAMENOD,
nv_name(nq), NV_NOFREE);
memcpy(&node,L_ARGNOD,sizeof(node));
- L_ARGNOD->nvalue.np = nq;
+ L_ARGNOD->nvalue.nrp = &nr;
L_ARGNOD->nvenv = 0;
L_ARGNOD->nvfun =
(Namfun_t*)sh.last_table;
L_ARGNOD->nvflag =
NV_REF|NV_NOFREE;
@@ -1395,7 +1408,7 @@
nv_putsub(np,NIL(char*),0L);
nv_putval(np,cp,0);
if(nameref)
- nv_setref(np);
+ nv_setref(np,(Dt_t*)0,NV_VARNAME);
if(trap=sh.st.trap[SH_DEBUGTRAP])
{
av[0] =
(t->tre.tretyp&COMSCAN)?"select":"for";
@@ -1767,7 +1780,8 @@
np =
nv_open(fname,sh_subfuntree(1),NV_NOASSIGN|NV_NOARRAY|NV_VARNAME|NV_NOSCOPE);
if(npv)
{
- cp = nv_setdisc(npv,cp+1,np,(Namfun_t*)npv);
+ if(!sh.mktype)
+ cp =
nv_setdisc(npv,cp+1,np,(Namfun_t*)npv);
nv_close(npv);
if(!cp)
errormsg(SH_DICT,ERROR_exit(1),e_baddisc,fname);
@@ -2382,9 +2396,12 @@
* set ${.sh.name} and ${.sh.subscript}
* set _ to reference for ${.sh.name}[$.sh.subscript]
*/
+ struct Namref nr;
+ memset(&nr,0,sizeof(nr));
+ nr.np = nq;
nv_putval(SH_NAMENOD, nv_name(nq), NV_NOFREE);
memcpy(&node,L_ARGNOD,sizeof(node));
- L_ARGNOD->nvalue.np = nq;
+ L_ARGNOD->nvalue.nrp = &nr;
L_ARGNOD->nvenv = 0;
L_ARGNOD->nvfun = (Namfun_t*)sh.last_table;
L_ARGNOD->nvflag = NV_REF|NV_NOFREE;
@@ -2796,6 +2813,8 @@
path = shp->lastpath;
#endif
}
+ else if(sh_isoption(SH_RESTRICTED))
+ errormsg(SH_DICT,ERROR_exit(1),e_restricted,path);
if(!path)
{
spawnpid = -1;
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/sh.1
ksh93_2007_03_28/src/cmd/ksh93/sh.1
--- ksh93_2007_01_11/src/cmd/ksh93/sh.1 2007-01-02 03:31:39.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/sh.1 2007-03-06 20:57:14.000000000 +0100
@@ -4337,6 +4337,10 @@
Line feed and print current line.
.PP
.TP 10
+.BI M-^L
+Clear the screen.
+.PP
+.TP 10
.BI ^@
(Null character) Set mark.
.PP
@@ -5202,6 +5206,19 @@
The entry point function name is determined by prepending
.B b_
to the built-in name.
+The ISO C/C++ prototype is
+\f3b_\fP\f2mycommand\fP\f3(int\fP \f2argc\fP, \f3char *\fP\f2argv\fP\f3[]\fP,
\f3void *\fP\f2context\fP\f3)\fP
+for the builtin command
+.I mycommand\^
+where
+.I argv\^
+is array an of
+.I argc\^
+elements and context is an optional pointer to a
+.B Shell_t
+structure as described in
+.BR <ast/shell.h> .
+.sp .5
Special built-ins cannot be bound to a pathname or deleted.
The
.B \-d
@@ -6011,6 +6028,10 @@
specifier causes the output to be displayed in 1024 with one of the suffixes
.B "Ki Mi Gi Ti Pi Ei"
to indicate the unit.
+.LI
+The
+.B =
+flag has been added to center the output within the specified field width.
.LE
.TP
\f3pwd\fP \*(OK \f3\-LP\fP \*(CK
@@ -6393,7 +6414,7 @@
.B xtrace
Same as
.BR \-x .
-.TP 8
+.PP
If no option name is supplied, then the current option settings are printed.
.RE
.TP 8
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/shopen.mk
ksh93_2007_03_28/src/cmd/ksh93/shopen.mk
--- ksh93_2007_01_11/src/cmd/ksh93/shopen.mk 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_03_28/src/cmd/ksh93/shopen.mk 2007-03-20 20:05:22.000000000
+0100
@@ -0,0 +1,5 @@
+:PACKAGE: --shared ast
+
+.SOURCE : bltins
+
+shopen 1.0 plugin=ksh :LIBRARY: shopen.c
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/tests/attributes.sh
ksh93_2007_03_28/src/cmd/ksh93/tests/attributes.sh
--- ksh93_2007_01_11/src/cmd/ksh93/tests/attributes.sh 2006-06-28
19:34:11.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/tests/attributes.sh 2007-03-27
20:22:54.000000000 +0200
@@ -202,4 +202,14 @@
fi
[[ $($SHELL -c 'unset foo;typeset -Z2 foo; print ${foo:-3}' 2> /dev/null) == 3
]] || err_exit '${foo:-3} not 3 when typeset -Z2 field undefined'
[[ $($SHELL -c 'unset foo;typeset -Z2 foo; print ${foo:=3}' 2> /dev/null) ==
03 ]] || err_exit '${foo:=-3} not 3 when typeset -Z2 foo undefined'
+unset foo bar
+unset -f fun
+function fun
+{
+ export foo=hello
+ typeset -x bar=world
+}
+fun
+[[ $(export | grep foo) == 'foo=hello' ]] || err_exit 'export not working in
functions'
+[[ $(export | grep bar) ]] && err_exit 'typeset -x not local'
exit $((Errors))
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/tests/basic.sh
ksh93_2007_03_28/src/cmd/ksh93/tests/basic.sh
--- ksh93_2007_01_11/src/cmd/ksh93/tests/basic.sh 2006-12-04
17:38:27.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/tests/basic.sh 2007-03-20
19:30:26.000000000 +0100
@@ -288,7 +288,8 @@
[[ $( (trap 'print alarm' ALRM; sleep 4) & sleep 2; kill -ALRM $!) == alarm ]]
|| err_exit 'ALRM signal not working'
[[ $($SHELL -c 'trap "" HUP; $SHELL -c "(sleep 2;kill -HUP $$)& sleep 4;print
done"') != done ]] && err_exit 'ignored traps not being ignored'
[[ $($SHELL -c 'o=foobar; for x in foo bar; do (o=save);print $o;done' 2>
/dev/null ) == $'foobar\nfoobar' ]] || err_exit 'for loop optimization subshell
bug'
-if [[ -d /dev/fd && -w /dev/fd/3 ]]
+command exec 3<> /dev/null
+if cat /dev/fd/3 >/dev/null 2>&1
then [[ $($SHELL -c 'cat <(print foo)' 2> /dev/null) == foo ]] || err_exit
'process substitution not working'
[[ $($SHELL -c 'print $(cat <(print foo) )' 2> /dev/null) == foo ]] ||
err_exit 'process substitution in subshell not working'
[[ $($SHELL -c $'tee >(grep \'1$\' > /tmp/ksh'$$'x) > /dev/null <<-
\!!!
@@ -309,6 +310,8 @@
done
wait
cat /tmp/ksh'$$x 2>> /dev/null) == line1 ]] || err_exit '>() process
substitution fails in for loop'
+ [[ $({ $SHELL -c 'cat <(for i in x y z; do print $i; done)';} 2>
/dev/null) == $'x\ny\nz' ]] ||
+ err_exit 'process substitution of compound commands not working'
fi
[[ $($SHELL -r 'command -p :' 2>&1) == *restricted* ]] || err_exit 'command
-p not restricted'
print cat > /tmp/ksh$$x
@@ -318,7 +321,7 @@
[[ $($SHELL -c 'print -r -- ${X:=$(expr "a(0)" : '"'a*(\([^)]\))')}'" 2>
/dev/null) == 0 ]] || err_exit '${x:=$(..."...")} failure'
if [[ -d /dev/fd && -w /dev/fd/3 ]]
then [[ $(cat <(print hello) ) == hello ]] || err_exit "process substitution
not working outside for or while loop"
- [[ $(for i in 1;do cat <(print hello);done ) == hello ]] || err_exit
"process substitution not working in for or while loop"
+ $SHELL -c '[[ $(for i in 1;do cat <(print hello);done ) == hello ]]' 2>
/dev/null|| err_exit "process substitution not working in for or while loop"
fi
exec 3> /dev/null
print 'print foo "$@"' > /tmp/ksh$$x
@@ -329,4 +332,5 @@
[[ $(/tmp/ksh$$x) == /tmp/ksh$$x ]] || err_exit "\$0 is $0 instead of
/tmp/ksh$$x"
rm -f /tmp/ksh$$x
exec 3<&-
+( typeset -r foo=bar) 2> /dev/null || err_exit 'readonly variables set in a
subshell cannot unset'
exit $((Errors))
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/tests/bracket.sh
ksh93_2007_03_28/src/cmd/ksh93/tests/bracket.sh
--- ksh93_2007_01_11/src/cmd/ksh93/tests/bracket.sh 2006-08-11
21:12:34.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/tests/bracket.sh 2007-01-26
20:52:49.000000000 +0100
@@ -227,4 +227,7 @@
$SHELL -c '[[ att_ == ~(E)(att|cus)_.* ]]' 2> /dev/null || err_exit '
~(E)(att|cus)_* pattern not working'
$SHELL -c '[[ att_ =~ (att|cus)_.* ]]' 2> /dev/null || err_exit ' =~ ere not
working'
$SHELL -c '[[ abc =~ a(b)c ]]' 2> /dev/null || err_exit '[[ abc =~ a(b)c ]]
fails'
+$SHELL -xc '[[ abc =~ \babc\b ]]' 2> /dev/null || err_exit '[[ abc =~ \babc\b
]] fails'
+[[ abc == ~(E)\babc\b ]] || err_exit '\b not preserved for ere when not in ()'
+[[ abc == ~(iEi)\babc\b ]] || err_exit '\b not preserved for ~(iEi) when not
in ()'
exit $((Errors))
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/tests/builtins.sh
ksh93_2007_03_28/src/cmd/ksh93/tests/builtins.sh
--- ksh93_2007_01_11/src/cmd/ksh93/tests/builtins.sh 2006-12-20
19:33:39.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/tests/builtins.sh 2007-03-23
16:49:52.000000000 +0100
@@ -28,6 +28,7 @@
# test shell builtin commands
Command=${0##*/}
integer Errors=0
+builtin getconf
: ${foo=bar} || err_exit ": failed"
[[ $foo = bar ]] || err_exit ": side effects failed"
set -- - foobar
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/tests/coprocess.sh
ksh93_2007_03_28/src/cmd/ksh93/tests/coprocess.sh
--- ksh93_2007_01_11/src/cmd/ksh93/tests/coprocess.sh 2006-09-15
22:41:21.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/tests/coprocess.sh 2007-03-21
08:04:14.000000000 +0100
@@ -119,7 +119,7 @@
if (( SECONDS > 8 ))
then err_exit 'read -p hanging'
fi
-( sleep 3 |& sleep 1 && kill $!; sleep 3 |& sleep 1 && kill $! ) ||
+( sleep 3 |& sleep 1 && kill $!; sleep 1; sleep 3 |& sleep 1 && kill $! ) ||
err_exit "coprocess cleanup not working correctly"
unset line
(
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/tests/exit.sh
ksh93_2007_03_28/src/cmd/ksh93/tests/exit.sh
--- ksh93_2007_01_11/src/cmd/ksh93/tests/exit.sh 2006-11-23
07:36:57.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/tests/exit.sh 2007-03-23
16:50:44.000000000 +0100
@@ -36,6 +36,7 @@
#test for proper exit of shell
Command=${0##*/}
integer Errors=0
+builtin getconf
ABSHELL=$(abspath)
mkdir /tmp/ksh$$ || err_exit "mkdir /tmp/ksh$$ failed"
cd /tmp/ksh$$ || err_exit "cd /tmp/ksh$$ failed"
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/tests/glob.sh
ksh93_2007_03_28/src/cmd/ksh93/tests/glob.sh
--- ksh93_2007_01_11/src/cmd/ksh93/tests/glob.sh 2006-09-15
23:28:06.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/tests/glob.sh 2007-03-02
21:51:45.000000000 +0100
@@ -25,7 +25,7 @@
}
alias err_exit='err_exit $LINENO'
-integer contrary=0 ignorant=0
+integer aware=0 contrary=0 ignorant=0
function test_glob
{
@@ -53,7 +53,7 @@
do got="$got$sep<$arg>"
sep=" "
done
- if (( ignorant ))
+ if (( ignorant && aware ))
then if [[ $del ]]
then got="<$del> $got"
fi
@@ -99,6 +99,10 @@
'b B') contrary=1 ;;
b|B) ignorant=1 ;;
esac
+set -- $(/bin/sh -c 'echo [a-c]')
+case $* in
+B) aware=1 ;;
+esac
rm -rf *
touch a b c d abc abd abe bb bcd ca cb dd de Beware
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/tests/nameref.sh
ksh93_2007_03_28/src/cmd/ksh93/tests/nameref.sh
--- ksh93_2007_01_11/src/cmd/ksh93/tests/nameref.sh 2006-06-28
19:35:10.000000000 +0200
+++ ksh93_2007_03_28/src/cmd/ksh93/tests/nameref.sh 2007-02-22
17:23:34.000000000 +0100
@@ -204,6 +204,19 @@
}
[[ $(subref ps) == 1 ]] || err_exit 'local nameref cannot reference global
variable child'
+function local
+{
+ typeset ps=(typeset -i a=3 b=4)
+ [[ $(subref ps) == 3 ]] || err_exit 'local nameref cannot reference
caller compound variable'
+}
+local
+unset -f local
+function local
+{
+ qs=(integer a=3; integer b=4)
+}
+local 2> /dev/null || err_exit 'function local has non-zero exit status'
+[[ ${qs.a} == 3 ]] || err_exit 'function cannot set compound global variable'
unset fun i
foo=(x=hi)
function fun
diff -r -N -u ksh93_2007_01_11/src/cmd/ksh93/tests/substring.sh
ksh93_2007_03_28/src/cmd/ksh93/tests/substring.sh
--- ksh93_2007_01_11/src/cmd/ksh93/tests/substring.sh 2007-01-05
00:12:04.000000000 +0100
+++ ksh93_2007_03_28/src/cmd/ksh93/tests/substring.sh 2007-03-20
19:43:39.000000000 +0100
@@ -496,7 +496,9 @@
string='foo(d:\nt\box\something)bar'
expected='d:\nt\box\something'
[[ ${string/*\(+([!\)])\)*/\1} == "$expected" ]] || err_exit "substring
expansion failed '${string/*\(+([!\)])\)*/\1}' returned -- '$expected' expected"
-if $SHELL -c LC_ALL=en_US.UTF-8 2>/dev/null
-then LC_ALL=en_US.UTF-8 $SHELL -c 'b1="????????????w????????????"; [[
${b1:4:1} == w ]]' || err_exit 'Multibyte ${var:offset:len} not working
correctly'
+if [[ $($SHELL -c $'export LC_ALL=en_US.UTF-8; print -r
"\342\202\254\342\202\254\342\202\254\342\202\254w\342\202\254\342\202\254\342\202\254\342\202\254"
| wc -m' 2>/dev/null) == 10 ]]
+then LC_ALL=en_US.UTF-8 $SHELL -c
b1=$'"\342\202\254\342\202\254\342\202\254\342\202\254w\342\202\254\342\202\254\342\202\254\342\202\254";
[[ ${b1:4:1} == w ]]' || err_exit 'Multibyte ${var:offset:len} not working
correctly'
fi
+{ $SHELL -c 'unset x;[[ ${SHELL:$x} == $SHELL ]]';} 2> /dev/null || err_exit
'${var:$x} fails when x is not set'
+{ $SHELL -c 'x=;[[ ${SHELL:$x} == $SHELL ]]';} 2> /dev/null || err_exit
'${var:$x} fails when x is null'
exit $((Errors))
diff -r -N -u ksh93_2007_01_11/src/lib/libast/comp/basename.c
ksh93_2007_03_28/src/lib/libast/comp/basename.c
--- ksh93_2007_01_11/src/lib/libast/comp/basename.c 2006-10-27
22:52:51.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/comp/basename.c 2007-03-02
14:57:19.000000000 +0100
@@ -24,7 +24,7 @@
* basename(3) implementation
*/
-#include <ast_common.h>
+#include <ast_std.h>
#if defined(__EXPORT__)
#define extern __EXPORT__
diff -r -N -u ksh93_2007_01_11/src/lib/libast/comp/conf.sh
ksh93_2007_03_28/src/lib/libast/comp/conf.sh
--- ksh93_2007_01_11/src/lib/libast/comp/conf.sh 2007-01-08
10:32:13.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/comp/conf.sh 2007-03-06
21:22:41.000000000 +0100
@@ -21,7 +21,7 @@
########################################################################
: generate getconf and limits info
#
-# @(#)conf.sh (AT&T Research) 2007-01-01
+# @(#)conf.sh (AT&T Research) 2007-03-06
#
# this script generates these files from the table file in the first arg
# the remaining args are the C compiler name and flags
@@ -112,7 +112,7 @@
'') trap "code=\$?; rm -f $tmp.*; exit \$code" 0 1 2 ;;
esac
-# determine the _ast_intmax_t printf format
+# determine the intmax_t printf format
cat > $tmp.c <<!
${head}
@@ -127,8 +127,8 @@
}
!
if $cc -o $tmp.exe $tmp.c >/dev/null 2>&1 && ./$tmp.exe
-then FMT='%lld'
-else FMT='%ld'
+then LL='ll'
+else LL='l'
fi
# set up the names and keys
@@ -472,7 +472,7 @@
args=
headers=
case $name in
- V[1-9]_*|V[1-9][0-9]_*) underscore=VW ;;
+ V[123456789]_*|V[123456789][0123456789]_*) underscore=VW ;;
esac
case $call in
CS|SI) key=CS ;;
@@ -896,7 +896,10 @@
XX) case $standard in
C) standard=POSIX ;;
esac
- flags=FU
+ case $flags in
+ *L*) flags=lFU ;;
+ *) flags=FU ;;
+ esac
;;
esac
;;
@@ -987,14 +990,24 @@
esac
conf_limit=0
case $flags in
- *L*) d=
- eval x='$'CONF_const_${conf_name}
+ *[Ll]*) d=
+ case ${conf_name} in
+ LONG_MAX|SSIZE_MAX)
+ x=
+ ;;
+ *) eval x='$'CONF_const_${conf_name}
+ ;;
+ esac
case $x in
'') for s in ${values}
do case $s in
$sym) eval x='$'CONF_const_${s}
case $x in
- 1) x=$s
+ 1) eval
a='$'CONF_const_${standard}_${s}
+ case $a in
+ $x) x= ;;
+ *) x=$s ;;
+ esac
break
;;
esac
@@ -1005,8 +1018,8 @@
;;
esac
done
- case ${x:+1}:$flags:$conf_op:${script:+1} in
- :*:-1:1|:*X*:*:*)
+ case ${x:+1}:$flags:$conf_op in
+ :*:-1|:*X*:*)
case $verbose in
1) echo "$command: probe for ${conf_name}
<limits.h> value" >&2 ;;
esac
@@ -1020,12 +1033,35 @@
fi
;;
esac
- case ${x:+1}:${script:+1} in
- :1) case $script in
+ case ${x:+1} in
+ '') case $script in
'#'*) echo "$script" > $tmp.sh
chmod +x $tmp.sh
x=`./$tmp.sh 2>/dev/null`
;;
+ '') case $conf_name in
+ U*LLONG*) f="%${LL}u" ;;
+ *LLONG*) f="%${LL}d" ;;
+ U*LONG*) f="%lu" ;;
+ *LONG*) f="%ld" ;;
+ U*) f="%u" ;;
+ *) f="%d" ;;
+ esac
+ cat > $tmp.c <<!
+${head}
+#include <stdio.h>
+#include <sys/types.h>
+#include <limits.h>
+#include <unistd.h>$systeminfo$headers
+${tail}
+int
+main()
+{
+ printf("$f\n", $conf_name);
+ return 0;
+}
+!
+ ;;
*) cat > $tmp.c <<!
${head}
#include <sys/types.h>
@@ -1038,7 +1074,7 @@
esac
case $args in
'') set "" ;;
- *) eval set "" "$args"; shift ;;
+ *) eval set '""' '"'$args'"';
shift ;;
esac
for a
do case $script in
@@ -1070,6 +1106,10 @@
case ${x:+1}:$flags:$conf_op in
1:*:-1|1:*X*:*)
conf_limit=$x
+ case $flags in
+ *L*) ;;
+ *) conf_flags="${conf_flags}|CONF_LIMIT" ;;
+ esac
conf_flags="${conf_flags}|CONF_LIMIT_DEF"
case $string:$x in
1:*) cat >> $tmp.l <<!
@@ -1204,8 +1244,30 @@
;;
esac
case $string in
- 1) conf_limit="{ 0, $conf_limit }" conf_minmax="{ 0, $conf_minmax
}" ;;
- *) conf_limit="{ $conf_limit, 0 }" conf_minmax="{ $conf_minmax, 0
}" ;;
+ 1) conf_limit="{ 0, $conf_limit }" conf_minmax="{ 0, $conf_minmax
}"
+ ;;
+ *) case $conf_limit in
+
0[xX]*|-*|+*|[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_]*)
+ ;;
+ *[!0123456789abcdefABCDEF]*)
+ conf_limit=0
+ ;;
+ *[!0123456789]*)
+ conf_limit=0x$conf_limit
+ ;;
+ esac
+ case $conf_minmax in
+
0[xX]*|-*|+*|[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_]*)
+ ;;
+ *[!0123456789abcdefABCDEF]*)
+ conf_minmax=0
+ ;;
+ *[!0123456789]*)
+ conf_minmax=0x$conf_minmax
+ ;;
+ esac
+ conf_limit="{ $conf_limit, 0 }" conf_minmax="{ $conf_minmax, 0
}"
+ ;;
esac
echo "{ \"$conf_name\", $conf_limit, $conf_minmax, $conf_flags,
$conf_standard, $conf_section, $conf_call, $conf_op },"
case $shell in
@@ -1295,11 +1357,11 @@
struct Conf_s; typedef struct Conf_s Conf_t;
-typedef int (*Conf_f)(Conf_t*, _ast_intmax_t*, char**);
+typedef int (*Conf_f)(Conf_t*, intmax_t*, char**);
typedef struct Value_s
{
- _ast_intmax_t number;
+ intmax_t number;
const char* string;
} Value_t;
diff -r -N -u ksh93_2007_01_11/src/lib/libast/comp/conf.tab
ksh93_2007_03_28/src/lib/libast/comp/conf.tab
--- ksh93_2007_01_11/src/lib/libast/comp/conf.tab 2006-12-12
09:38:22.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/comp/conf.tab 2007-03-01
08:38:58.000000000 +0100
@@ -1,7 +1,7 @@
#
# posix { getconf limits } macro table
#
-# @(#)conf.tab (AT&T Research) 2006-12-04
+# @(#)conf.tab (AT&T Research) 2007-02-14
#
# name standard section call flags [ header ... ] [ value ... ]
#
@@ -195,12 +195,12 @@
LFS_LINTFLAGS POSIX CS 1 MU : LFS_CFLAGS
LINE_MAX POSIX SC 2 LMN 2048
LINK_MAX POSIX PC 1 LMU MAXLINK SHRT_MAX 8
+LLONG_MAX C XX 1 L
+LLONG_MIN C XX 1 L
LOCALEDEF POSIX SC 1 FUW
LOCALEDEF POSIX SC 2 FUW
LOGIN_NAME_MAX POSIX SC 1 LMU
LOGNAME_MAX SVID SC 1 MU 8
-LONGLONG_MAX C XX 1 L
-LONGLONG_MIN C XX 1 L
LONG_BIT XOPEN XX 1 L (8*sizeof(long)) 32
LONG_MAX C XX 1 L 2147483647
LONG_MIN C XX 1 L -2147483647
@@ -541,7 +541,7 @@
UID_MAX SVID SC 1 LMU 60002
UINT_MAX C XX 1 L 65535
UIO_MAXIOV C QQ 1 0
-ULONGLONG_MAX C XX 1 L
+ULLONG_MAX C XX 1 L
ULONG_MAX C XX 1 L 4294967295
UNIX XOPEN SC 1 FSUW
UPE POSIX SC 2 FUW
diff -r -N -u ksh93_2007_01_11/src/lib/libast/comp/dirname.c
ksh93_2007_03_28/src/lib/libast/comp/dirname.c
--- ksh93_2007_01_11/src/lib/libast/comp/dirname.c 2006-10-27
22:53:03.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/comp/dirname.c 2007-03-02
14:57:10.000000000 +0100
@@ -24,7 +24,7 @@
* dirname(3) implementation
*/
-#include <ast_common.h>
+#include <ast_std.h>
#if defined(__EXPORT__)
#define extern __EXPORT__
diff -r -N -u ksh93_2007_01_11/src/lib/libast/comp/getpgrp.c
ksh93_2007_03_28/src/lib/libast/comp/getpgrp.c
--- ksh93_2007_01_11/src/lib/libast/comp/getpgrp.c 2006-09-22
06:37:24.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/comp/getpgrp.c 2007-03-02
14:57:47.000000000 +0100
@@ -21,7 +21,11 @@
***********************************************************************/
#pragma prototyped
-#include <ast_common.h>
+#define getpgrp ______getpgrp
+
+#include <ast_std.h>
+
+#undef getpgrp
/*
* bsd int getpgrp(int);
@@ -30,8 +34,6 @@
* user SOL
*/
-#undef getpgrp
-
extern int getpgrp(int);
#if defined(__EXPORT__)
diff -r -N -u ksh93_2007_01_11/src/lib/libast/comp/strtol.c
ksh93_2007_03_28/src/lib/libast/comp/strtol.c
--- ksh93_2007_01_11/src/lib/libast/comp/strtol.c 2002-10-04
19:37:30.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/comp/strtol.c 2007-02-14
08:24:12.000000000 +0100
@@ -27,6 +27,7 @@
#define S2I_function strtol
#define S2I_number long
+#define S2I_unumber unsigned long
#include "strtoi.h"
diff -r -N -u ksh93_2007_01_11/src/lib/libast/comp/strtoll.c
ksh93_2007_03_28/src/lib/libast/comp/strtoll.c
--- ksh93_2007_01_11/src/lib/libast/comp/strtoll.c 2006-10-27
22:00:40.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/comp/strtoll.c 2007-02-14
08:24:34.000000000 +0100
@@ -38,6 +38,7 @@
#endif
#define S2I_function strtoll
-#define S2I_number _ast_intmax_t
+#define S2I_number intmax_t
+#define S2I_unumber uintmax_t
#include "strtoi.h"
diff -r -N -u ksh93_2007_01_11/src/lib/libast/comp/strtoul.c
ksh93_2007_03_28/src/lib/libast/comp/strtoul.c
--- ksh93_2007_01_11/src/lib/libast/comp/strtoul.c 2002-10-04
19:37:40.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/comp/strtoul.c 2007-02-14
08:24:49.000000000 +0100
@@ -27,6 +27,7 @@
#define S2I_function strtoul
#define S2I_number long
+#define S2I_unumber unsigned long
#define S2I_unsigned 1
#include "strtoi.h"
diff -r -N -u ksh93_2007_01_11/src/lib/libast/comp/strtoull.c
ksh93_2007_03_28/src/lib/libast/comp/strtoull.c
--- ksh93_2007_01_11/src/lib/libast/comp/strtoull.c 2006-10-27
22:00:52.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/comp/strtoull.c 2007-02-14
08:25:05.000000000 +0100
@@ -38,7 +38,8 @@
#endif
#define S2I_function strtoull
-#define S2I_number _ast_intmax_t
+#define S2I_number intmax_t
+#define S2I_unumber uintmax_t
#define S2I_unsigned 1
#include "strtoi.h"
diff -r -N -u ksh93_2007_01_11/src/lib/libast/comp/transition.c
ksh93_2007_03_28/src/lib/libast/comp/transition.c
--- ksh93_2007_01_11/src/lib/libast/comp/transition.c 2006-10-03
08:49:55.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/comp/transition.c 2007-02-14
07:30:04.000000000 +0100
@@ -63,7 +63,7 @@
#ifndef strtoll
#undef STUB
-extern _ast_intmax_t
+extern intmax_t
_ast_strtoll(const char* a, char** b, int c)
{
return strtoll(a, b, c);
@@ -72,8 +72,8 @@
#ifndef strtoull
#undef STUB
-extern unsigned
-_ast_intmax_t _ast_strtoull(const char* a, char** b, int c)
+extern uintmax_t
+_ast_strtoull(const char* a, char** b, int c)
{
return strtoull(a, b, c);
}
diff -r -N -u ksh93_2007_01_11/src/lib/libast/features/align.c
ksh93_2007_03_28/src/lib/libast/features/align.c
--- ksh93_2007_01_11/src/lib/libast/features/align.c 2006-09-28
20:16:19.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/features/align.c 2007-02-14
07:30:35.000000000 +0100
@@ -39,8 +39,8 @@
char* u2;
double u3;
char u4[1024];
- _ast_intmax_t u5;
- unsigned _ast_intmax_t u6;
+ intmax_t u5;
+ uintmax_t u6;
_ast_fltmax_t u7;
void* u8;
char* (*u9)();
diff -r -N -u ksh93_2007_01_11/src/lib/libast/features/botch.c
ksh93_2007_03_28/src/lib/libast/features/botch.c
--- ksh93_2007_01_11/src/lib/libast/features/botch.c 2006-09-28
20:16:23.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/features/botch.c 2007-01-22
20:40:04.000000000 +0100
@@ -32,7 +32,9 @@
#include "FEATURE/lib"
#include "FEATURE/types"
+#if _lib_getgroups
extern int getgroups(int, gid_t*);
+#endif
int
main()
diff -r -N -u ksh93_2007_01_11/src/lib/libast/features/common
ksh93_2007_03_28/src/lib/libast/features/common
--- ksh93_2007_01_11/src/lib/libast/features/common 2006-11-21
05:51:39.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/features/common 2007-03-25
19:07:46.000000000 +0200
@@ -1,5 +1,5 @@
iff AST_COMMON
-hdr pthread,stdarg,stddef,types,unistd
+hdr pthread,stdarg,stddef,stdint,inttypes,types,unistd
sys types
typ long.double,size_t,ssize_t
@@ -329,6 +329,57 @@
}
}end
+typ int8_t stdint.h inttypes.h no{
+ #undef _typ_int8_t
+ #define _typ_int8_t 1
+ typedef _ast_int1_t int8_t;
+}end
+typ uint8_t stdint.h inttypes.h no{
+ #undef _typ_uint8_t
+ #define _typ_uint8_t 1
+ typedef unsigned _ast_int1_t uint8_t;
+}end
+typ int16_t stdint.h inttypes.h no{
+ #undef _typ_int16_t
+ #define _typ_int16_t 1
+ typedef _ast_int2_t int16_t;
+}end
+typ uint16_t stdint.h inttypes.h no{
+ #undef _typ_uint16_t
+ #define _typ_uint16_t 1
+ typedef unsigned _ast_int2_t uint16_t;
+}end
+typ int32_t stdint.h inttypes.h no{
+ #undef _typ_int32_t
+ #define _typ_int32_t 1
+ typedef _ast_int4_t int32_t;
+}end
+typ uint32_t stdint.h inttypes.h no{
+ #undef _typ_uint32_t
+ #define _typ_uint32_t 1
+ typedef unsigned _ast_int4_t uint32_t;
+}end
+typ int64_t stdint.h inttypes.h no{
+ #ifdef _ast_int8_t
+ #undef _typ_int64_t
+ #define _typ_int64_t 1
+ typedef _ast_int8_t int64_t;
+ #endif
+}end
+typ uint64_t stdint.h inttypes.h no{
+ #ifdef _ast_int8_t
+ #undef _typ_uint64_t
+ #define _typ_uint64_t 1
+ typedef unsigned _ast_int8_t uint64_t;
+ #endif
+}end
+typ intmax_t stdint.h inttypes.h no{
+ typedef _ast_intmax_t intmax_t;
+}end
+typ uintmax_t stdint.h inttypes.h no{
+ typedef unsigned _ast_intmax_t uintmax_t;
+}end
+
tst - -DTRY=1 - -DTRY=1 -Dvoid=char - -DTRY=2 - -DTRY=3 - -DTRY=4 output{
#if _STD_ && _hdr_stdarg
#include <stdarg.h>
@@ -427,39 +478,14 @@
#endif
#endif
- r = 1;
- printf("#undef _ast_va_list\n");
- printf("#ifdef va_start\n");
- printf("#define _ast_va_list va_list\n");
- printf("#else\n");
- #if TRY == 1 || TRY == 2
- printf("#define _ast_va_list void*");
- #else
- #if TRY == 3
- if (sizeof(va_list) == sizeof(long))
- printf("#define _ast_va_list long");
- else if (sizeof(va_list) == sizeof(short))
- printf("#define _ast_va_list short");
- else
- printf("#define _ast_va_list int");
- #else
- #if defined(_M_ALPHA) && defined(_VA_LIST_DEFINED)
- printf("typedef struct { char *a0; int offset; }
_ast_va_list_t;\n");
- printf("#define _ast_va_list _ast_va_list_t");
- #else
+ printf("#ifndef va_start\n");
printf("#if __STD_C\n");
printf("#include <stdarg.h>\n");
printf("#else\n");
printf("#include <varargs.h>\n");
printf("#endif\n");
- printf("#define _ast_va_list va_list\n");
- r = 0;
- #endif
- #endif
- #endif
- if (r)
- printf("\t/* va_list that avoids #include */\n");
printf("#endif\n");
+
printf("#endif\n");
return 0;
}
@@ -473,6 +499,13 @@
# if _sys_types
# include <sys/types.h>
# endif
+ # if _hdr_stdint
+ # include <stdint.h>
+ # else
+ # if _hdr_inttypes
+ # include <inttypes.h>
+ # endif
+ # endif
#endif
#if !_typ_size_t
# define _typ_size_t 1
diff -r -N -u ksh93_2007_01_11/src/lib/libast/features/dirent
ksh93_2007_03_28/src/lib/libast/features/dirent
--- ksh93_2007_01_11/src/lib/libast/features/dirent 2005-07-28
00:16:03.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/features/dirent 2007-02-14
20:00:46.000000000 +0100
@@ -87,7 +87,7 @@
#endif
#undef __ino64_t
- #define __ino64_t _ast_int8_t
+ #define __ino64_t int64_t
#include $_nxt_dirent /* the native <dirent.h> */
diff -r -N -u ksh93_2007_01_11/src/lib/libast/features/float
ksh93_2007_03_28/src/lib/libast/features/float
--- ksh93_2007_01_11/src/lib/libast/features/float 2006-12-01
23:05:15.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/features/float 2007-02-14
20:14:15.000000000 +0100
@@ -299,8 +299,8 @@
i = 0;
while (uq /= 10)
i++;
- printf("#define ULONGLONG_DIG %d\n", i);
- printf("#define UINTMAX_DIG
ULONGLONG_DIG\n");
+ printf("#define ULLONG_DIG %d\n", i);
+ printf("#define UINTMAX_DIG ULLONG_DIG\n");
}
else
printf("#define UINTMAX_DIG ULONG_DIG\n");
@@ -320,12 +320,12 @@
printf("#define FLT_ULONG_MAX %lu.0F\n", u);
if (sizeof(w) > sizeof(u))
{
- printf("#define FLT_ULONGLONG_MAX %llu.0F\n", w);
- printf("#define FLT_UINTMAX_MAX
FLT_ULONGLONG_MAX\n");
+ printf("#define FLT_ULLONG_MAX %llu.0F\n", w);
+ printf("#define FLT_UINTMAX_MAX
FLT_ULLONG_MAX\n");
}
else
{
- printf("#define FLT_ULONGLONG_MAX
FLT_ULONG_MAX\n");
+ printf("#define FLT_ULLONG_MAX
FLT_ULONG_MAX\n");
printf("#define FLT_UINTMAX_MAX
FLT_ULONG_MAX\n");
}
u /= 2;
@@ -333,12 +333,12 @@
printf("#define FLT_LONG_MAX %lu.0F\n", u);
if (sizeof(w) > sizeof(u))
{
- printf("#define FLT_LONGLONG_MAX %llu.0F\n", w);
- printf("#define FLT_INTMAX_MAX
FLT_LONGLONG_MAX\n");
+ printf("#define FLT_LLONG_MAX %llu.0F\n", w);
+ printf("#define FLT_INTMAX_MAX
FLT_LLONG_MAX\n");
}
else
{
- printf("#define FLT_LONGLONG_MAX
FLT_LONG_MAX\n");
+ printf("#define FLT_LLONG_MAX
FLT_LONG_MAX\n");
printf("#define FLT_INTMAX_MAX
FLT_LONG_MAX\n");
}
u++;
@@ -346,12 +346,12 @@
printf("#define FLT_LONG_MIN (-%lu.0F)\n", u);
if (sizeof(w) > sizeof(u))
{
- printf("#define FLT_LONGLONG_MIN (-%llu.0F)\n",
w);
- printf("#define FLT_INTMAX_MIN
FLT_LONGLONG_MIN\n");
+ printf("#define FLT_LLONG_MIN (-%llu.0F)\n",
w);
+ printf("#define FLT_INTMAX_MIN
FLT_LLONG_MIN\n");
}
else
{
- printf("#define FLT_LONGLONG_MIN
FLT_LONG_MIN\n");
+ printf("#define FLT_LLONG_MIN
FLT_LONG_MIN\n");
printf("#define FLT_INTMAX_MIN
FLT_LONG_MIN\n");
}
#ifdef FLT_DIG
@@ -495,12 +495,12 @@
printf("#define DBL_ULONG_MAX %lu.0\n", u);
if (sizeof(w) > sizeof(u))
{
- printf("#define DBL_ULONGLONG_MAX %llu.0\n", w);
- printf("#define DBL_UINTMAX_MAX
DBL_ULONGLONG_MAX\n");
+ printf("#define DBL_ULLONG_MAX %llu.0\n", w);
+ printf("#define DBL_UINTMAX_MAX
DBL_ULLONG_MAX\n");
}
else
{
- printf("#define DBL_ULONGLONG_MAX
DBL_ULONG_MAX\n");
+ printf("#define DBL_ULLONG_MAX
DBL_ULONG_MAX\n");
printf("#define DBL_UINTMAX_MAX
DBL_ULONG_MAX\n");
}
u /= 2;
@@ -508,12 +508,12 @@
printf("#define DBL_LONG_MAX %lu.0\n", u);
if (sizeof(w) > sizeof(u))
{
- printf("#define DBL_LONGLONG_MAX %llu.0\n", w);
- printf("#define DBL_INTMAX_MAX
DBL_LONGLONG_MAX\n");
+ printf("#define DBL_LLONG_MAX %llu.0\n", w);
+ printf("#define DBL_INTMAX_MAX
DBL_LLONG_MAX\n");
}
else
{
- printf("#define DBL_LONGLONG_MAX
DBL_LONG_MAX\n");
+ printf("#define DBL_LLONG_MAX
DBL_LONG_MAX\n");
printf("#define DBL_INTMAX_MAX
DBL_LONG_MAX\n");
}
u++;
@@ -521,12 +521,12 @@
printf("#define DBL_LONG_MIN (-%lu.0)\n", u);
if (sizeof(w) > sizeof(u))
{
- printf("#define DBL_LONGLONG_MIN (-%llu.0)\n",
w);
- printf("#define DBL_INTMAX_MIN
DBL_LONGLONG_MIN\n");
+ printf("#define DBL_LLONG_MIN (-%llu.0)\n",
w);
+ printf("#define DBL_INTMAX_MIN
DBL_LLONG_MIN\n");
}
else
{
- printf("#define DBL_LONGLONG_MIN
DBL_LONG_MIN\n");
+ printf("#define DBL_LLONG_MIN
DBL_LONG_MIN\n");
printf("#define DBL_INTMAX_MIN
DBL_LONG_MIN\n");
}
#ifdef DBL_DIG
@@ -666,12 +666,12 @@
printf("#define LDBL_ULONG_MAX %lu.0L\n", u);
if (sizeof(w) > sizeof(u))
{
- printf("#define LDBL_ULONGLONG_MAX %llu.0L\n", w);
- printf("#define LDBL_UINTMAX_MAX
LDBL_ULONGLONG_MAX\n");
+ printf("#define LDBL_ULLONG_MAX %llu.0L\n", w);
+ printf("#define LDBL_UINTMAX_MAX
LDBL_ULLONG_MAX\n");
}
else
{
- printf("#define LDBL_ULONGLONG_MAX
LDBL_ULONG_MAX\n");
+ printf("#define LDBL_ULLONG_MAX
LDBL_ULONG_MAX\n");
printf("#define LDBL_UINTMAX_MAX
LDBL_ULONG_MAX\n");
}
u /= 2;
@@ -679,12 +679,12 @@
printf("#define LDBL_LONG_MAX %lu.0L\n", u);
if (sizeof(w) > sizeof(u))
{
- printf("#define LDBL_LONGLONG_MAX %llu.0L\n", w);
- printf("#define LDBL_INTMAX_MAX
LDBL_LONGLONG_MAX\n");
+ printf("#define LDBL_LLONG_MAX %llu.0L\n", w);
+ printf("#define LDBL_INTMAX_MAX
LDBL_LLONG_MAX\n");
}
else
{
- printf("#define LDBL_LONGLONG_MAX
LDBL_LONG_MAX\n");
+ printf("#define LDBL_LLONG_MAX
LDBL_LONG_MAX\n");
printf("#define LDBL_INTMAX_MAX
LDBL_LONG_MAX\n");
}
u++;
@@ -692,12 +692,12 @@
printf("#define LDBL_LONG_MIN (-%lu.0L)\n", u);
if (sizeof(w) > sizeof(u))
{
- printf("#define LDBL_LONGLONG_MIN (-%llu.0L)\n",
w);
- printf("#define LDBL_INTMAX_MIN
LDBL_LONGLONG_MIN\n");
+ printf("#define LDBL_LLONG_MIN (-%llu.0L)\n",
w);
+ printf("#define LDBL_INTMAX_MIN
LDBL_LLONG_MIN\n");
}
else
{
- printf("#define LDBL_LONGLONG_MIN
LDBL_LONG_MIN\n");
+ printf("#define LDBL_LLONG_MIN
LDBL_LONG_MIN\n");
printf("#define LDBL_INTMAX_MIN
LDBL_LONG_MIN\n");
}
#ifdef LDBL_DIG
@@ -884,7 +884,7 @@
for (j = i + 1; j < sizeof(a.e) /
sizeof(a.e[0]); j++)
if (a.e[j] ^ b.e[j])
return 0;
- printf("typedef union
_ast_dbl_exp_u\n{\n\tunsigned
_ast_int4_t\te[sizeof(double)/4];\n\tdouble\t\t\tf;\n} _ast_dbl_exp_t;\n\n");
+ printf("typedef union
_ast_dbl_exp_u\n{\n\tuint32_t\t\te[sizeof(double)/4];\n\tdouble\t\t\tf;\n}
_ast_dbl_exp_t;\n\n");
printf("#define _ast_dbl_exp_index %d\n",
i);
for (i = 0; !(e & 1); e >>= 1, i++);
printf("#define _ast_dbl_exp_shift
%d\n\n", i);
@@ -917,7 +917,7 @@
for (j = i + 1; j < sizeof(a.e) /
sizeof(a.e[0]); j++)
if (a.e[j] ^ b.e[j])
return 0;
- printf("typedef union
_fltmax_exp_u\n{\n\tunsigned
_ast_int4_t\te[sizeof(_ast_fltmax_t)/4];\n\t_ast_fltmax_t\t\tf;\n}
_ast_fltmax_exp_t;\n\n");
+ printf("typedef union
_fltmax_exp_u\n{\n\tuint32_t\t\te[sizeof(_ast_fltmax_t)/4];\n\t_ast_fltmax_t\t\tf;\n}
_ast_fltmax_exp_t;\n\n");
printf("#define _ast_fltmax_exp_index\t%d\n",
i);
for (i = 0; !(e & 1); e >>= 1, i++);
printf("#define _ast_fltmax_exp_shift\t%d\n\n",
i);
diff -r -N -u ksh93_2007_01_11/src/lib/libast/features/lib
ksh93_2007_03_28/src/lib/libast/features/lib
--- ksh93_2007_01_11/src/lib/libast/features/lib 2006-10-31
17:02:05.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/features/lib 2007-03-05
16:45:24.000000000 +0100
@@ -560,7 +560,7 @@
}
}end
-std strtod note{ stuck with standard strtod }end nostatic{
+std strtod stdlib.h note{ stuck with standard strtod }end nostatic{
_BEGIN_EXTERNS_
#if _STD_
double strtod(const char* s, char** e) { return 0.0; }
@@ -571,6 +571,17 @@
int main() { printf(""); return strtod("1",0) != 0; }
}end
+std strtold stdlib.h note{ stuck with standard strtold }end nostatic{
+ _BEGIN_EXTERNS_
+ #if _STD_
+ long double strtold(const char* s, char** e) { return 0.0; }
+ #else
+ long double strtold(s, e) char* s; char** e; { return 0.0; }
+ #endif
+ _END_EXTERNS_
+ int main() { printf(""); return strtold("1",0) != 0; }
+}end
+
std strtol note{ stuck with standard strtol }end nostatic{
_BEGIN_EXTERNS_
#if _STD_
diff -r -N -u ksh93_2007_01_11/src/lib/libast/features/limits.c
ksh93_2007_03_28/src/lib/libast/features/limits.c
--- ksh93_2007_01_11/src/lib/libast/features/limits.c 2006-10-19
23:16:47.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/features/limits.c 2007-02-14
07:35:09.000000000 +0100
@@ -91,9 +91,9 @@
unsigned int ui;
unsigned long ul;
unsigned long val;
-#ifdef _ast_int8_t
- unsigned _ast_int8_t ull;
- unsigned _ast_int8_t vll;
+#if _typ_uint64_t
+ uint64_t ull;
+ uint64_t vll;
#endif
/*
@@ -123,7 +123,7 @@
ui = ~ui;
ul = 0;
ul = ~ul;
-#ifdef _ast_int8_t
+#if _typ_uint64_t
ull = 0;
ull = ~ull;
#endif
@@ -260,52 +260,52 @@
#endif
}
-#if defined(_ast_int8_t) && !_ast_intmax_long
+#if _typ_uint64_t && !_ast_intmax_long
if (ull == ul)
{
-#ifndef ULONGLONG_MAX
- printf("#define ULONGLONG_MAX ULONG_MAX\n");
+#ifndef ULLONG_MAX
+ printf("#define ULLONG_MAX ULONG_MAX\n");
#endif
-#ifndef LONGLONG_MIN
- printf("#define LONGLONG_MIN LONG_MIN\n");
+#ifndef LLONG_MIN
+ printf("#define LLONG_MIN LONG_MIN\n");
#endif
-#ifndef LONGLONG_MAX
- printf("#define LONGLONG_MAX LONG_MAX\n");
+#ifndef LLONG_MAX
+ printf("#define LLONG_MAX LONG_MAX\n");
#endif
}
else
{
-#ifndef ULONGLONG_MAX
+#ifndef ULLONG_MAX
vll = ull;
- printf("#ifndef ULONGLONG_MAX\n");
+ printf("#ifndef ULLONG_MAX\n");
printf("#if defined(__STDC__) && _ast_LL\n");
- printf("#define ULONGLONG_MAX %lluULL\n", vll);
+ printf("#define ULLONG_MAX %lluULL\n", vll);
printf("#else\n");
- printf("#define ULONGLONG_MAX %llu\n", vll);
+ printf("#define ULLONG_MAX %llu\n", vll);
printf("#endif\n");
printf("#endif\n");
#endif
-#ifndef LONGLONG_MIN
- vll = (unsigned _ast_int8_t)(ull >> 1) + 1;
- printf("#ifndef LONGLONG_MIN\n");
+#ifndef LLONG_MIN
+ vll = (uint64_t)(ull >> 1) + 1;
+ printf("#ifndef LLONG_MIN\n");
printf("#if defined(__STDC__) && _ast_LL\n");
- printf("#define LONGLONG_MIN (-%lluLL-1LL)\n", vll - 1);
+ printf("#define LLONG_MIN (-%lluLL-1LL)\n", vll - 1);
printf("#else\n");
- printf("#define LONGLONG_MIN (-%llu-1)\n", vll - 1);
+ printf("#define LLONG_MIN (-%llu-1)\n", vll - 1);
printf("#endif\n");
printf("#endif\n");
#endif
-#ifndef LONGLONG_MAX
- vll = (unsigned _ast_int8_t)(ull >> 1);
- printf("#ifndef LONGLONG_MAX\n");
+#ifndef LLONG_MAX
+ vll = (uint64_t)(ull >> 1);
+ printf("#ifndef LLONG_MAX\n");
printf("#if defined(__STDC__) && _ast_LL\n");
- printf("#define LONGLONG_MAX %lluLL\n", vll);
+ printf("#define LLONG_MAX %lluLL\n", vll);
printf("#else\n");
- printf("#define LONGLONG_MAX %llu\n", vll);
+ printf("#define LLONG_MAX %llu\n", vll);
printf("#endif\n");
printf("#endif\n");
#endif
diff -r -N -u ksh93_2007_01_11/src/lib/libast/features/map.c
ksh93_2007_03_28/src/lib/libast/features/map.c
--- ksh93_2007_01_11/src/lib/libast/features/map.c 2006-10-26
23:35:24.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/features/map.c 2007-03-25
07:43:02.000000000 +0200
@@ -222,6 +222,8 @@
printf("#define regcomb _ast_regcomb\n");
printf("#undef regcomp\n");
printf("#define regcomp _ast_regcomp\n");
+ printf("#undef regdecomp\n");
+ printf("#define regdecomp _ast_regdecomp\n");
printf("#undef regdup\n");
printf("#define regdup _ast_regdup\n");
printf("#undef regerror\n");
@@ -450,6 +452,8 @@
#if _map_libc || _std_strtod
printf("#undef strtod\n");
printf("#define strtod _ast_strtod\n");
+#endif
+#if _map_libc || _std_strtold
printf("#undef strtold\n");
printf("#define strtold _ast_strtold\n");
#endif
@@ -485,12 +489,12 @@
printf("#if !_UWIN\n");
printf("#undef extern\n");
printf("#endif\n");
-#if _npt_strtold || _map_libc || _std_strtod
-#if _npt_strtold && !_map_libc && !_std_strtod
+#if _npt_strtold || _map_libc || _std_strtold
+#if _npt_strtold && !_map_libc && !_std_strtold
printf("#ifndef _ISOC99_SOURCE\n");
#endif
printf("extern _ast_fltmax_t strtold(const char*, char**);\n");
-#if _npt_strtold && !_map_libc && !_std_strtod
+#if _npt_strtold && !_map_libc && !_std_strtold
printf("#endif\n");
#endif
#endif
diff -r -N -u ksh93_2007_01_11/src/lib/libast/features/stdio
ksh93_2007_03_28/src/lib/libast/features/stdio
--- ksh93_2007_01_11/src/lib/libast/features/stdio 2006-10-04
19:36:17.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/features/stdio 2007-03-09
18:43:06.000000000 +0100
@@ -74,14 +74,14 @@
#endif
#define fpos_t _ast_fpos_t
- #ifdef _ast_int8_t
+ #if _typ_int64_t
#define fpos64_t _ast_fpos_t
#endif
typedef struct _ast_fpos_s
{
- _ast_intmax_t _sf_offset;
- unsigned char _sf_state[64 - sizeof(_ast_intmax_t)];
+ intmax_t _sf_offset;
+ unsigned char _sf_state[64 - sizeof(intmax_t)];
} _ast_fpos_t;
#define _base _data
@@ -99,8 +99,8 @@
#undef strerror
extern char* strerror(int) __THROW;
- extern int _doprnt(const char*, _ast_va_list, FILE*);
- extern int _doscan(FILE*, const char*, _ast_va_list);
+ extern int _doprnt(const char*, va_list, FILE*);
+ extern int _doscan(FILE*, const char*, va_list);
extern int asprintf(char**, const char*, ...);
extern int clearerr(FILE*);
extern int fclose(FILE*);
@@ -148,23 +148,23 @@
extern int sscanf(const char*, const char*, ...);
extern FILE* tmpfile(void);
extern int ungetc(int, FILE*);
- extern int vasprintf(char**, const char*, _ast_va_list);
- extern int vfprintf(FILE*, const char*, _ast_va_list);
- extern int vfscanf(FILE*, const char*, _ast_va_list);
- extern int vprintf(const char*, _ast_va_list);
- extern int vscanf(const char*, _ast_va_list);
- extern int vsnprintf(char*, int, const char*, _ast_va_list);
- extern int vsprintf(char*, const char*, _ast_va_list);
- extern int vsscanf(const char*, const char*, _ast_va_list);
+ extern int vasprintf(char**, const char*, va_list);
+ extern int vfprintf(FILE*, const char*, va_list);
+ extern int vfscanf(FILE*, const char*, va_list);
+ extern int vprintf(const char*, va_list);
+ extern int vscanf(const char*, va_list);
+ extern int vsnprintf(char*, int, const char*, va_list);
+ extern int vsprintf(char*, const char*, va_list);
+ extern int vsscanf(const char*, const char*, va_list);
- #ifdef _ast_int8_t
+ #if _typ_int64_t
extern int fgetpos64(FILE*, fpos64_t*);
extern int fsetpos64(FILE*, const fpos64_t*);
- extern int fseek64(FILE*, _ast_int8_t, int);
- extern int fseeko64(FILE*, _ast_int8_t, int);
- extern _ast_int8_t ftell64(FILE*);
- extern _ast_int8_t ftello64(FILE*);
+ extern int fseek64(FILE*, int64_t, int);
+ extern int fseeko64(FILE*, int64_t, int);
+ extern int64_t ftell64(FILE*);
+ extern int64_t ftello64(FILE*);
#endif
@@ -371,8 +371,8 @@
#define extern __EXPORT__
#endif
- extern int _doprnt(const char*, _ast_va_list, FILE*);
- extern int _doscan(FILE*, const char*, _ast_va_list);
+ extern int _doprnt(const char*, va_list, FILE*);
+ extern int _doscan(FILE*, const char*, va_list);
extern int asprintf(char**, const char*, ...);
extern int clearerr(FILE*);
extern int fclose(FILE*);
@@ -420,23 +420,23 @@
extern int sscanf(const char*, const char*, ...);
extern FILE* tmpfile(void);
extern int ungetc(int, FILE*);
- extern int vasprintf(char**, const char*, _ast_va_list);
- extern int vfprintf(FILE*, const char*, _ast_va_list);
- extern int vfscanf(FILE*, const char*, _ast_va_list);
- extern int vprintf(const char*, _ast_va_list);
- extern int vscanf(const char*, _ast_va_list);
- extern int vsnprintf(char*, int, const char*, _ast_va_list);
- extern int vsprintf(char*, const char*, _ast_va_list);
- extern int vsscanf(const char*, const char*, _ast_va_list);
+ extern int vasprintf(char**, const char*, va_list);
+ extern int vfprintf(FILE*, const char*, va_list);
+ extern int vfscanf(FILE*, const char*, va_list);
+ extern int vprintf(const char*, va_list);
+ extern int vscanf(const char*, va_list);
+ extern int vsnprintf(char*, int, const char*, va_list);
+ extern int vsprintf(char*, const char*, va_list);
+ extern int vsscanf(const char*, const char*, va_list);
- #ifdef _ast_int8_t
+ #if _typ_int64_t
extern int fgetpos64(FILE*, fpos64_t*);
extern int fsetpos64(FILE*, const fpos64_t*);
- extern int fseek64(FILE*, _ast_int8_t, int);
- extern int fseeko64(FILE*, _ast_int8_t, int);
- extern _ast_int8_t ftell64(FILE*);
- extern _ast_int8_t ftello64(FILE*);
+ extern int fseek64(FILE*, int64_t, int);
+ extern int fseeko64(FILE*, int64_t, int);
+ extern int64_t ftell64(FILE*);
+ extern int64_t ftello64(FILE*);
#ifdef _LARGEFILE64_SOURCE
@@ -453,7 +453,7 @@
#if _typ_off64_t
#define off_t off64_t
#else
- #define off_t _ast_int8_t
+ #define off_t int64_t
#endif
#define fgetpos fgetpos64
diff -r -N -u ksh93_2007_01_11/src/lib/libast/features/sys
ksh93_2007_03_28/src/lib/libast/features/sys
--- ksh93_2007_01_11/src/lib/libast/features/sys 2006-10-26
19:58:15.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/features/sys 2007-03-24
05:14:39.000000000 +0100
@@ -38,6 +38,8 @@
header stdlib.h
header stddef.h
header sys/types.h
+header stdint.h
+header inttypes.h
header string.h
header unistd.h
header limits.h
diff -r -N -u ksh93_2007_01_11/src/lib/libast/features/time
ksh93_2007_03_28/src/lib/libast/features/time
--- ksh93_2007_01_11/src/lib/libast/features/time 2006-10-09
03:16:04.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/features/time 2007-02-14
20:07:19.000000000 +0100
@@ -1,7 +1,7 @@
set prototyped
lib nanosleep,usleep,_strftime
-typ clock_t = unsigned _ast_int4_t
-typ time_t = unsigned _ast_int4_t
+typ clock_t = uint32_t
+typ time_t = uint32_t
if sys time {
#include <sys/time.h>
diff -r -N -u ksh93_2007_01_11/src/lib/libast/features/tmx
ksh93_2007_03_28/src/lib/libast/features/tmx
--- ksh93_2007_01_11/src/lib/libast/features/tmx 2005-07-22
07:38:51.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/features/tmx 2007-02-15
11:56:06.000000000 +0100
@@ -22,9 +22,9 @@
#define TMX_MAXNSEC 709551614
#define TMX_RESOLUTION 1000000000
- typedef unsigned _ast_int8_t Time_t;
- typedef unsigned _ast_int8_t Tmxsec_t;
- typedef unsigned _ast_int4_t Tmxnsec_t;
+ typedef uint64_t Time_t;
+ typedef uint64_t Tmxsec_t;
+ typedef uint32_t Tmxnsec_t;
#define tmxsec(t) ((Tmxsec_t)((t)/1000000000))
#define tmxnsec(t) ((Tmxnsec_t)((t)%1000000000))
@@ -39,12 +39,12 @@
#define TMX_RESOLUTION 1000
typedef _ast_flt8_t Time_t;
- typedef unsigned _ast_int4_t Tmxsec_t;
- typedef unsigned _ast_int4_t Tmxnsec_t;
+ typedef uint32_t Tmxsec_t;
+ typedef uint32_t Tmxnsec_t;
#define tmxsec(t) ((Tmxsec_t)(t))
- #define tmxnsec(t) (((Tmxnsec_t)(((t)-((unsigned
_ast_int4_t)(t))+0.0000005)*1000L))*1000000L)
- #define tmxsns(s,n) (((Time_t)(s))+((((unsigned
_ast_int4_t)(n))/1000L)/1e6))
+ #define tmxnsec(t)
(((Tmxnsec_t)(((t)-((uint32_t)(t))+0.0000005)*1000L))*1000000L)
+ #define tmxsns(s,n) (((Time_t)(s))+((((uint32_t)(n))/1000L)/1e6))
}
else {
#define TMX_MAXDATE "2106-02-07+06:28:14 UTC"
@@ -53,9 +53,9 @@
#define TMX_MAXNSEC 0L
#define TMX_RESOLUTION 1
- typedef unsigned _ast_int4_t Time_t;
- typedef unsigned _ast_int4_t Tmxsec_t;
- typedef unsigned _ast_int4_t Tmxnsec_t;
+ typedef uint32_t Time_t;
+ typedef uint32_t Tmxsec_t;
+ typedef uint32_t Tmxnsec_t;
#define tmxsec(t) ((Tmxsec_t)(t))
#define tmxnsec(t) (0)
diff -r -N -u ksh93_2007_01_11/src/lib/libast/features/tv
ksh93_2007_03_28/src/lib/libast/features/tv
--- ksh93_2007_01_11/src/lib/libast/features/tv 2005-01-14 14:58:32.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libast/features/tv 2007-02-14 20:09:03.000000000
+0100
@@ -16,8 +16,8 @@
typedef struct Tv_s
{
- unsigned _ast_int4_t tv_sec;
- unsigned _ast_int4_t tv_nsec;
+ uint32_t tv_sec;
+ uint32_t tv_nsec;
} Tv_t;
}end
diff -r -N -u ksh93_2007_01_11/src/lib/libast/features/wchar
ksh93_2007_03_28/src/lib/libast/features/wchar
--- ksh93_2007_01_11/src/lib/libast/features/wchar 2006-09-22
09:12:03.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/features/wchar 2007-03-09
18:43:14.000000000 +0100
@@ -97,12 +97,12 @@
extern int swprintf(wchar_t*, size_t, const wchar_t*, ...);
extern int swscanf(const wchar_t*, const wchar_t*, ...);
extern wint_t ungetwc(wint_t, FILE*);
- extern int vfwprintf(FILE*, const wchar_t*, _ast_va_list);
- extern int vfwscanf(FILE*, const wchar_t*, _ast_va_list);
- extern int vwprintf(const wchar_t*, _ast_va_list);
- extern int vwscanf(const wchar_t*, _ast_va_list);
- extern int vswprintf(wchar_t*, size_t, const wchar_t*,
_ast_va_list);
- extern int vswscanf(const wchar_t*, const wchar_t*,
_ast_va_list);
+ extern int vfwprintf(FILE*, const wchar_t*, va_list);
+ extern int vfwscanf(FILE*, const wchar_t*, va_list);
+ extern int vwprintf(const wchar_t*, va_list);
+ extern int vwscanf(const wchar_t*, va_list);
+ extern int vswprintf(wchar_t*, size_t, const wchar_t*,
va_list);
+ extern int vswscanf(const wchar_t*, const wchar_t*,
va_list);
extern int wprintf(const wchar_t*, ...);
extern int wscanf(const wchar_t*, ...);
diff -r -N -u ksh93_2007_01_11/src/lib/libast/include/ast.h
ksh93_2007_03_28/src/lib/libast/include/ast.h
--- ksh93_2007_01_11/src/lib/libast/include/ast.h 2006-11-15
23:06:04.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/include/ast.h 2007-02-14
07:36:29.000000000 +0100
@@ -248,8 +248,8 @@
extern int chrtoi(const char*);
extern int eaccess(const char*, int);
extern char* fmtbase(long, int, int);
-extern char* fmtbasell(_ast_intmax_t, int, int);
-#define fmtbase(a,b,c) fmtbasell((_ast_intmax_t)(a),b,c) /* until 2003-09-01 */
+extern char* fmtbasell(intmax_t, int, int);
+#define fmtbase(a,b,c) fmtbasell((intmax_t)(a),b,c) /* until 2003-09-01 */
extern char* fmtbuf(size_t);
extern char* fmtclock(Sfulong_t);
extern char* fmtelapsed(unsigned long, int);
@@ -257,7 +257,7 @@
extern char* fmtesc(const char*);
extern char* fmtesq(const char*, const char*);
extern char* fmtident(const char*);
-extern char* fmtip4(unsigned _ast_int4_t, int);
+extern char* fmtip4(uint32_t, int);
extern char* fmtfmt(const char*);
extern char* fmtgid(int);
extern char* fmtmatch(const char*);
@@ -314,9 +314,9 @@
extern double strntod(const char*, size_t, char**);
extern _ast_fltmax_t strntold(const char*, size_t, char**);
extern long strntol(const char*, size_t, char**, int);
-extern _ast_intmax_t strntoll(const char*, size_t, char**, int);
+extern intmax_t strntoll(const char*, size_t, char**, int);
extern unsigned long strntoul(const char*, size_t, char**, int);
-extern unsigned _ast_intmax_t strntoull(const char*, size_t, char**, int);
+extern uintmax_t strntoull(const char*, size_t, char**, int);
extern int stropt(const char*, const void*, int, int(*)(void*,
const void*, int, const char*), void*);
extern int strperm(const char*, char**, int);
extern void* strpsearch(const void*, size_t, size_t, const char*,
char**);
@@ -325,9 +325,9 @@
extern char* strsubmatch(const char*, const char*, int);
extern unsigned long strsum(const char*, unsigned long);
extern char* strtape(const char*, char**);
-extern int strtoip4(const char*, char**, unsigned _ast_int4_t*,
unsigned char*);
+extern int strtoip4(const char*, char**, uint32_t*, unsigned
char*);
extern long strton(const char*, char**, char*, int);
-extern _ast_intmax_t strtonll(const char*, char**, char*, int);
+extern intmax_t strtonll(const char*, char**, char*, int);
extern int struid(const char*);
extern int struniq(char**, int);
diff -r -N -u ksh93_2007_01_11/src/lib/libast/include/ast_std.h
ksh93_2007_03_28/src/lib/libast/include/ast_std.h
--- ksh93_2007_01_11/src/lib/libast/include/ast_std.h 2006-10-26
23:17:58.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/include/ast_std.h 2007-03-09
18:44:03.000000000 +0100
@@ -68,9 +68,6 @@
#include <ast_limits.h>
#include <ast_botch.h>
-#undef _ast_va_list
-#define _ast_va_list va_list
-
#ifdef _SKIP_SFSTDIO_H
#undef _SKIP_SFSTDIO_H
#else
@@ -209,8 +206,8 @@
struct
{
- unsigned _ast_int4_t serial;
- unsigned _ast_int4_t set;
+ uint32_t serial;
+ uint32_t set;
} locale;
long tmp_long;
@@ -231,7 +228,7 @@
int (*mb_width)(wchar_t);
int (*mb_conv)(char*, wchar_t);
- unsigned _ast_int4_t env_serial;
+ uint32_t env_serial;
char pad[944];
diff -r -N -u ksh93_2007_01_11/src/lib/libast/include/ccode.h
ksh93_2007_03_28/src/lib/libast/include/ccode.h
--- ksh93_2007_01_11/src/lib/libast/include/ccode.h 2004-11-01
07:58:56.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/include/ccode.h 2007-03-13
16:20:12.000000000 +0100
@@ -70,7 +70,7 @@
#define CCCVT(x) CCMAP(x,0)
#define CCMAP(i,o) ((i)==(o)?(unsigned char*)0:_ccmap(i,o))
-#define CCMAPCHR(m,c) ((m)?m[c]:(c))
+#define CCMAPCHR(m,c) ((m)?(m)[c]:(c))
#define CCMAPCPY(m,t,f,n) ((m)?_ccmapcpy(m,t,f,n):memcpy(t,f,n))
#define CCMAPSTR(m,s,n) ((m)?_ccmapstr(m,s,n):(void*)(s))
diff -r -N -u ksh93_2007_01_11/src/lib/libast/include/cdt.h
ksh93_2007_03_28/src/lib/libast/include/cdt.h
--- ksh93_2007_01_11/src/lib/libast/include/cdt.h 2005-11-10
00:08:51.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/include/cdt.h 2007-03-13
16:28:02.000000000 +0100
@@ -242,15 +242,15 @@
/* internal functions for translating among holder, object and key */
#define _DT(dt) ((Dt_t*)(dt))
#define _DTDSC(dc,ky,sz,lk,cmpf) \
- (ky = dc->key, sz = dc->size, lk = dc->link, cmpf =
dc->comparf)
+ (ky = (dc)->key, sz = (dc)->size, lk = (dc)->link, cmpf
= (dc)->comparf)
#define _DTLNK(o,lk) ((Dtlink_t*)((char*)(o) + lk) )
-#define _DTOBJ(e,lk) (lk < 0 ? ((Dthold_t*)(e))->obj : (Void_t*)((char*)(e)
- lk) )
-#define _DTKEY(o,ky,sz) (Void_t*)(sz < 0 ? *((char**)((char*)(o)+ky)) :
((char*)(o)+ky))
+#define _DTOBJ(e,lk) ((lk) < 0 ? ((Dthold_t*)(e))->obj :
(Void_t*)((char*)(e) - (lk)) )
+#define _DTKEY(o,ky,sz) (Void_t*)((sz) < 0 ?
*((char**)((char*)(o)+(ky))) : ((char*)(o)+(ky)))
#define _DTCMP(dt,k1,k2,dc,cmpf,sz) \
- (cmpf ? (*cmpf)(dt,k1,k2,dc) : \
- (sz <= 0 ? strcmp(k1,k2) : memcmp(k1,k2,sz)) )
-#define _DTHSH(dt,ky,dc,sz) (dc->hashf ? (*dc->hashf)(dt,ky,dc) :
dtstrhash(0,ky,sz) )
+ ((cmpf) ? (*cmpf)(dt,k1,k2,dc) : \
+ ((sz) <= 0 ? strcmp(k1,k2) : memcmp(k1,k2,sz)) )
+#define _DTHSH(dt,ky,dc,sz) ((dc)->hashf ? (*(dc)->hashf)(dt,ky,dc) :
dtstrhash(0,ky,sz) )
/* special search function for tree structure only */
#define _DTMTCH(dt,key,action) \
diff -r -N -u ksh93_2007_01_11/src/lib/libast/include/error.h
ksh93_2007_03_28/src/lib/libast/include/error.h
--- ksh93_2007_01_11/src/lib/libast/include/error.h 2004-10-27
21:36:08.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/include/error.h 2007-03-22
23:14:02.000000000 +0100
@@ -34,11 +34,7 @@
#include <option.h>
#include <errno.h>
-#define ERROR_VERSION 20030214L
-
-#ifndef error_info
-#define error_info _error_info_
-#endif
+#define ERROR_VERSION 20070319L
#if !defined(errno) && defined(__DYNAMIC__)
#define errno __DYNAMIC__(errno)
@@ -83,13 +79,29 @@
#define ERROR_SILENT 0x0002 /* context is silent */
#define ERROR_NOTIFY 0x0004 /* main(-sig,0,ctx) on signal */
-#define errorpush(p,f)
(*(p)=*ERROR_CONTEXT_BASE,*ERROR_CONTEXT_BASE=error_info.empty,error_info.context=(p),error_info.flags=(f))
-#define errorpop(p) (*ERROR_CONTEXT_BASE=*(p))
+#define ERROR_FREE 0x0010 /* free context on pop */
+#define ERROR_POP 0x0020 /* pop context */
+#define ERROR_PUSH 0x0040 /* push context */
+#define ERROR_SET 0x0080 /* set context */
+
+/*
+ * errorpush()/errorpop() are obsolete -- use errorctx() instead
+ */
+
+#ifndef ERROR_CONTEXT_T
+#define ERROR_CONTEXT_T Error_info_t
+#endif
#define ERROR_CONTEXT_BASE ((Error_context_t*)&error_info.context)
+#define errorpush(p,f)
(*(p)=*ERROR_CONTEXT_BASE,*ERROR_CONTEXT_BASE=error_info.empty,error_info.context=(Error_context_t*)(p),error_info.flags=(f))
+#define errorpop(p) (*ERROR_CONTEXT_BASE=*(p))
+
+typedef struct Error_info_s Error_info_t;
+typedef struct Error_context_s Error_context_t;
+
#define ERROR_CONTEXT \
- Error_context_t* context; /* prev context stack element */ \
+ ERROR_CONTEXT_T* context; /* prev context stack element */ \
int errors; /* >= ERROR_ERROR count */ \
int flags; /* context flags */ \
int line; /* input|output line number */ \
@@ -97,16 +109,12 @@
char* file; /* input|output file name */ \
char* id; /* command id */
-#define errorcontext Error_context_s /* compatibility til 2004 */
-
-typedef struct Error_context_s Error_context_t;
-
struct Error_context_s /* context stack element */
{
ERROR_CONTEXT
};
-typedef struct Error_info_s /* error state */
+struct Error_info_s /* error state */
{
int fd; /* write(2) fd */
@@ -135,9 +143,9 @@
unsigned long time; /* debug time trace */
char* (*translate)(const char*, const char*, const char*, const
char*); /* format translator */
- const char* catalog; /* default message catalog */
-} Error_info_t;
+ const char* catalog; /* message catalog */
+};
#ifndef errno
extern int errno; /* system call error status */
@@ -150,7 +158,9 @@
#define extern extern __IMPORT__
#endif
-extern Error_info_t error_info;
+extern Error_info_t* _error_infop_;
+
+#define error_info (*_error_infop_)
#undef extern
@@ -158,16 +168,14 @@
#define extern __EXPORT__
#endif
-extern void error(int, ...);
-extern int errormsg(const char*, int, ...);
-extern int errorf(void*, void*, int, ...);
-extern void errorv(const char*, int, va_list);
+extern void error(int, ...);
+extern int errormsg(const char*, int, ...);
+extern int errorf(void*, void*, int, ...);
+extern void errorv(const char*, int, va_list);
#ifndef errorx
-extern char* errorx(const char*, const char*, const char*, const char*);
+extern char* errorx(const char*, const char*, const char*, const
char*);
#endif
-
-extern void liberror(const char*, int, ...); /* OBSOLETE 20000101 */
-extern int libevent(void*, void*, int, ...); /* OBSOLETE 19990101 */
+extern Error_info_t* errorctx(Error_info_t*, int, int);
#undef extern
diff -r -N -u ksh93_2007_01_11/src/lib/libast/include/fnv.h
ksh93_2007_03_28/src/lib/libast/include/fnv.h
--- ksh93_2007_01_11/src/lib/libast/include/fnv.h 2003-09-29
18:49:08.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/include/fnv.h 2007-03-13
16:33:13.000000000 +0100
@@ -38,14 +38,14 @@
#define FNV_MULT 0x01000193L
#define FNVINIT(h) (h = FNV_INIT)
-#define FNVPART(h,c) (h = h * FNV_MULT ^ (c))
+#define FNVPART(h,c) (h = (h) * FNV_MULT ^ (c))
#define FNVSUM(h,s,n) do { \
register size_t _i_ = 0; \
while (_i_ < n) \
FNVPART(h, ((unsigned char*)s)[_i_++]); \
} while (0)
-#ifdef _ast_int8_t
+#if _typ_int64_t
#ifdef _ast_LL
@@ -54,13 +54,13 @@
#else
-#define FNV_INIT64 ((_ast_int8_t)0xcbf29ce484222325)
-#define FNV_MULT64 ((_ast_int8_t)0x00000100000001b3)
+#define FNV_INIT64 ((int64_t)0xcbf29ce484222325)
+#define FNV_MULT64 ((int64_t)0x00000100000001b3)
#endif
#define FNVINIT64(h) (h = FNV_INIT64)
-#define FNVPART64(h,c) (h = h * FNV_MULT64 ^ (c))
+#define FNVPART64(h,c) (h = (h) * FNV_MULT64 ^ (c))
#define FNVSUM64(h,s,n) do { \
register int _i_ = 0; \
while (_i_ < n) \
diff -r -N -u ksh93_2007_01_11/src/lib/libast/include/int.h
ksh93_2007_03_28/src/lib/libast/include/int.h
--- ksh93_2007_01_11/src/lib/libast/include/int.h 1998-03-17
14:44:13.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/include/int.h 1970-01-01
01:00:00.000000000 +0100
@@ -1,59 +0,0 @@
-/***********************************************************************
-* *
-* 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> *
-* *
-***********************************************************************/
-/*
- * types by byte capacity
- */
-
-#ifndef _INT_H
-#define _INT_H
-
-#include <ast_common.h>
-
-#ifdef _ast_int1_t
-#define int_1 _ast_int1_t
-#endif
-#ifdef _ast_int2_t
-#define int_2 _ast_int2_t
-#endif
-#ifdef _ast_int4_t
-#define int_4 _ast_int4_t
-#endif
-#ifdef _ast_int8_t
-#define int_8 _ast_int8_t
-#endif
-
-#define int_max _ast_intmax_t
-#define int_swap _ast_intswap
-
-#ifdef _ast_flt4_t
-#define flt_4 _ast_flt4_t
-#endif
-#ifdef _ast_flt8_t
-#define flt_8 _ast_flt8_t
-#endif
-#ifdef _ast_flt16_t
-#define flt_16 _ast_flt16_t
-#endif
-
-#define flt_max _ast_fltmax_t
-
-#endif
diff -r -N -u ksh93_2007_01_11/src/lib/libast/include/magicid.h
ksh93_2007_03_28/src/lib/libast/include/magicid.h
--- ksh93_2007_01_11/src/lib/libast/include/magicid.h 2002-01-16
17:00:27.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/include/magicid.h 2007-02-14
07:43:23.000000000 +0100
@@ -32,7 +32,7 @@
#define MAGICID 0x00010203
-typedef unsigned _ast_int4_t Magicid_data_t;
+typedef uint32_t Magicid_data_t;
typedef struct Magicid_s
{
diff -r -N -u ksh93_2007_01_11/src/lib/libast/include/option.h
ksh93_2007_03_28/src/lib/libast/include/option.h
--- ksh93_2007_01_11/src/lib/libast/include/option.h 2004-11-01
16:25:34.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/include/option.h 2007-03-22
23:14:38.000000000 +0100
@@ -32,9 +32,7 @@
#include <ast.h>
-#define OPT_VERSION 20000401L
-
-#define opt_info _opt_info_
+#define OPT_VERSION 20070319L
#define OPT_USER (1L<<16) /* first user flag bit */
@@ -70,7 +68,7 @@
char option[8]; /* current flag {-,+} + option */
char name[64]; /* current long name or flag */
Optdisc_t* disc; /* user discipline */
- _ast_intmax_t number; /* # numeric argument */
+ intmax_t number; /* # numeric argument */
unsigned char assignment; /* option arg assigment op */
unsigned char pads[sizeof(void*)-1];
_OPT_PRIVATE_
@@ -83,7 +81,9 @@
#define extern extern __IMPORT__
#endif
-extern Opt_t opt_info;
+extern Opt_t* _opt_infop_;
+
+#define opt_info (*_opt_infop_)
#undef extern
diff -r -N -u ksh93_2007_01_11/src/lib/libast/include/recfmt.h
ksh93_2007_03_28/src/lib/libast/include/recfmt.h
--- ksh93_2007_01_11/src/lib/libast/include/recfmt.h 2005-11-15
16:39:28.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/include/recfmt.h 2007-02-14
07:43:45.000000000 +0100
@@ -32,7 +32,7 @@
#include <ast.h>
-typedef unsigned _ast_int4_t Recfmt_t;
+typedef uint32_t Recfmt_t;
#define REC_delimited 0
#define REC_fixed 1
diff -r -N -u ksh93_2007_01_11/src/lib/libast/include/regex.h
ksh93_2007_03_28/src/lib/libast/include/regex.h
--- ksh93_2007_01_11/src/lib/libast/include/regex.h 2006-10-26
15:45:12.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/include/regex.h 2007-03-21
15:57:41.000000000 +0100
@@ -127,7 +127,7 @@
struct regdisc_s; typedef struct regdisc_s regdisc_t;
typedef int (*regclass_t)(int);
-typedef _ast_int4_t regflags_t;
+typedef int32_t regflags_t;
typedef int regoff_t;
typedef int (*regerror_t)(const regex_t*, regdisc_t*, int, ...);
typedef void* (*regcomp_t)(const regex_t*, const char*, size_t, regdisc_t*);
@@ -182,7 +182,7 @@
regsub_t* re_sub; /* regsubcomp() data */
};
-#define reginit(disc)
(memset(disc,0,sizeof(*disc)),disc->re_version=REG_VERSION)
+#define reginit(disc)
(memset(disc,0,sizeof(*(disc))),(disc)->re_version=REG_VERSION)
#if _BLD_ast && defined(__EXPORT__)
#define extern __EXPORT__
@@ -195,9 +195,14 @@
/* nonstandard hooks */
+#define _REG_cache 1 /* have regcache() */
+#define _REG_class 1 /* have regclass() */
#define _REG_collate 1 /* have regcollate(), regclass() */
#define _REG_comb 1 /* have regcomb() */
+#define _REG_decomp 1 /* have regdecomp() */
+#define _REG_dup 1 /* have regdup() */
#define _REG_fatal 1 /* have regfatal(), regfatalpat() */
+#define _REG_ncomp 1 /* have regncomp() */
#define _REG_nexec 1 /* have regnexec() */
#define _REG_rexec 1 /* have regrexec(), regrecord() */
#define _REG_stat 1 /* have regstat() */
diff -r -N -u ksh93_2007_01_11/src/lib/libast/include/sfio.h
ksh93_2007_03_28/src/lib/libast/include/sfio.h
--- ksh93_2007_01_11/src/lib/libast/include/sfio.h 2005-04-30
11:12:52.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/include/sfio.h 2007-03-13
16:29:07.000000000 +0100
@@ -31,7 +31,6 @@
typedef struct _sfio_s Sfio_t;
typedef struct _sfdisc_s Sfdisc_t;
-typedef struct _sfieee_s Sfieee_t;
#if defined(_AST_STD_H) || defined(_PACKAGE_ast) && defined(_SFIO_PRIVATE)
#include <ast_std.h>
@@ -40,9 +39,9 @@
#endif /* _PACKAGE_ast */
/* Sfoff_t should be large enough for largest file address */
-#define Sfoff_t _ast_intmax_t
-#define Sflong_t _ast_intmax_t
-#define Sfulong_t unsigned _ast_intmax_t
+#define Sfoff_t intmax_t
+#define Sflong_t intmax_t
+#define Sfulong_t uintmax_t
#define Sfdouble_t _ast_fltmax_t
typedef ssize_t (*Sfread_f)_ARG_((Sfio_t*, Void_t*, size_t,
Sfdisc_t*));
@@ -59,16 +58,6 @@
Sfdisc_t* disc; /* the continuing discipline */
};
-/* IEEE constants structure */
-struct _sfieee_s
-{ float fltnan; /* float NAN */
- float fltinf; /* float INF */
- double dblnan; /* double NAN */
- double dblinf; /* double INF */
- Sfdouble_t ldblnan; /* Sfdouble_t NAN */
- Sfdouble_t ldblinf; /* Sfdouble_t INF */
-};
-
#include <sfio_s.h>
/* formatting environment */
@@ -81,7 +70,7 @@
Sffmtevent_f eventf; /* process events */
char* form; /* format string to stack */
- _ast_va_list args; /* corresponding arg list */
+ va_list args; /* corresponding arg list */
int fmt; /* format character */
ssize_t size; /* object size */
@@ -98,28 +87,29 @@
Void_t* none; /* unused for now */
};
#define sffmtversion(fe,type) \
- (type ? ((fe)->version = SFIO_VERSION) : (fe)->version)
+ ((type) ? ((fe)->version = SFIO_VERSION) : (fe)->version)
-#define SFFMT_SSHORT 00000010 /* 'hh' flag, char */
-#define SFFMT_TFLAG 00000020 /* 't' flag, ptrdiff_t */
-#define SFFMT_ZFLAG 00000040 /* 'z' flag, size_t */
-
-#define SFFMT_LEFT 00000100 /* left-justification */
-#define SFFMT_SIGN 00000200 /* must have a sign */
-#define SFFMT_BLANK 00000400 /* if not signed, prepend a blank */
-#define SFFMT_ZERO 00001000 /* zero-padding on the left */
-#define SFFMT_ALTER 00002000 /* alternate formatting */
-#define SFFMT_THOUSAND 00004000 /* thousand grouping */
-#define SFFMT_SKIP 00010000 /* skip assignment in scanf() */
-#define SFFMT_SHORT 00020000 /* 'h' flag */
-#define SFFMT_LONG 00040000 /* 'l' flag */
-#define SFFMT_LLONG 00100000 /* 'll' flag */
-#define SFFMT_LDOUBLE 00200000 /* 'L' flag */
-#define SFFMT_VALUE 00400000 /* value is returned */
-#define SFFMT_ARGPOS 01000000 /* getting arg for $ patterns */
-#define SFFMT_IFLAG 02000000 /* 'I' flag */
-#define SFFMT_JFLAG 04000000 /* 'j' flag, intmax_t */
-#define SFFMT_SET 07777770 /* flags settable on calling extf */
+#define SFFMT_SSHORT 000000010 /* 'hh' flag, char */
+#define SFFMT_TFLAG 000000020 /* 't' flag, ptrdiff_t
*/
+#define SFFMT_ZFLAG 000000040 /* 'z' flag, size_t */
+
+#define SFFMT_LEFT 000000100 /* left-justification */
+#define SFFMT_SIGN 000000200 /* must have a sign */
+#define SFFMT_BLANK 000000400 /* if not signed, prepend a blank */
+#define SFFMT_ZERO 000001000 /* zero-padding on the left */
+#define SFFMT_ALTER 000002000 /* alternate formatting */
+#define SFFMT_THOUSAND 000004000 /* thousand grouping */
+#define SFFMT_SKIP 000010000 /* skip assignment in scanf() */
+#define SFFMT_SHORT 000020000 /* 'h' flag */
+#define SFFMT_LONG 000040000 /* 'l' flag */
+#define SFFMT_LLONG 000100000 /* 'll' flag */
+#define SFFMT_LDOUBLE 000200000 /* 'L' flag */
+#define SFFMT_VALUE 000400000 /* value is returned */
+#define SFFMT_ARGPOS 001000000 /* getting arg for $ patterns */
+#define SFFMT_IFLAG 002000000 /* 'I' flag */
+#define SFFMT_JFLAG 004000000 /* 'j' flag, intmax_t */
+#define SFFMT_CENTER 010000000 /* '=' flag, center justification */
+#define SFFMT_SET 017777770 /* flags settable on calling extf */
/* for sfmutex() call */
#define SFMTX_LOCK 0 /* up mutex count */
@@ -156,9 +146,10 @@
#define SF_MTSAFE 0010000 /* need thread safety */
#define SF_WHOLE 0020000 /* preserve wholeness of sfwrite/sfputr */
#define SF_IOINTR 0040000 /* return on interrupts */
+#define SF_WCWIDTH 0100000 /* wcwidth display stream */
-#define SF_FLAGS 0077177 /* PUBLIC FLAGS PASSABLE TO SFNEW() */
-#define SF_SETS 0077163 /* flags passable to sfset()
*/
+#define SF_FLAGS 0177177 /* PUBLIC FLAGS PASSABLE TO SFNEW() */
+#define SF_SETS 0177163 /* flags passable to sfset()
*/
#ifndef _SF_NO_OBSOLETE
#define SF_BUFCONST 0400000 /* unused flag - for compatibility only */
@@ -266,12 +257,12 @@
extern int sfprintf _ARG_((Sfio_t*, const char*, ...));
extern char* sfprints _ARG_((const char*, ...));
extern ssize_t sfsprintf _ARG_((char*, size_t, const char*, ...));
-extern ssize_t sfvsprintf _ARG_((char*, size_t, const char*,
_ast_va_list));
-extern int sfvprintf _ARG_((Sfio_t*, const char*, _ast_va_list));
+extern ssize_t sfvsprintf _ARG_((char*, size_t, const char*, va_list));
+extern int sfvprintf _ARG_((Sfio_t*, const char*, va_list));
extern int sfscanf _ARG_((Sfio_t*, const char*, ...));
extern int sfsscanf _ARG_((const char*, const char*, ...));
-extern int sfvsscanf _ARG_((const char*, const char*,
_ast_va_list));
-extern int sfvscanf _ARG_((Sfio_t*, const char*, _ast_va_list));
+extern int sfvsscanf _ARG_((const char*, const char*, va_list));
+extern int sfvscanf _ARG_((Sfio_t*, const char*, va_list));
/* mutex locking for thread-safety */
extern int sfmutex _ARG_((Sfio_t*, int));
@@ -283,8 +274,6 @@
extern ssize_t sfpkrd _ARG_((int, Void_t*, size_t, int, long, int));
/* portable handling of primitive types */
-extern Sfieee_t* sfieee _ARG_((void));
-
extern int sfdlen _ARG_((Sfdouble_t));
extern int sfllen _ARG_((Sflong_t));
extern int sfulen _ARG_((Sfulong_t));
diff -r -N -u ksh93_2007_01_11/src/lib/libast/include/swap.h
ksh93_2007_03_28/src/lib/libast/include/swap.h
--- ksh93_2007_01_11/src/lib/libast/include/swap.h 1997-10-22
22:11:39.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/include/swap.h 2007-02-14
08:16:33.000000000 +0100
@@ -25,13 +25,15 @@
* AT&T Research
*
* integral representation conversion support definitions
- * supports sizeof(integral_type)<=sizeof(int_max)
+ * supports sizeof(integral_type)<=sizeof(intmax_t)
*/
#ifndef _SWAP_H
#define _SWAP_H
-#include <int.h>
+#include <ast_common.h>
+
+#define int_swap _ast_intswap
#define SWAP_MAX 8
@@ -42,8 +44,8 @@
#endif
extern void* swapmem(int, const void*, void*, size_t);
-extern int_max swapget(int, const void*, int);
-extern void* swapput(int, void*, int, int_max);
+extern intmax_t swapget(int, const void*, int);
+extern void* swapput(int, void*, int, intmax_t);
extern int swapop(const void*, const void*, int);
#undef extern
diff -r -N -u ksh93_2007_01_11/src/lib/libast/include/tm.h
ksh93_2007_03_28/src/lib/libast/include/tm.h
--- ksh93_2007_01_11/src/lib/libast/include/tm.h 2005-01-05
07:05:12.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/include/tm.h 2007-03-22
23:10:16.000000000 +0100
@@ -30,10 +30,7 @@
#ifndef _TM_H
#define _TM_H
-#define TM_VERSION 20041201L
-
-#define tm_data _tm_data_
-#define tm_info _tm_info_
+#define TM_VERSION 20070319L
#include <ast.h>
#include <times.h>
@@ -146,7 +143,7 @@
int tm_wday;
int tm_yday;
int tm_isdst;
- unsigned _ast_int4_t tm_nsec;
+ uint32_t tm_nsec;
Tm_zone_t* tm_zone;
} Tm_t;
@@ -157,8 +154,11 @@
#define extern extern __IMPORT__
#endif
-extern Tm_data_t tm_data;
-extern Tm_info_t tm_info;
+extern Tm_data_t* _tm_datap_;
+extern Tm_info_t* _tm_infop_;
+
+#define tm_data (*_tm_datap_)
+#define tm_info (*_tm_infop_)
#undef extern
diff -r -N -u ksh93_2007_01_11/src/lib/libast/Makefile
ksh93_2007_03_28/src/lib/libast/Makefile
--- ksh93_2007_01_11/src/lib/libast/Makefile 2006-12-11 17:49:36.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libast/Makefile 2007-03-22 18:27:48.000000000
+0100
@@ -30,7 +30,7 @@
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 int.h lc.h ls.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 \
@@ -84,7 +84,6 @@
error.c errorf.c errormsg.c errorx.c \
localeconv.c setlocale.c translate.c \
catopen.c iconv.c lc.c mc.c \
- liberror.c libevent.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 \
@@ -148,7 +147,7 @@
sfclose.c sfclrlock.c sfdisc.c sfdlen.c sfexcept.c \
sfgetl.c sfgetu.c sfcvt.c sfecvt.c sffcvt.c \
sfextern.c sffilbuf.c sfflsbuf.c sfprints.c sfgetd.c \
- sfgetr.c sfieee.c sfllen.c sfmode.c sfmove.c sfnew.c \
+ sfgetr.c sfllen.c sfmode.c sfmove.c sfnew.c \
sfpkrd.c sfnotify.c sfnputc.c sfopen.c sfpeek.c sfpoll.c \
sfpool.c sfpopen.c sfprintf.c sfputd.c sfputl.c sfputr.c \
sfputu.c sfrd.c sfread.c sfreserve.c sfscanf.c sfseek.c sfset.c \
diff -r -N -u ksh93_2007_01_11/src/lib/libast/Mamfile
ksh93_2007_03_28/src/lib/libast/Mamfile
--- ksh93_2007_01_11/src/lib/libast/Mamfile 2007-01-12 10:54:50.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libast/Mamfile 2007-03-29 19:07:12.000000000
+0200
@@ -1,4 +1,4 @@
-info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-01-11
+info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-03-26
setv INSTALLROOT ../../..
setv PACKAGEROOT ../../../../..
setv AR ar
@@ -1198,9 +1198,7 @@
prev include/sfio.h implicit
done include/magic.h
make include/swap.h implicit
-make include/int.h implicit
prev ast_common.h implicit
-done include/int.h dontcare
done include/swap.h
prev include/regex.h implicit
prev include/error.h implicit
@@ -1273,6 +1271,7 @@
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
@@ -1284,7 +1283,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 -DERROR_CATALOG=\""libast"\" -D_PACKAGE_ast -c
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
done error.o generated
make errorf.o
make misc/errorf.c
@@ -1461,22 +1460,6 @@
prev port/mc.c
exec - ${CC} ${mam_cc_FLAGS} ${-debug-symbols?1?${mam_cc_DEBUG}
-D_BLD_DEBUG?${CCFLAGS.FORCE}?} -I. -Icomp -Iport -Isfio -Iinclude -Istd
-I${INSTALLROOT}/include -D_PACKAGE_ast -c port/mc.c
done mc.o generated
-make liberror.o
-make misc/liberror.c
-prev include/error.h implicit
-done misc/liberror.c
-meta liberror.o %.c>%.o misc/liberror.c liberror
-prev misc/liberror.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd
-D_PACKAGE_ast -c misc/liberror.c
-done liberror.o generated
-make libevent.o
-make misc/libevent.c
-prev include/error.h implicit
-done misc/libevent.c
-meta libevent.o %.c>%.o misc/libevent.c libevent
-prev misc/libevent.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd
-D_PACKAGE_ast -c misc/libevent.c
-done libevent.o generated
make base64.o
make string/base64.c
prev include/ast.h implicit
@@ -2947,11 +2930,11 @@
done symlink.o generated
make getpgrp.o
make comp/getpgrp.c
-prev ast_common.h implicit
+prev include/ast_std.h implicit
done comp/getpgrp.c
meta getpgrp.o %.c>%.o comp/getpgrp.c getpgrp
prev comp/getpgrp.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Istd -c comp/getpgrp.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -c
comp/getpgrp.c
done getpgrp.o generated
make setpgid.o
make comp/setpgid.c
@@ -3270,11 +3253,11 @@
done wc.o generated
make basename.o
make comp/basename.c
-prev ast_common.h implicit
+prev include/ast_std.h implicit
done comp/basename.c
meta basename.o %.c>%.o comp/basename.c basename
prev comp/basename.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Istd -c comp/basename.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -c
comp/basename.c
done basename.o generated
make closelog.o
make comp/closelog.c
@@ -3291,11 +3274,11 @@
done closelog.o generated
make dirname.o
make comp/dirname.c
-prev ast_common.h implicit
+prev include/ast_std.h implicit
done comp/dirname.c
meta dirname.o %.c>%.o comp/dirname.c dirname
prev comp/dirname.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Istd -c comp/dirname.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iinclude -Istd -c
comp/dirname.c
done dirname.o generated
make fmtmsglib.o
make comp/fmtmsglib.c
@@ -3946,14 +3929,6 @@
prev sfio/sfgetr.c
exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iport -Isfio -Iinclude
-Istd -I${INSTALLROOT}/include -D_PACKAGE_ast -c sfio/sfgetr.c
done sfgetr.o generated
-make sfieee.o
-make sfio/sfieee.c
-prev sfio/sfhdr.h implicit
-done sfio/sfieee.c
-meta sfieee.o %.c>%.o sfio/sfieee.c sfieee
-prev sfio/sfieee.c
-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icomp -Iport -Isfio -Iinclude
-Istd -I${INSTALLROOT}/include -D_PACKAGE_ast -c sfio/sfieee.c
-done sfieee.o generated
make sfllen.o
make sfio/sfllen.c
prev sfio/sfhdr.h implicit
@@ -5780,12 +5755,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
liberror.o libevent.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 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
-exec - ${AR} cr libast.a 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 dtrestore.o
-exec - ${AR} cr libast.a 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 sfieee.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 - ${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 - (ranlib libast.a) >/dev/null 2>&1 || true
done libast.a generated
done ast virtual
@@ -6279,14 +6254,6 @@
exec - else mv 1.${COTEMP}.x ${INSTALLROOT}/include/ast/hashpart.h
exec - fi
done ${INSTALLROOT}/include/ast/hashpart.h generated
-make ${INSTALLROOT}/include/ast/int.h
-prev include/int.h
-exec - proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o
since=1985,author=gsf+dgk+kpv' include/int.h > 1.${COTEMP}.x
-exec - if cmp 2>/dev/null -s ${INSTALLROOT}/include/ast/int.h
1.${COTEMP}.x
-exec - then rm -f 1.${COTEMP}.x
-exec - else mv 1.${COTEMP}.x ${INSTALLROOT}/include/ast/int.h
-exec - fi
-done ${INSTALLROOT}/include/ast/int.h generated
make ${INSTALLROOT}/include/ast/lc.h
prev lc.h
exec - proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o
since=1985,author=gsf+dgk+kpv' lc.h > 1.${COTEMP}.x
diff -r -N -u ksh93_2007_01_11/src/lib/libast/man/astsa.3
ksh93_2007_03_28/src/lib/libast/man/astsa.3
--- ksh93_2007_01_11/src/lib/libast/man/astsa.3 2004-11-04 04:45:04.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libast/man/astsa.3 2007-01-18 18:11:34.000000000
+0100
@@ -21,14 +21,14 @@
.de RL
.aF 1 5 "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
..
-.de Ex \" start example
+.de EX \" start example
.ta 1i 2i 3i 4i 5i 6i
.PP
.PD 0
.ft 5
.nf
..
-.de Ee \" end example
+.de EE \" end example
.fi
.ft
.PD
@@ -47,15 +47,15 @@
.ta 1.0i 2.0i 3.0i 4.0i 5.0i
.TH AST 3
.SH NAME
-astsa \- stanadlone libast support
+astsa \- standalone libast support
.SH SYNOPSIS
-.Ex
+.EX
#include <ast.h>
#include <ccode.h>
#include <error.h>
#include <option.h>
#include <stk.h>
-.Ee
+.EE
.SH DESCRIPTION
.B astsa
is a standalone subset of
diff -r -N -u ksh93_2007_01_11/src/lib/libast/misc/error.c
ksh93_2007_03_28/src/lib/libast/misc/error.c
--- ksh93_2007_01_11/src/lib/libast/misc/error.c 2007-01-06
11:37:57.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/misc/error.c 2007-03-23
03:53:27.000000000 +0100
@@ -44,21 +44,39 @@
#include <times.h>
#include <regex.h>
+/*
+ * 2007-03-19 move error_info from _error_info_ to (*_error_infop_)
+ * to allow future Error_info_t growth
+ * by 2009 _error_info_ can be static
+ */
+
+#if _BLD_ast && defined(__EXPORT__)
+#define extern extern __EXPORT__
+#endif
+
+extern Error_info_t _error_info_;
+
Error_info_t _error_info_ =
{
2, exit, write,
0,0,0,0,0,0,0,0,
- 0,
- 0,
- 0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,
- 0,
+ 0, /* version */
+ 0, /* auxilliary */
+ 0,0,0,0,0,0,0, /* top of old context stack */
+ 0,0,0,0,0,0,0, /* old empty context */
+ 0, /* time */
translate,
- 0
+ 0 /* catalog */
};
+#undef extern
+
__EXTERN__(Error_info_t, _error_info_);
+__EXTERN__(Error_info_t*, _error_infop_);
+
+Error_info_t* _error_infop_ = &_error_info_;
+
/*
* these should probably be in error_info
*/
@@ -280,11 +298,13 @@
* print error context FIFO stack
*/
+#define CONTEXT(f,p)
(((f)&ERROR_PUSH)?((Error_context_t*)&(p)->context->context):((Error_context_t*)(p)))
+
static void
context(register Sfio_t* sp, register Error_context_t* cp)
{
if (cp->context)
- context(sp, cp->context);
+ context(sp, CONTEXT(cp->flags, cp->context));
if (!(cp->flags & ERROR_SILENT))
{
if (cp->id)
@@ -431,7 +451,7 @@
if (level && !(flags & ERROR_NOID))
{
if (error_info.context && level > 0)
- context(stkstd, error_info.context);
+ context(stkstd,
CONTEXT(error_info.flags, error_info.context));
if (file)
print(stkstd, file, (flags &
ERROR_LIBRARY) ? " " : ": ");
if (flags & (ERROR_CATALOG|ERROR_LIBRARY))
@@ -459,8 +479,8 @@
#if !_PACKAGE_astsa
if (error_info.time)
{
- if (error_info.time == 1 || (d = times(&us)) <
error_info.time)
- d = error_info.time = times(&us);
+ if ((d = times(&us)) < error_info.time ||
error_info.time == 1)
+ error_info.time = d;
sfprintf(stkstd, " %05lu.%05lu.%05lu ", d -
error_info.time, (unsigned long)us.tms_utime, (unsigned long)us.tms_stime);
}
#endif
@@ -594,3 +614,48 @@
if (level >= ERROR_FATAL)
(*error_info.exit)(level - ERROR_FATAL + 1);
}
+
+/*
+ * error_info context control
+ */
+
+#include <error.h>
+
+static Error_info_t* freecontext;
+
+Error_info_t*
+errorctx(Error_info_t* p, int op, int flags)
+{
+ if (op & ERROR_POP)
+ {
+ if (!(_error_infop_ = p->context))
+ _error_infop_ = &_error_info_;
+ if (op & ERROR_FREE)
+ {
+ p->context = freecontext;
+ freecontext = p;
+ }
+ p = _error_infop_;
+ }
+ else
+ {
+ if (!p)
+ {
+ if (p = freecontext)
+ freecontext = freecontext->context;
+ else if (!(p = newof(0, Error_info_t, 1, 0)))
+ return 0;
+ *p = *_error_infop_;
+ p->errors = p->flags = p->line = p->warnings = 0;
+ p->catalog = p->file = 0;
+ }
+ if (op & ERROR_PUSH)
+ {
+ p->flags = flags;
+ p->context = _error_infop_;
+ _error_infop_ = p;
+ }
+ p->flags |= ERROR_PUSH;
+ }
+ return p;
+}
diff -r -N -u ksh93_2007_01_11/src/lib/libast/misc/errorx.c
ksh93_2007_03_28/src/lib/libast/misc/errorx.c
--- ksh93_2007_01_11/src/lib/libast/misc/errorx.c 2001-03-16
17:03:13.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/misc/errorx.c 2007-03-22
05:12:20.000000000 +0100
@@ -33,16 +33,15 @@
{
char* s;
+ error_info.translate = translate; /* 2007-03-19 OLD_Error_info_t
workaround */
if (ERROR_translating())
{
if (!loc)
loc = (const char*)locales[AST_LC_MESSAGES]->code;
if (!cat)
- {
cat = (const char*)error_info.catalog;
- if (!cmd)
- cmd = (const char*)error_info.id;
- }
+ if (!cmd)
+ cmd = (const char*)error_info.id;
if (s = (*error_info.translate)(loc, cmd, cat, msg))
return s;
}
diff -r -N -u ksh93_2007_01_11/src/lib/libast/misc/fastfind.c
ksh93_2007_03_28/src/lib/libast/misc/fastfind.c
--- ksh93_2007_01_11/src/lib/libast/misc/fastfind.c 2004-10-18
19:17:44.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/misc/fastfind.c 2007-02-14
07:46:22.000000000 +0100
@@ -772,7 +772,7 @@
return 0;
if (fp->decode.swap >= 0)
{
- c = (_ast_int4_t)((w[0] << 24) | (w[1]
<< 16) | (w[2] << 8) | w[3]);
+ c = (int32_t)((w[0] << 24) | (w[1] <<
16) | (w[2] << 8) | w[3]);
if (!fp->decode.swap)
{
/*
@@ -788,7 +788,7 @@
m = c;
if (m < 0)
m = -m;
- n = (_ast_int4_t)((w[3] << 24)
| (w[2] << 16) | (w[1] << 8) | w[0]);
+ n = (int32_t)((w[3] << 24) |
(w[2] << 16) | (w[1] << 8) | w[0]);
if (n < 0)
n = -n;
if (m < n)
@@ -796,12 +796,12 @@
else
{
fp->decode.swap = -1;
- c = (_ast_int4_t)((w[3]
<< 24) | (w[2] << 16) | (w[1] << 8) | w[0]);
+ c = (int32_t)((w[3] <<
24) | (w[2] << 16) | (w[1] << 8) | w[0]);
}
}
}
else
- c = (_ast_int4_t)((w[3] << 24) | (w[2]
<< 16) | (w[1] << 8) | w[0]);
+ c = (int32_t)((w[3] << 24) | (w[2] <<
16) | (w[1] << 8) | w[0]);
}
fp->decode.count += c - FF_OFF;
for (p = fp->decode.path + fp->decode.count; (c =
sfgetc(fp->fp)) > FF_ESC;)
diff -r -N -u ksh93_2007_01_11/src/lib/libast/misc/optget.c
ksh93_2007_03_28/src/lib/libast/misc/optget.c
--- ksh93_2007_01_11/src/lib/libast/misc/optget.c 2006-10-13
06:41:13.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/misc/optget.c 2007-03-28
08:13:50.000000000 +0200
@@ -45,30 +45,32 @@
#define OPT_MARGIN 10 /* default help text margin */
#define OPT_USAGE 7 /* usage continuation indent */
-#define OPT_flag 0001 /* flag ( 0 or 1 ) */
-#define OPT_hidden 0002 /* remaining are hidden */
-#define OPT_ignorecase 0004 /* arg match ignores case */
-#define OPT_invert 0010 /* flag inverts long sense */
-#define OPT_listof 0020 /* arg is ' ' or ',' list */
-#define OPT_number 0040 /* arg is strtonll() number */
-#define OPT_oneof 0100 /* arg may be set once */
-#define OPT_optional 0200 /* arg is optional */
-#define OPT_string 0400 /* arg is string */
+#define OPT_flag 0x001 /* flag ( 0 or 1 ) */
+#define OPT_hidden 0x002 /* remaining are hidden */
+#define OPT_ignorecase 0x004 /* arg match ignores case */
+#define OPT_invert 0x008 /* flag inverts long sense */
+#define OPT_listof 0x010 /* arg is ' ' or ',' list */
+#define OPT_minus 0x021 /* '-' is an option flag */
+#define OPT_number 0x040 /* arg is strtonll() number */
+#define OPT_oneof 0x080 /* arg may be set once */
+#define OPT_optional 0x100 /* arg is optional */
+#define OPT_string 0x200 /* arg is string */
#define OPT_preformat 0001 /* output preformat string */
#define OPT_TYPE (OPT_flag|OPT_number|OPT_string)
-#define STYLE_short 0 /* [default] short usage */
-#define STYLE_long 1 /* long usage */
-#define STYLE_match 2 /* long description of matches */
-#define STYLE_options 3 /* short and long descriptions */
-#define STYLE_man 4 /* pretty details */
-#define STYLE_html 5 /* html details */
-#define STYLE_nroff 6 /* nroff details */
-#define STYLE_api 7 /* program details */
-#define STYLE_keys 8 /* translation key strings */
-#define STYLE_usage 9 /* escaped usage string */
+#define STYLE_posix 0 /* posix getopt usage */
+#define STYLE_short 1 /* [default] short usage */
+#define STYLE_long 2 /* long usage */
+#define STYLE_match 3 /* long description of matches */
+#define STYLE_options 4 /* short and long descriptions */
+#define STYLE_man 5 /* pretty details */
+#define STYLE_html 6 /* html details */
+#define STYLE_nroff 7 /* nroff details */
+#define STYLE_api 8 /* program details */
+#define STYLE_keys 9 /* translation key strings */
+#define STYLE_usage 10 /* escaped usage string */
#define FONT_BOLD 1
#define FONT_ITALIC 2
@@ -222,6 +224,8 @@
Z("List detailed info in nroff."),
C("options"), "?options", STYLE_options,
Z("List short and long option details."),
+ C("posix"), "?posix", STYLE_posix,
+ Z("List posix getopt usage."),
C("short"), "?short", STYLE_short,
Z("List short option usage."),
C("usage"), "?usage", STYLE_usage,
@@ -320,10 +324,28 @@
static Optstate_t state;
-Opt_t opt_info = { 0,0,0,0,0,0,0,{0},{0},0,0,0,{0},{0},&state
};
+/*
+ * 2007-03-19 move opt_info from _opt_info_ to (*_opt_data_)
+ * to allow future Opt_t growth
+ * by 2009 _opt_info_ can be static
+ */
+
+#if _BLD_ast && defined(__EXPORT__)
+#define extern extern __EXPORT__
+#endif
+
+extern Opt_t _opt_info_;
+
+Opt_t _opt_info_ = { 0,0,0,0,0,0,0,{0},{0},0,0,0,{0},{0},&state };
+
+#undef extern
__EXTERN__(Opt_t, _opt_info_);
+__EXTERN__(Opt_t*, _opt_infop_);
+
+Opt_t* _opt_infop_ = &_opt_info_;
+
#if _BLD_DEBUG
/*
@@ -542,8 +564,8 @@
w = skip(t, ':', '?', 0, 1, 0, 0, version);
w = sfprints("%-.*s", w - t, t);
x = T(error_info.id, catalog, w);
- if (x != w)
- break;
+ if (x == w)
+ continue;
}
x = T(NiL, ID, t);
if (x == t)
@@ -809,8 +831,6 @@
else
p->catalog = ID;
}
- if (!error_info.catalog)
- error_info.catalog = p->catalog;
s = p->oopts;
if (*s == ':')
s++;
@@ -819,6 +839,17 @@
s++;
p->flags |= OPT_plus;
}
+ if (*s != '[')
+ for (t = s, a = 0; *t; t++)
+ if (!a && *t == '-')
+ {
+ p->flags |= OPT_minus;
+ break;
+ }
+ else if (*t == '[')
+ a++;
+ else if (*t == ']')
+ a--;
if (!p->version && (t = strchr(s, '(')) && strchr(t, ')') &&
(opt_info.state->cp || (opt_info.state->cp = sfstropen())))
{
/*
@@ -880,6 +911,7 @@
return fonts[f].nroff[set];
case STYLE_short:
case STYLE_long:
+ case STYLE_posix:
case STYLE_api:
break;
default:
@@ -2098,6 +2130,8 @@
for (q = o; q < e; q++)
if (!(q->flags & OPT_ignore) && !streq(q->catalog,
o->catalog))
o = q;
+ /*FALLTHROUGH*/
+ case STYLE_posix:
sfputc(mp, '\f');
break;
default:
@@ -2463,7 +2497,7 @@
sp_body = 0;
}
}
- else if (style <= STYLE_short && prefix < 2)
+ else if (style == STYLE_short && prefix < 2)
style = STYLE_long;
if (*p == ':')
p++;
@@ -2638,7 +2672,7 @@
f = *s;
}
re = p;
- if (style == STYLE_short)
+ if (style <= STYLE_short)
{
if (!z && !f)
z = -1;
@@ -2720,6 +2754,12 @@
p++;
continue;
}
+ else if (*p == '\\' && style==STYLE_posix)
+ {
+ if (*++p)
+ p++;
+ continue;
+ }
else
{
f = *p++;
@@ -2731,7 +2771,7 @@
{
if (style == STYLE_long || prefix < 2 ||
(q->flags & OPT_long))
f = 0;
- else if (style == STYLE_short)
+ else if (style <= STYLE_short)
w = 0;
if (!f && !w)
z = -1;
@@ -2786,9 +2826,9 @@
a |= OPT_flag;
if (!z)
{
- if (style == STYLE_short && !y && !mutex)
+ if (style <= STYLE_short && !y && !mutex ||
style == STYLE_posix)
{
- if (!sfstrtell(sp))
+ if (style != STYLE_posix &&
!sfstrtell(sp))
{
sfputc(sp, '[');
if (sp == sp_plus)
@@ -2801,6 +2841,8 @@
for (c = 0; c < sl; c++)
if (s[c] != '|')
sfputc(sp,
s[c]);
+ if (style == STYLE_posix && y)
+ sfputc(sp, ':');
}
else
{
@@ -2906,7 +2948,14 @@
sfputc(sp_body, '-');
sfputr(sp_body,
font(FONT_BOLD, style, 1), -1);
if (!sl)
+ {
sfputc(sp_body,
f);
+ if (f == '-' &&
y)
+ {
+ y = 0;
+
sfputr(sp_body, C("long-option[=value]"), -1);
+ }
+ }
else
sfwrite(sp_body, s, sl);
sfputr(sp_body,
font(FONT_BOLD, style, 0), -1);
@@ -3050,7 +3099,7 @@
return opt_info.msg = p;
}
sp = sp_text;
- if (sfstrtell(sp))
+ if (sfstrtell(sp) && style != STYLE_posix)
sfputc(sp, ']');
if (style == STYLE_nroff)
{
@@ -3189,7 +3238,7 @@
sfclose(sp_body);
sp_body = 0;
}
- if (x)
+ if (x && style != STYLE_posix)
args(sp, x, xl, flags, style, sp_info, version, catalog);
if (sp_info)
{
@@ -3527,10 +3576,10 @@
* 0x.* or <base>#* for alternate bases
*/
-static _ast_intmax_t
+static intmax_t
optnumber(const char* s, char** t, int* e)
{
- _ast_intmax_t n;
+ intmax_t n;
int oerrno;
while (*s == '0' && isdigit(*(s + 1)))
@@ -3707,7 +3756,21 @@
Optcache_t* pcache;
Optpass_t* pass;
- opt_info.state = &state; /* not initialized in some dll's! */
+#if !_YOU_FIGURED_OUT_HOW_TO_GET_ALL_DLLS_TO_DO_THIS_
+ /*
+ * these are not initialized by all dlls!
+ */
+
+ extern Error_info_t _error_info_;
+ extern Opt_t _opt_info_;
+
+ if (!_error_infop_)
+ _error_infop_ = &_error_info_;
+ if (!_opt_infop_)
+ _opt_infop_ = &_opt_info_;
+ if (!opt_info.state)
+ opt_info.state = &state;
+#endif
if (!oopts)
return 0;
opt_info.state->pindex = opt_info.index;
@@ -3768,6 +3831,8 @@
version = pass->version;
if (!(xp = opt_info.state->xp) || (catalog = pass->catalog) &&
!X(catalog))
catalog = 0;
+ else /* if (!error_info.catalog) */
+ error_info.catalog = catalog;
again:
psp = 0;
@@ -3837,12 +3902,23 @@
opt_info.index++;
return 0;
}
+ if (version || *s == '?' || !(pass->flags &
OPT_minus))
+ {
+ /*
+ * long with double prefix
+ */
- /*
- * long with double prefix
- */
+ n = 2;
+ }
+ else
+ {
+ /*
+ * short option char '-'
+ */
- n = 2;
+ s--;
+ n = 1;
+ }
}
else if (prefix == 1 && *s != '?')
{
@@ -5086,7 +5162,7 @@
if ((c == '?' || c == ':') && (opt_info.arg[0] == '-' &&
opt_info.arg[1] == '-'))
opt_info.arg += 2;
s = opt_info.name;
- if (*s++ == '-' && *s++ == '-')
+ if (*s++ == '-' && *s++ == '-' && *s)
{
e = opt_info.name;
while (*e++ = *s++);
diff -r -N -u ksh93_2007_01_11/src/lib/libast/misc/translate.c
ksh93_2007_03_28/src/lib/libast/misc/translate.c
--- ksh93_2007_01_11/src/lib/libast/misc/translate.c 2006-10-17
09:32:43.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/misc/translate.c 2007-03-21
18:56:36.000000000 +0100
@@ -288,6 +288,7 @@
translate(const char* loc, const char* cmd, const char* cat, const char* msg)
{
register char* r;
+ char* t;
int p;
int oerrno;
Catalog_t* cp;
@@ -302,6 +303,8 @@
if (!cmd && !cat)
goto done;
+ if (cmd && (t = strrchr(cmd, '/')))
+ cmd = (const char*)(t + 1);
/*
* initialize the catalogs dictionary
diff -r -N -u ksh93_2007_01_11/src/lib/libast/port/astconf.c
ksh93_2007_03_28/src/lib/libast/port/astconf.c
--- ksh93_2007_01_11/src/lib/libast/port/astconf.c 2006-11-18
13:08:38.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/port/astconf.c 2007-02-14
07:47:08.000000000 +0100
@@ -589,7 +589,7 @@
{
register char* s;
register char* e;
- _ast_intmax_t v;
+ intmax_t v;
/*
* _PC_PATH_ATTRIBUTES is a bitmap for 'a' to 'z'
@@ -864,7 +864,8 @@
int i;
int olderrno;
int drop;
- _ast_intmax_t v;
+ int defined;
+ intmax_t v;
char buf[PATH_MAX];
char flg[16];
@@ -938,6 +939,7 @@
goto bad;
}
s = 0;
+ defined = 1;
switch (i = (p->op < 0 || (flags & CONF_MINMAX) && (p->flags &
CONF_MINMAX_DEF)) ? 0 : p->call)
{
case CONF_confstr:
@@ -945,6 +947,7 @@
#if _lib_confstr
if (!(v = confstr(p->op, buf, sizeof(buf))))
{
+ defined = 0;
v = -1;
errno = EINVAL;
}
@@ -953,6 +956,8 @@
buf[sizeof(buf) - 1] = 0;
s = (const char*)buf;
}
+ else
+ defined = 0;
break;
#else
goto predef;
@@ -960,7 +965,8 @@
case CONF_pathconf:
call = "pathconf";
#if _lib_pathconf
- v = pathconf(path, p->op);
+ if ((v = pathconf(path, p->op)) < 0)
+ defined = 0;
break;
#else
goto predef;
@@ -968,7 +974,8 @@
case CONF_sysconf:
call = "sysconf";
#if _lib_sysconf
- v = sysconf(p->op);
+ if ((v = sysconf(p->op)) < 0)
+ defined = 0;
break;
#else
goto predef;
@@ -981,6 +988,8 @@
buf[sizeof(buf) - 1] = 0;
s = (const char*)buf;
}
+ else
+ defined = 0;
break;
#else
goto predef;
@@ -989,6 +998,7 @@
call = "synthesis";
errno = EINVAL;
v = -1;
+ defined = 0;
break;
case 0:
call = 0;
@@ -1007,30 +1017,28 @@
break;
}
}
- if (!(listflags & ASTCONF_system))
+ if (flags & CONF_MINMAX)
{
- if (flags & CONF_MINMAX)
- {
- if (p->flags & CONF_MINMAX_DEF)
- {
- v = p->minmax.number;
- s = p->minmax.string;
- break;
- }
- }
- else if (p->flags & CONF_LIMIT_DEF)
+ if ((p->flags & CONF_MINMAX_DEF) && (!(listflags &
ASTCONF_system) || !(p->flags & CONF_DEFER_MM)))
{
- v = p->limit.number;
- s = p->limit.string;
+ v = p->minmax.number;
+ s = p->minmax.string;
break;
}
}
+ else if ((p->flags & CONF_LIMIT_DEF) && (!(listflags &
ASTCONF_system) || !(p->flags & CONF_DEFER_CALL)))
+ {
+ v = p->limit.number;
+ s = p->limit.string;
+ break;
+ }
flags &= ~(CONF_LIMIT_DEF|CONF_MINMAX_DEF);
v = -1;
errno = EINVAL;
+ defined = 0;
break;
}
- if (v == -1)
+ if (!defined)
{
if (!errno)
{
@@ -1109,12 +1117,14 @@
}
if (flags & CONF_ERROR)
sfprintf(sp, "error");
- else if (v != -1)
+ else if (defined)
{
if (s)
sfprintf(sp, "%s", (listflags & ASTCONF_quote)
? fmtquote(s, "\"", "\"", strlen(s), FMT_SHELL) : s);
- else
+ else if (v != -1)
sfprintf(sp, "%I*d", sizeof(v), v);
+ else
+ sfprintf(sp, "%I*u", sizeof(v), v);
}
sfprintf(sp, "\n");
}
@@ -1137,12 +1147,14 @@
}
if (flags & CONF_ERROR)
sfprintf(sp, "error");
- else if (v != -1)
+ else if (defined)
{
if (s)
sfprintf(sp, "%s", (listflags &
ASTCONF_quote) ? fmtquote(s, "\"", "\"", strlen(s), FMT_SHELL) : s);
- else
+ else if (v != -1)
sfprintf(sp, "%I*d", sizeof(v), v);
+ else
+ sfprintf(sp, "%I*u", sizeof(v), v);
}
else
sfprintf(sp, "undefined");
@@ -1157,16 +1169,9 @@
if (p->section > 1)
sfprintf(sp, "%d", p->section);
sfprintf(sp, "_%s=", (listflags & ASTCONF_lower) ?
fmtlower(p->name) : p->name);
- if (p->flags & CONF_MINMAX_DEF)
- {
- if (v == -1 && (v = p->minmax.number) == -1 &&
((p->flags & CONF_FEATURE) || !(p->flags & (CONF_LIMIT|CONF_MINMAX))))
- flags &= ~CONF_MINMAX_DEF;
- else
- flags |= CONF_MINMAX_DEF;
- }
if (v != -1)
sfprintf(sp, "%I*d", sizeof(v), v);
- else if (flags & CONF_MINMAX_DEF)
+ else if (defined)
sfprintf(sp, "%I*u", sizeof(v), v);
else
sfprintf(sp, "undefined");
diff -r -N -u ksh93_2007_01_11/src/lib/libast/regex/regdecomp.c
ksh93_2007_03_28/src/lib/libast/regex/regdecomp.c
--- ksh93_2007_01_11/src/lib/libast/regex/regdecomp.c 2006-09-28
16:00:07.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/regex/regdecomp.c 2007-03-21
15:12:52.000000000 +0100
@@ -28,11 +28,11 @@
#include "reglib.h"
#undef ismeta
-#define ismeta(c,t,e) (state.magic[c] && state.magic[c][(t)+(e)] >= T_META)
-#define meta(f,c,t,e) do { if (ismeta(c,t,e)) sfputc(f, '\\'); sfputc(f, c);
} while (0)
+#define ismeta(c,t,e,d) (state.magic[c] && state.magic[c][(t)+(e)] >=
T_META || (c) == (d))
+#define meta(f,c,t,e,d) do { if (ismeta(c,t,e,d)) sfputc(f, '\\');
sfputc(f, c); } while (0)
static void
-detrie(Trie_node_t* x, Sfio_t* sp, char* b, char* p, char* e)
+detrie(Trie_node_t* x, Sfio_t* sp, char* b, char* p, char* e, int delimiter)
{
register Trie_node_t* y;
char* o;
@@ -55,7 +55,7 @@
sfputc(sp, '<');
sfwrite(sp, b, p - b);
sfputc(sp, '>');
- detrie(y, sp, b, p, e);
+ detrie(y, sp, b, p, e, delimiter);
}
if (x->end && x->son)
{
@@ -69,12 +69,16 @@
}
static int
-decomp(register Rex_t* e, Sfio_t* sp, int type)
+decomp(register Rex_t* e, Sfio_t* sp, int type, int delimiter, regflags_t
flags)
{
Rex_t* q;
unsigned char* s;
unsigned char* t;
int c;
+ int d;
+ int cb;
+ int cd;
+ int cr;
int ib;
int ie;
int nb;
@@ -87,10 +91,10 @@
switch (e->type)
{
case REX_ALT:
- if (decomp(e->re.group.expr.binary.left, sp, type))
+ if (decomp(e->re.group.expr.binary.left, sp, type,
delimiter, flags))
return 1;
sfputc(sp, '|');
- if (e->re.group.expr.binary.right &&
decomp(e->re.group.expr.binary.right, sp, type))
+ if (e->re.group.expr.binary.right &&
decomp(e->re.group.expr.binary.right, sp, type, delimiter, flags))
return 1;
break;
case REX_BACK:
@@ -105,10 +109,10 @@
sfputc(sp, '$');
break;
case REX_WBEG:
- meta(sp, '<', type, 1);
+ meta(sp, '<', type, 1, delimiter);
break;
case REX_WEND:
- meta(sp, '<', type, 1);
+ meta(sp, '<', type, 1, delimiter);
break;
case REX_WORD:
sfprintf(sp, "\\w");
@@ -140,18 +144,25 @@
switch (e->type)
{
case REX_REP:
- if (decomp(e->re.group.expr.rex, sp, type))
+ if (decomp(e->re.group.expr.rex, sp, type,
delimiter, flags))
return 1;
break;
case REX_CLASS:
sfputc(sp, '[');
nb = ne = ib = ie = -2;
+ cb = cd = cr = 0;
s = nc;
t = ic;
for (c = 0; c <= UCHAR_MAX; c++)
if (settst(e->re.charclass, c))
{
- if (nb < 0)
+ if (c == ']')
+ cb = 1;
+ else if (c == '-')
+ cr = 1;
+ else if (c == delimiter)
+ cd = 1;
+ else if (nb < 0)
ne = nb = c;
else if (ne == (c - 1))
ne = c;
@@ -170,7 +181,13 @@
}
else
{
- if (ib < 0)
+ if (c == ']')
+ cb = -1;
+ else if (c == '-')
+ cr = -1;
+ else if (c == delimiter)
+ cd = -1;
+ else if (ib < 0)
ie = ib = c;
else if (ie == (c - 1))
ie = c;
@@ -208,20 +225,44 @@
if ((t - ic + 1) < (s - nc + (nc[0] == '^')))
{
sfputc(sp, '^');
+ if (cb < 0)
+ sfputc(sp, ']');
+ if (cr < 0)
+ sfputc(sp, '-');
+ if (cd < 0)
+ {
+ if (flags & REG_ESCAPE)
+ sfputc(sp, '\\');
+ sfputc(sp, delimiter);
+ }
sfwrite(sp, ic, t - ic);
}
else
{
+ if (cb > 0)
+ sfputc(sp, ']');
+ if (cr > 0)
+ sfputc(sp, '-');
+ if (cd > 0)
+ {
+ if (flags & REG_ESCAPE)
+ sfputc(sp, '\\');
+ sfputc(sp, delimiter);
+ }
if (nc[0] == '^')
- sfputc(sp, '\\');
- sfwrite(sp, nc, s - nc);
+ {
+ sfwrite(sp, nc + 1, s - nc - 1);
+ sfputc(sp, '^');
+ }
+ else
+ sfwrite(sp, nc, s - nc);
}
sfputc(sp, ']');
break;
case REX_COLL_CLASS:
break;
case REX_ONECHAR:
- meta(sp, e->re.onechar, type, 1);
+ meta(sp, e->re.onechar, type, 0, delimiter);
break;
case REX_DOT:
sfputc(sp, '.');
@@ -233,33 +274,34 @@
{
if (!e->lo)
sfputc(sp, '*');
- else if (e->lo == 1 && ismeta('+',
type, 0))
- meta(sp, '+', type, 1);
+ else if (e->lo == 1 && ismeta('+',
type, 0, delimiter))
+ meta(sp, '+', type, 1,
delimiter);
else
{
- meta(sp, '{', type, 1);
+ meta(sp, '{', type, 1,
delimiter);
sfprintf(sp, "%d,", e->lo);
- meta(sp, '}', type, 1);
+ meta(sp, '}', type, 1,
delimiter);
}
}
- else if (e->hi != 1 || e->lo == 0 &&
!ismeta('?', type, 0))
+ else if (e->hi != 1 || e->lo == 0 &&
!ismeta('?', type, 0, delimiter))
{
- meta(sp, '{', type, 1);
+ meta(sp, '{', type, 1, delimiter);
sfprintf(sp, "%d,%d", e->lo, e->hi);
- meta(sp, '}', type, 1);
+ meta(sp, '}', type, 1, delimiter);
}
else if (e->lo == 0)
- meta(sp, '?', type, 1);
+ meta(sp, '?', type, 1, delimiter);
}
else if (c)
sfputc(sp, c);
break;
case REX_STRING:
+ case REX_KMP:
t = (s = e->re.string.base) + e->re.string.size;
while (s < t)
{
c = *s++;
- meta(sp, c, type, 0);
+ meta(sp, c, type, 0, delimiter);
}
break;
case REX_TRIE:
@@ -273,13 +315,13 @@
sfputc(sp, '|');
else
ib = 1;
- detrie(e->re.trie.root[c], sp, pfx,
pfx, &pfx[sizeof(pfx)]);
+ detrie(e->re.trie.root[c], sp, pfx,
pfx, &pfx[sizeof(pfx)], delimiter);
}
break;
case REX_NEG:
if (type >= SRE)
sfprintf(sp, "!(");
- if (decomp(e->re.group.expr.rex, sp, type))
+ if (decomp(e->re.group.expr.rex, sp, type, delimiter,
flags))
return 1;
if (type >= SRE)
sfputc(sp, ')');
@@ -287,52 +329,57 @@
sfputc(sp, '!');
break;
case REX_CONJ:
- if (decomp(e->re.group.expr.binary.left, sp, type))
+ if (decomp(e->re.group.expr.binary.left, sp, type,
delimiter, flags))
return 1;
sfputc(sp, '&');
- if (decomp(e->re.group.expr.binary.right, sp, type))
+ if (decomp(e->re.group.expr.binary.right, sp, type,
delimiter, flags))
return 1;
break;
case REX_GROUP:
if (type >= SRE)
sfputc(sp, '@');
- meta(sp, '(', type, 1);
- if (decomp(e->re.group.expr.rex, sp, type))
+ meta(sp, '(', type, 1, delimiter);
+ if (decomp(e->re.group.expr.rex, sp, type, delimiter,
flags))
return 1;
- meta(sp, ')', type, 1);
+ meta(sp, ')', type, 1, delimiter);
break;
case REX_GROUP_AHEAD:
case REX_GROUP_AHEAD_NOT:
case REX_GROUP_BEHIND:
case REX_GROUP_BEHIND_NOT:
- meta(sp, '(', type, 1);
+ meta(sp, '(', type, 1, delimiter);
sfputc(sp, '?');
- if (decomp(e->re.group.expr.rex, sp, type))
+ if (decomp(e->re.group.expr.rex, sp, type, delimiter,
flags))
return 1;
- meta(sp, ')', type, 1);
+ meta(sp, ')', type, 1, delimiter);
break;
case REX_GROUP_COND:
- meta(sp, '(', type, 1);
+ meta(sp, '(', type, 1, delimiter);
sfputc(sp, '?');
- if (e->re.group.expr.binary.left &&
decomp(e->re.group.expr.binary.left, sp, type))
+ if (e->re.group.expr.binary.left &&
decomp(e->re.group.expr.binary.left, sp, type, delimiter, flags))
return 1;
if (q = e->re.group.expr.binary.right)
{
sfputc(sp, ':');
- if (q->re.group.expr.binary.left &&
decomp(q->re.group.expr.binary.left, sp, type))
+ if (q->re.group.expr.binary.left &&
decomp(q->re.group.expr.binary.left, sp, type, delimiter, flags))
return 1;
sfputc(sp, ':');
- if (q->re.group.expr.binary.right &&
decomp(q->re.group.expr.binary.right, sp, type))
+ if (q->re.group.expr.binary.right &&
decomp(q->re.group.expr.binary.right, sp, type, delimiter, flags))
return 1;
}
- meta(sp, ')', type, 1);
+ meta(sp, ')', type, 1, delimiter);
break;
case REX_GROUP_CUT:
- meta(sp, '(', type, 1);
+ meta(sp, '(', type, 1, delimiter);
sfputc(sp, '?');
- if (decomp(e->re.group.expr.rex, sp, type))
+ if (decomp(e->re.group.expr.rex, sp, type, delimiter,
flags))
return 1;
- meta(sp, ')', type, 1);
+ meta(sp, ')', type, 1, delimiter);
+ break;
+ case REX_BM:
+ break;
+ default:
+ sfprintf(sp, "<ERROR:REX_%d>", e->type);
break;
}
} while (e = e->next);
@@ -349,6 +396,7 @@
Sfio_t* sp;
char* s;
int type;
+ int delimiter;
size_t r;
if (!(sp = sfstropen()))
@@ -374,14 +422,26 @@
type = KRE;
break;
}
- if (decomp(p->env->rex, sp, type))
+ if (flags & REG_DELIMITED)
+ {
+ delimiter = '/';
+ sfputc(sp, delimiter);
+ }
+ else
+ delimiter = 0;
+ if (decomp(p->env->rex, sp, type, delimiter, flags))
r = 0;
- else if ((r = sfstrtell(sp) + 1) <= n)
+ else
{
- if (!(s = sfstruse(sp)))
- r = 0;
- else
- memcpy(buf, s, r);
+ if (delimiter)
+ sfputc(sp, delimiter);
+ if ((r = sfstrtell(sp) + 1) <= n)
+ {
+ if (!(s = sfstruse(sp)))
+ r = 0;
+ else
+ memcpy(buf, s, r);
+ }
}
sfstrclose(sp);
return r;
diff -r -N -u ksh93_2007_01_11/src/lib/libast/regex/reglib.h
ksh93_2007_03_28/src/lib/libast/regex/reglib.h
--- ksh93_2007_01_11/src/lib/libast/regex/reglib.h 2005-05-27
06:44:05.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/regex/reglib.h 2007-03-21
15:01:33.000000000 +0100
@@ -72,7 +72,7 @@
#define RE_DUP_INF (RE_DUP_MAX+1) /* infinity, for * */
#define BACK_REF_MAX 9
-#define REG_COMP
(REG_DELIMITED|REG_EXTENDED|REG_FIRST|REG_ICASE|REG_NOSUB|REG_NEWLINE|REG_SHELL|REG_AUGMENTED|REG_LEFT|REG_LITERAL|REG_MINIMAL|REG_NULL|REG_RIGHT|REG_LENIENT|REG_MUSTDELIM)
+#define REG_COMP
(REG_DELIMITED|REG_ESCAPE|REG_EXTENDED|REG_FIRST|REG_ICASE|REG_NOSUB|REG_NEWLINE|REG_SHELL|REG_AUGMENTED|REG_LEFT|REG_LITERAL|REG_MINIMAL|REG_NULL|REG_RIGHT|REG_LENIENT|REG_MUSTDELIM)
#define REG_EXEC
(REG_ADVANCE|REG_INVERT|REG_NOTBOL|REG_NOTEOL|REG_STARTEND)
#define REX_NULL 0 /* null string (internal) */
diff -r -N -u ksh93_2007_01_11/src/lib/libast/regex/regnexec.c
ksh93_2007_03_28/src/lib/libast/regex/regnexec.c
--- ksh93_2007_01_11/src/lib/libast/regex/regnexec.c 2005-05-28
17:00:57.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/regex/regnexec.c 2007-03-11
12:41:38.000000000 +0100
@@ -811,6 +811,7 @@
unsigned char* t;
unsigned char* b;
unsigned char* e;
+ char* u;
regmatch_t* o;
Trie_node_t* x;
Rex_t* q;
@@ -1734,8 +1735,9 @@
return NONE;
return parsetrie(env, x, rex, cont, s);
case REX_EXEC:
- e = 0;
- r = (*env->disc->re_execf)(env->regex,
rex->re.exec.data, rex->re.exec.text, rex->re.exec.size, (const char*)s,
env->end - s, (char**)&e, env->disc);
+ u = 0;
+ r = (*env->disc->re_execf)(env->regex,
rex->re.exec.data, rex->re.exec.text, rex->re.exec.size, (const char*)s,
env->end - s, &u, env->disc);
+ e = (unsigned char*)u;
if (e >= s && e <= env->end)
s = e;
switch (r)
diff -r -N -u ksh93_2007_01_11/src/lib/libast/regex/ucs_names.h
ksh93_2007_03_28/src/lib/libast/regex/ucs_names.h
--- ksh93_2007_01_11/src/lib/libast/regex/ucs_names.h 2003-05-18
11:57:23.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/regex/ucs_names.h 2007-02-14
07:47:28.000000000 +0100
@@ -31,8 +31,8 @@
#define UCS_UC 1
#define UCS_LC 2
-typedef unsigned _ast_int2_t Ucs_code_t;
-typedef unsigned _ast_int4_t Ucs_attr_t;
+typedef uint16_t Ucs_code_t;
+typedef uint32_t Ucs_attr_t;
typedef struct Ucs_dat_s
{
diff -r -N -u ksh93_2007_01_11/src/lib/libast/RELEASE
ksh93_2007_03_28/src/lib/libast/RELEASE
--- ksh93_2007_01_11/src/lib/libast/RELEASE 2007-01-11 18:13:07.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libast/RELEASE 2007-03-28 08:15:10.000000000
+0200
@@ -1,3 +1,27 @@
+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 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
+07-02-27 comp/conf.sh: handle native getconf invalid numeric values
+07-02-21 comp/conf.sh,comp/conf.tab: handle SSIZE_MAX vs _POSIX_SSIZE_MAX
+07-02-20 sfio/sfvprintf.c: handle SF_WCWIDTH justification
+07-02-14 features/common: cover <stdint.h>, move to int_(bits)_t
+07-02-14 include/int.h: drop
+07-02-14 include/sfio.h: add SF_WCWIDTH
+07-02-12 comp/conf.sh: fix CONF_LIMIT bug that missed ULONG_MAX etc.
+07-02-12 comp/conf.tab: *LONGLONG* => *LLONG* to match posix
+07-02-12 features/float: *LONGLONG* => *LLONG* to match posix
+07-02-12 port/astconf.c: handle CONF_LIMITS_DEF with no deferral
+07-02-12 stdio/vasprintf.c: add trailing '\0' -- doh
+07-02-04 string/fmtelapsed.c: fix naive multi month/year logic
+07-02-02 misc/optget.c: add --??posix for getopts(1)/getopt(3)
+07-01-26 string/chresc.c: use mbchar()
+07-01-26 misc/optget.c: handle "o:-:" usage for old-style long options
+07-01-22 sfio/sfdisc.c,sfpool.c: handle push on streams with pending peek
+07-01-22 include/sfio.h: mv Sfieee_t to sfio/sfhdr.h
+07-01-17 tm/tmxfmt.c: fix terminating nil logic which clobbered size-1
07-01-11 misc/stk.c: a 2 day marathon bug fix (can we release now dr ek?)
07-01-05 comp/spawnveg.c: posix_spawnattr_setflags(POSIX_SPAWN_SETPGROUP)
07-01-05 misc/error.c: fix multibyte vs. printable logic
diff -r -N -u ksh93_2007_01_11/src/lib/libast/sfio/sfdisc.c
ksh93_2007_03_28/src/lib/libast/sfio/sfdisc.c
--- ksh93_2007_01_11/src/lib/libast/sfio/sfdisc.c 2004-10-29
21:53:16.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/sfio/sfdisc.c 2007-01-26
03:14:48.000000000 +0100
@@ -21,11 +21,88 @@
***********************************************************************/
#include "sfhdr.h"
-/* Set a new discipline for a stream.
+/* Add a new discipline to the discipline stack. Each discipline
+** provides alternative I/O functions that are analogues of the
+** system calls.
+**
+** When the application fills or flushes the stream buffer, data
+** will be processed through discipline functions. A case deserving
+** consideration is stacking a discipline onto a read stream. Each
+** discipline operation implies buffer synchronization so the stream
+** buffer should be empty. However, a read stream representing an
+** unseekable device (eg, a pipe) may not be synchronizable. In that
+** case, any buffered data must then be fed to the new discipline
+** to preserve data processing semantics. This is done by creating
+** a temporary discipline to cache such buffered data and feed
+** them to the new discipline when its readf() asks for new data.
+** Care must then be taken to remove this temporary discipline
+** when it runs out of cached data.
**
** Written by Kiem-Phong Vo
*/
+typedef struct _dccache_s
+{ Sfdisc_t disc;
+ uchar* data;
+ uchar* endb;
+} Dccache_t;
+
+#if __STD_C
+static int _dccaexcept(Sfio_t* f, int type, Void_t* val, Sfdisc_t* disc)
+#else
+static int _dccaexcept(f,type,val,disc)
+Sfio_t* f;
+int type;
+Void_t* val;
+Sfdisc_t* disc;
+#endif
+{
+ if(disc && type == SF_FINAL)
+ free(disc);
+ return 0;
+}
+
+#if __STD_C
+static ssize_t _dccaread(Sfio_t* f, Void_t* buf, size_t size, Sfdisc_t* disc)
+#else
+static ssize_t _dccaread(f, buf, size, disc)
+Sfio_t* f;
+Void_t* buf;
+size_t size;
+Sfdisc_t* disc;
+#endif
+{
+ ssize_t sz;
+ Sfdisc_t *prev;
+ Dccache_t *dcca;
+
+ if(!f) /* bad stream */
+ return -1;
+
+ /* make sure that this is on the discipline stack */
+ for(prev = f->disc; prev; prev = prev->disc)
+ if(prev->disc == disc)
+ break;
+ if(!prev)
+ return -1;
+
+ if(size <= 0) /* nothing to do */
+ return size;
+
+ /* read from available data */
+ dcca = (Dccache_t*)disc;
+ if((sz = dcca->endb - dcca->data) > (ssize_t)size)
+ sz = (ssize_t)size;
+ memcpy(buf, dcca->data, sz);
+
+ if((dcca->data += sz) >= dcca->endb) /* free empty cache */
+ { prev->disc = disc->disc;
+ free(disc);
+ }
+
+ return sz;
+}
+
#if __STD_C
Sfdisc_t* sfdisc(reg Sfio_t* f, reg Sfdisc_t* disc)
#else
@@ -39,6 +116,7 @@
reg Sfwrite_f owritef;
reg Sfseek_f oseekf;
ssize_t n;
+ reg Dccache_t *dcca = NIL(Dccache_t*);
SFMTXSTART(f, NIL(Sfdisc_t*));
@@ -53,34 +131,50 @@
SFLOCK(f,0);
rdisc = NIL(Sfdisc_t*);
+ /* disallow popping while there is cached data */
+ if(!disc && f->disc && f->disc->disc && f->disc->disc->readf ==
_dccaread )
+ goto done;
+
/* synchronize before switching to a new discipline */
if(!(f->flags&SF_STRING))
- { if(((f->mode&SF_WRITE) && f->next > f->data) ||
- (f->mode&SF_READ) || f->disc == _Sfudisc )
- { (void)SFSYNC(f);
- f->mode &= ~SF_SYNCED;
+ { (void)SFSYNC(f); /* do a silent buffer synch */
+ if((f->mode&SF_READ) && (f->mode&SF_SYNCED) )
+ { f->mode &= ~SF_SYNCED;
f->endb = f->next = f->endr = f->endw = f->data;
}
+ /* if there is buffered data, ask app before proceeding */
if(((f->mode&SF_WRITE) && (n = f->next-f->data) > 0) ||
- ((f->mode&SF_READ) && f->extent < 0 && (n = f->endb-f->next)
> 0) )
- {
- reg Sfexcept_f exceptf;
- reg int rv = 0;
-
- exceptf = disc ? disc->exceptf :
- f->disc ? f->disc->exceptf : NIL(Sfexcept_f);
-
- /* check with application for course of action */
- if(exceptf)
+ ((f->mode&SF_READ) && (n = f->endb-f->next) > 0) )
+ { int rv = 0;
+ if(rv == 0 && f->disc && f->disc->exceptf) /* ask
current discipline */
+ { SFOPEN(f,0);
+ rv = (*f->disc->exceptf)(f, SF_DBUFFER, &n,
f->disc);
+ SFLOCK(f,0);
+ }
+ if(rv == 0 && disc && disc->exceptf) /* ask discipline
being pushed */
{ SFOPEN(f,0);
- rv = (*exceptf)(f,SF_DBUFFER,&n, disc ? disc :
f->disc);
+ rv = (*disc->exceptf)(f, SF_DBUFFER, &n, disc);
SFLOCK(f,0);
}
+ if(rv < 0)
+ goto done;
+ }
- /* can't switch discipline at this time */
- if(rv <= 0)
+ /* trick the new discipline into processing already buffered
data */
+ if((f->mode&SF_READ) && n > 0 && disc && disc->readf )
+ { if(!(dcca = (Dccache_t*)malloc(sizeof(Dccache_t)+n)) )
goto done;
+ memclear(dcca, sizeof(Dccache_t));
+
+ dcca->disc.readf = _dccaread;
+ dcca->disc.exceptf = _dccaexcept;
+
+ /* move buffered data into the temp discipline */
+ dcca->data = ((uchar*)dcca) + sizeof(Dccache_t);
+ dcca->endb = dcca->data + n;
+ memcpy(dcca->data, f->next, n);
+ f->endb = f->next = f->endr = f->endw = f->data;
}
}
@@ -126,7 +220,11 @@
goto done;
/* set new disc */
- disc->disc = f->disc;
+ if(dcca) /* insert the discipline with cached data */
+ { dcca->disc.disc = f->disc;
+ disc->disc = &dcca->disc;
+ }
+ else disc->disc = f->disc;
f->disc = disc;
rdisc = disc;
}
diff -r -N -u ksh93_2007_01_11/src/lib/libast/sfio/sfhdr.h
ksh93_2007_03_28/src/lib/libast/sfio/sfhdr.h
--- ksh93_2007_01_11/src/lib/libast/sfio/sfhdr.h 2006-06-01
08:10:58.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/sfio/sfhdr.h 2007-01-22
06:22:15.000000000 +0100
@@ -1001,6 +1001,15 @@
#define _Sffpow10 (_Sftable.sf_flt_pow10)
#define _Sfdpow10 (_Sftable.sf_dbl_pow10)
#define _Sflpow10 (_Sftable.sf_ldbl_pow10)
+typedef struct _sfieee_s Sfieee_t;
+struct _sfieee_s
+{ float fltnan; /* float NAN */
+ float fltinf; /* float INF */
+ double dblnan; /* double NAN */
+ double dblinf; /* double INF */
+ Sfdouble_t ldblnan; /* Sfdouble_t NAN */
+ Sfdouble_t ldblinf; /* Sfdouble_t INF */
+};
typedef struct _sftab_
{ Sfdouble_t sf_pos10[SF_MAXEXP10]; /* positive powers of 10
*/
Sfdouble_t sf_neg10[SF_MAXEXP10]; /* negative powers of 10
*/
diff -r -N -u ksh93_2007_01_11/src/lib/libast/sfio/sfieee.c
ksh93_2007_03_28/src/lib/libast/sfio/sfieee.c
--- ksh93_2007_01_11/src/lib/libast/sfio/sfieee.c 2005-02-08
22:46:31.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/sfio/sfieee.c 1970-01-01
01:00:00.000000000 +0100
@@ -1,34 +0,0 @@
-/***********************************************************************
-* *
-* 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> *
-* *
-***********************************************************************/
-#include "sfhdr.h"
-
-/* return IEEE constants struct */
-
-#if __STD_C
-Sfieee_t* sfieee(void)
-#else
-Sfieee_t* sfieee()
-#endif
-{
- SFCVINIT(); /* initialize conversion tables */
- return _Sfieee;
-}
diff -r -N -u ksh93_2007_01_11/src/lib/libast/sfio/_sfopen.c
ksh93_2007_03_28/src/lib/libast/sfio/_sfopen.c
--- ksh93_2007_01_11/src/lib/libast/sfio/_sfopen.c 2005-01-20
02:17:32.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/sfio/_sfopen.c 2007-02-21
17:27:55.000000000 +0100
@@ -191,6 +191,10 @@
sflags &= ~SF_MTSAFE;
uflag = 1;
continue;
+ case 'W' :
+ sflags |= SF_WCWIDTH;
+ uflag = 0;
+ continue;
default :
if(!(oflags&O_CREAT) )
oflags &= ~O_EXCL;
diff -r -N -u ksh93_2007_01_11/src/lib/libast/sfio/sfpool.c
ksh93_2007_03_28/src/lib/libast/sfio/sfpool.c
--- ksh93_2007_01_11/src/lib/libast/sfio/sfpool.c 2006-08-07
19:07:18.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/sfio/sfpool.c 2007-01-22
22:34:56.000000000 +0100
@@ -127,7 +127,6 @@
else /* shared pool of write-streams, data can be moved among
streams */
{ if(SFMODE(head,1) != SF_WRITE && _sfmode(head,SF_WRITE,1) < 0)
goto done;
- /**/ASSERT((f->mode&(SF_WRITE|SF_POOL)) == (SF_WRITE|SF_POOL) );
/**/ASSERT(f->next == f->data);
v = head->next - head->data; /* pending data */
diff -r -N -u ksh93_2007_01_11/src/lib/libast/sfio/sfsetbuf.c
ksh93_2007_03_28/src/lib/libast/sfio/sfsetbuf.c
--- ksh93_2007_01_11/src/lib/libast/sfio/sfsetbuf.c 2005-07-21
02:59:13.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/sfio/sfsetbuf.c 2007-02-21
17:28:31.000000000 +0100
@@ -60,12 +60,13 @@
{ char* astsfio;
char* endw;
- static int linemode = -1;
+ static int modes = -1;
static const char sf_line[] = "SF_LINE";
+ static const char sf_wcwidth[] = "SF_WCWIDTH";
#define ISSEPAR(c) ((c) == ',' || (c) == ' ' || (c) == '\t')
- if (linemode < 0)
- { linemode = 0;
+ if (modes < 0)
+ { modes = 0;
if(astsfio = getenv("_AST_SFIO_OPTIONS"))
{ for(; *astsfio != 0; astsfio = endw)
{ while(ISSEPAR(*astsfio) )
@@ -74,13 +75,18 @@
;
if((endw-astsfio) == (sizeof(sf_line)-1) &&
strncmp(astsfio,sf_line,endw-astsfio) == 0)
- { linemode = 1;
- break;
+ { if ((modes |= SF_LINE) ==
(SF_LINE|SF_WCWIDTH))
+ break;
+ }
+ else if((endw-astsfio) ==
(sizeof(sf_wcwidth)-1) &&
+ strncmp(astsfio,sf_wcwidth,endw-astsfio) ==
0)
+ { if ((modes |= SF_WCWIDTH) ==
(SF_LINE|SF_WCWIDTH))
+ break;
}
}
}
}
- return linemode;
+ return modes;
}
#if __STD_C
@@ -235,8 +241,8 @@
#endif
}
- if(init && setlinemode())
- f->flags |= SF_LINE;
+ if(init)
+ f->flags |= setlinemode();
if(f->here >= 0)
{ f->extent = (Sfoff_t)st.st_size;
@@ -258,8 +264,8 @@
bufsize = SF_GRAIN;
/* set line mode for terminals */
- if(!(f->flags&SF_LINE) &&
isatty(f->file))
- f->flags |= SF_LINE;
+ if(!(f->flags&(SF_LINE|SF_WCWIDTH)) &&
isatty(f->file))
+ f->flags |= SF_LINE|SF_WCWIDTH;
#if _sys_stat
else /* special case /dev/null */
{ reg int dev, ino;
diff -r -N -u ksh93_2007_01_11/src/lib/libast/sfio/sfvprintf.c
ksh93_2007_03_28/src/lib/libast/sfio/sfvprintf.c
--- ksh93_2007_01_11/src/lib/libast/sfio/sfvprintf.c 2006-12-04
15:22:55.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/sfio/sfvprintf.c 2007-02-21
20:27:39.000000000 +0100
@@ -30,7 +30,6 @@
**
** Written by Kiem-Phong Vo.
*/
-
#define HIGHBITI (~((~((uint)0)) >> 1))
#define HIGHBITL (~((~((Sfulong_t)0)) >> 1))
@@ -102,7 +101,7 @@
va_list args; /* arg list if !argf */
#endif
{
- int n, v, k, n_s, base, fmt, flags;
+ int n, v, w, k, n_s, base, fmt, flags;
Sflong_t lv;
char *sp, *ssp, *endsp, *ep, *endep;
int dot, width, precis, sign, decpt;
@@ -132,18 +131,22 @@
wchar_t* wsp;
SFMBDCL(fmbs) /* state of format string */
SFMBDCL(mbs) /* state of some string */
+#ifdef mbwidth
+ char* osp;
+ int n_w, sf_wcwidth;
+#endif
#endif
/* local io system */
- int w, n_output;
-#define SMputc(f,c) { if((w = SFFLSBUF(f,c)) >= 0 ) n_output += 1; \
+ int o, n_output;
+#define SMputc(f,c) { if((o = SFFLSBUF(f,c)) >= 0 ) n_output += 1; \
else { SFBUF(f); goto done; } \
}
-#define SMnputc(f,c,n) { if((w = SFNPUTC(f,c,n)) > 0 ) n_output += 1; \
- if(w != n) { SFBUF(f); goto done; } \
+#define SMnputc(f,c,n) { if((o = SFNPUTC(f,c,n)) > 0 ) n_output += 1; \
+ if(o != n) { SFBUF(f); goto done; } \
}
-#define SMwrite(f,s,n) { if((w = SFWRITE(f,(Void_t*)s,n)) > 0 ) n_output += w;
\
- if(w != n) { SFBUF(f); goto done; } \
+#define SMwrite(f,s,n) { if((o = SFWRITE(f,(Void_t*)s,n)) > 0 ) n_output += o;
\
+ if(o != n) { SFBUF(f); goto done; } \
}
#if _sffmt_small /* these macros are made smaller at some performance cost */
#define SFBUF(f)
@@ -186,6 +189,9 @@
f->endb = f->data+sizeof(data);
}
SFINIT(f);
+#if _has_multibyte && defined(mbwidth)
+ sf_wcwidth = f->flags & SF_WCWIDTH;
+#endif
tls[1] = NIL(char*);
@@ -294,10 +300,10 @@
}
case '-' :
- flags = (flags & ~SFFMT_ZERO) | SFFMT_LEFT;
+ flags = (flags & ~(SFFMT_CENTER|SFFMT_ZERO)) |
SFFMT_LEFT;
goto loop_flags;
case '0' :
- if(!(flags&SFFMT_LEFT) )
+ if(!(flags&(SFFMT_LEFT|SFFMT_CENTER)) )
flags |= SFFMT_ZERO;
goto loop_flags;
case ' ' :
@@ -307,6 +313,9 @@
case '+' :
flags = (flags & ~SFFMT_BLANK) | SFFMT_SIGN;
goto loop_flags;
+ case '=' :
+ flags = (flags & ~(SFFMT_LEFT|SFFMT_ZERO)) |
SFFMT_CENTER;
+ goto loop_flags;
case '#' :
flags |= SFFMT_ALTER;
goto loop_flags;
@@ -391,7 +400,7 @@
if(dot == 0)
{ if((width = v) < 0)
{ width = -width;
- flags = (flags & ~SFFMT_ZERO) |
SFFMT_LEFT;
+ flags = (flags &
~(SFFMT_CENTER|SFFMT_ZERO)) | SFFMT_LEFT;
}
}
else if(dot == 1)
@@ -674,10 +683,13 @@
ls = tls; tls[0] = sp;
}
for(sp = *ls;;)
- { /* set v to the number of bytes to output */
+ { /* v: number of bytes w: print width of those
v bytes */
#if _has_multibyte
if(flags & SFFMT_LONG)
{ v = 0;
+#ifdef mbwidth
+ w = 0;
+#endif
SFMBCLR(&mbs);
for(n = 0, wsp = (wchar_t*)sp;; ++wsp,
++n)
{ if((size >= 0 && n >= size) ||
@@ -685,28 +697,70 @@
break;
if((n_s = wcrtomb(buf, *wsp,
&mbs)) <= 0)
break;
+#ifdef mbwidth
+ if(sf_wcwidth )
+ { n_w = mbwidth(*wsp);
+ if(precis >= 0 &&
(w+n_w) > precis )
+ break;
+ w += n_w;
+ }
+ else
+#endif
if(precis >= 0 && (v+n_s) >
precis )
break;
v += n_s;
}
+#ifdef mbwidth
+ if(!sf_wcwidth )
+ w = v;
+#endif
+ }
+#if defined(mbwide) && defined(mbchar) && defined(mbwidth)
+ else if (mbwide())
+ { w = 0;
+ SFMBCLR(&mbs);
+ ssp = sp;
+ for(;;)
+ { if((size >= 0 && w >= size) ||
+ (size < 0 && *ssp == 0) )
+ break;
+ osp = ssp;
+ n = mbchar(osp);
+ n_w = sf_wcwidth ? mbwidth(n) :
1;
+ if(precis >= 0 && (w+n_w) >
precis )
+ break;
+ w += n_w;
+ ssp = osp;
+ }
+ v = ssp - sp;
}
+#endif
else
#endif
{ if((v = size) < 0)
for(v = 0; sp[v]; ++v)
if(v == precis)
break;
+ if(precis >= 0 && v > precis)
+ v = precis;
+ w = v;
}
- if(precis >= 0 && v > precis)
- v = precis;
-
- if((n = width - v) > 0 && !(flags&SFFMT_LEFT) )
- { SFnputc(f, ' ', n); n = 0; }
+ if((n = width - w) > 0 && !(flags&SFFMT_LEFT) )
+ { if(flags&SFFMT_CENTER)
+ { n -= (k = n/2);
+ SFnputc(f, ' ', k);
+ }
+ else
+ {
+ SFnputc(f, ' ', n);
+ n = 0;
+ }
+ }
#if _has_multibyte
if(flags & SFFMT_LONG)
{ SFMBCLR(&mbs);
- for(wsp = (wchar_t*)sp; v > 0; ++wsp, v
-= n_s)
+ for(wsp = (wchar_t*)sp; w > 0; ++wsp,
--w)
{ if((n_s = wcrtomb(buf, *wsp,
&mbs)) <= 0)
break;
sp = buf; SFwrite(f, sp, n_s);
@@ -763,6 +817,10 @@
{ SFMBCLR(&mbs);
if((n_s = wcrtomb(buf, *wsp++, &mbs))
<= 0)
break;
+#ifdef mbwidth
+ if(sf_wcwidth)
+ n_s = mbwidth(*(wsp - 1));
+#endif
n = width - precis*n_s; /* padding
amount */
}
else
@@ -777,7 +835,15 @@
}
if(n > 0 && !(flags&SFFMT_LEFT) )
- { SFnputc(f,' ',n); n = 0; };
+ { if(flags&SFFMT_CENTER)
+ { n -= (k = n/2);
+ SFnputc(f, ' ', k);
+ }
+ else
+ { SFnputc(f, ' ', n);
+ n = 0;
+ }
+ }
v = precis; /* need this because SFnputc may
clear it */
#if _has_multibyte
@@ -1249,7 +1315,7 @@
/* SFFMT_LEFT: right padding */
if((n = -v) > 0)
- SFnputc(f,' ',n);
+ { SFnputc(f,' ',n); }
}
}
diff -r -N -u ksh93_2007_01_11/src/lib/libast/stdio/fgetpos.c
ksh93_2007_03_28/src/lib/libast/stdio/fgetpos.c
--- ksh93_2007_01_11/src/lib/libast/stdio/fgetpos.c 2004-11-03
16:42:36.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/stdio/fgetpos.c 2007-02-14
07:48:15.000000000 +0100
@@ -35,7 +35,7 @@
return (pos->_sf_offset = sfseek(f, (Sfoff_t)0, SEEK_CUR)) >= 0 ? 0 :
-1;
}
-#ifdef _ast_int8_t
+#ifdef _typ_int64_t
int
fgetpos64(Sfio_t* f, fpos64_t* pos)
diff -r -N -u ksh93_2007_01_11/src/lib/libast/stdio/fseek.c
ksh93_2007_03_28/src/lib/libast/stdio/fseek.c
--- ksh93_2007_01_11/src/lib/libast/stdio/fseek.c 2004-11-03
16:42:36.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/stdio/fseek.c 2007-02-14
07:48:33.000000000 +0100
@@ -35,12 +35,12 @@
return sfseek(f, (Sfoff_t)off, op|SF_SHARE) >= 0 ? 0 : -1;
}
-#ifdef _ast_int8_t
+#ifdef _typ_int64_t
int
-fseek64(Sfio_t* f, _ast_int8_t off, int op)
+fseek64(Sfio_t* f, int64_t off, int op)
{
- STDIO_INT(f, "fseek64", int, (Sfio_t*, _ast_int8_t, int), (f, off, op))
+ STDIO_INT(f, "fseek64", int, (Sfio_t*, int64_t, int), (f, off, op))
return sfseek(f, (Sfoff_t)off, op|SF_SHARE) >= 0 ? 0 : -1;
}
diff -r -N -u ksh93_2007_01_11/src/lib/libast/stdio/fseeko.c
ksh93_2007_03_28/src/lib/libast/stdio/fseeko.c
--- ksh93_2007_01_11/src/lib/libast/stdio/fseeko.c 2004-11-03
16:42:36.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/stdio/fseeko.c 2007-02-14
07:48:52.000000000 +0100
@@ -35,12 +35,12 @@
return sfseek(f, (Sfoff_t)off, op|SF_SHARE) >= 0 ? 0 : -1;
}
-#ifdef _ast_int8_t
+#ifdef _typ_int64_t
int
-fseeko64(Sfio_t* f, _ast_int8_t off, int op)
+fseeko64(Sfio_t* f, int64_t off, int op)
{
- STDIO_INT(f, "fseeko64", int, (Sfio_t*, _ast_int8_t, int), (f, off, op))
+ STDIO_INT(f, "fseeko64", int, (Sfio_t*, int64_t, int), (f, off, op))
return sfseek(f, (Sfoff_t)off, op|SF_SHARE) >= 0 ? 0 : -1;
}
diff -r -N -u ksh93_2007_01_11/src/lib/libast/stdio/fsetpos.c
ksh93_2007_03_28/src/lib/libast/stdio/fsetpos.c
--- ksh93_2007_01_11/src/lib/libast/stdio/fsetpos.c 2004-11-03
16:42:36.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/stdio/fsetpos.c 2007-02-14
07:49:06.000000000 +0100
@@ -35,7 +35,7 @@
return sfseek(f, (Sfoff_t)pos->_sf_offset, SF_PUBLIC) ==
(Sfoff_t)pos->_sf_offset ? 0 : -1;
}
-#ifdef _ast_int8_t
+#ifdef _typ_int64_t
int
fsetpos64(Sfio_t* f, const fpos64_t* pos)
diff -r -N -u ksh93_2007_01_11/src/lib/libast/stdio/ftell.c
ksh93_2007_03_28/src/lib/libast/stdio/ftell.c
--- ksh93_2007_01_11/src/lib/libast/stdio/ftell.c 2004-11-03
16:42:36.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/stdio/ftell.c 2007-02-14
08:36:36.000000000 +0100
@@ -35,14 +35,14 @@
return (long)sfseek(f, (Sfoff_t)0, SEEK_CUR);
}
-#ifdef _ast_int8_t
+#if _typ_int64_t
-_ast_int8_t
+int64_t
ftell64(Sfio_t* f)
{
- STDIO_INT(f, "ftell64", _ast_int8_t, (Sfio_t*), (f))
+ STDIO_INT(f, "ftell64", int64_t, (Sfio_t*), (f))
- return (_ast_int8_t)sfseek(f, (Sfoff_t)0, SEEK_CUR);
+ return (int64_t)sfseek(f, (Sfoff_t)0, SEEK_CUR);
}
#endif
diff -r -N -u ksh93_2007_01_11/src/lib/libast/stdio/ftello.c
ksh93_2007_03_28/src/lib/libast/stdio/ftello.c
--- ksh93_2007_01_11/src/lib/libast/stdio/ftello.c 2004-11-03
16:42:36.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/stdio/ftello.c 2007-02-14
07:49:36.000000000 +0100
@@ -35,12 +35,12 @@
return sfseek(f, (Sfoff_t)0, SEEK_CUR);
}
-#ifdef _ast_int8_t
+#ifdef _typ_int64_t
-_ast_int8_t
+int64_t
ftello64(Sfio_t* f)
{
- STDIO_INT(f, "ftello64", _ast_int8_t, (Sfio_t*), (f))
+ STDIO_INT(f, "ftello64", int64_t, (Sfio_t*), (f))
return sfseek(f, (Sfoff_t)0, SEEK_CUR) >= 0 ? 0 : -1;
}
diff -r -N -u ksh93_2007_01_11/src/lib/libast/stdio/vasprintf.c
ksh93_2007_03_28/src/lib/libast/stdio/vasprintf.c
--- ksh93_2007_01_11/src/lib/libast/stdio/vasprintf.c 2004-10-27
21:43:56.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/stdio/vasprintf.c 2007-02-12
18:51:35.000000000 +0100
@@ -32,7 +32,7 @@
if (f = sfstropen())
{
v = sfvprintf(f, fmt, args);
- if (!(*s = strdup(sfstrbase(f))))
+ if (!(*s = strdup(sfstruse(f))))
v = -1;
sfstrclose(f);
}
diff -r -N -u ksh93_2007_01_11/src/lib/libast/string/chresc.c
ksh93_2007_03_28/src/lib/libast/string/chresc.c
--- ksh93_2007_01_11/src/lib/libast/string/chresc.c 2006-07-17
21:46:05.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/string/chresc.c 2007-01-26
21:29:32.000000000 +0100
@@ -48,7 +48,7 @@
char buf[64];
#endif
- switch (c = *s++)
+ switch (c = mbchar(s))
{
case 0:
s--;
diff -r -N -u ksh93_2007_01_11/src/lib/libast/string/fmtbase.c
ksh93_2007_03_28/src/lib/libast/string/fmtbase.c
--- ksh93_2007_01_11/src/lib/libast/string/fmtbase.c 2002-08-13
23:35:18.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/string/fmtbase.c 2007-02-14
07:49:46.000000000 +0100
@@ -34,7 +34,7 @@
#undef fmtbasell
char*
-fmtbasell(register _ast_intmax_t n, register int b, int p)
+fmtbasell(register intmax_t n, register int b, int p)
{
char* buf;
int z;
@@ -52,5 +52,5 @@
char*
fmtbase(long n, int b, int p)
{
- return fmtbasell((_ast_intmax_t)n, b, p);
+ return fmtbasell((intmax_t)n, b, p);
}
diff -r -N -u ksh93_2007_01_11/src/lib/libast/string/fmtelapsed.c
ksh93_2007_03_28/src/lib/libast/string/fmtelapsed.c
--- ksh93_2007_01_11/src/lib/libast/string/fmtelapsed.c 2000-10-12
14:58:39.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/string/fmtelapsed.c 2007-02-05
10:14:37.000000000 +0100
@@ -21,40 +21,41 @@
***********************************************************************/
#pragma prototyped
/*
- * return pointer to formatted elapsed time for t 1/n secs
+ * return pointer to formatted elapsed time for u 1/n secs
* compatible with strelapsed()
- * return value length is at most 6
+ * return value length is at most 7
*/
#include <ast.h>
char*
-fmtelapsed(register unsigned long t, register int n)
+fmtelapsed(register unsigned long u, register int n)
{
- register unsigned long s;
+ register unsigned long t;
char* buf;
int z;
- static int amt[] = { 1, 60, 60, 24, 7, 4, 12, 20 };
- static char chr[] = "smhdwMYS";
-
- if (t == 0L)
+ if (u == 0L)
return "0";
- if (t == ~0L)
+ if (u == ~0L)
return "%";
- buf = fmtbuf(z = 7);
- s = t / n;
- if (s < 60)
- sfsprintf(buf, z, "%d.%02ds", s % 100, (t * 100 / n) % 100);
+ buf = fmtbuf(z = 8);
+ t = u / n;
+ if (t < 60)
+ sfsprintf(buf, z, "%lu.%02lus", t, (u * 100 / n) % 100);
+ else if (t < 60*60)
+ sfsprintf(buf, z, "%lum%02lus", t / 60, t - (t / 60) * 60);
+ else if (t < 24*60*60)
+ sfsprintf(buf, z, "%luh%02lum", t / (60*60), (t - (t / (60*60))
* (60*60)) / 60);
+ else if (t < 7*24*60*60)
+ sfsprintf(buf, z, "%lud%02luh", t / (24*60*60), (t - (t /
(24*60*60)) * (24*60*60)) / (60*60));
+ else if (t < 31*24*60*60)
+ sfsprintf(buf, z, "%luw%02lud", t / (7*24*60*60), (t - (t /
(7*24*60*60)) * (7*24*60*60)) / (24*60*60));
+ else if (t < 365*24*60*60)
+ sfsprintf(buf, z, "%luM%02lud", (t * 12) / (365*24*60*60), ((t
* 12) - ((t * 12) / (365*24*60*60)) * (365*24*60*60)) / (12*24*60*60));
+ else if (t < (365UL*4UL+1UL)*24UL*60UL*60UL)
+ sfsprintf(buf, z, "%luY%02luM", t / (365*24*60*60), ((t - (t /
(365*24*60*60)) * (365*24*60*60)) * 5) / (152 * 24 * 60 * 60));
else
- {
- for (n = 1; n < elementsof(amt) - 1; n++)
- {
- if ((t = s / amt[n]) < amt[n + 1])
- break;
- s = t;
- }
- sfsprintf(buf, z, "%d%c%02d%c", (s / amt[n]) % 100, chr[n], s %
amt[n], chr[n - 1]);
- }
+ sfsprintf(buf, z, "%luY%02luM", (t * 4) /
((365UL*4UL+1UL)*24UL*60UL*60UL), (((t * 4) - ((t * 4) /
((365UL*4UL+1UL)*24UL*60UL*60UL)) * ((365UL*4UL+1UL)*24UL*60UL*60UL)) * 5) /
((4 * 152 + 1) * 24 * 60 * 60));
return buf;
}
diff -r -N -u ksh93_2007_01_11/src/lib/libast/string/fmtip4.c
ksh93_2007_03_28/src/lib/libast/string/fmtip4.c
--- ksh93_2007_01_11/src/lib/libast/string/fmtip4.c 2000-10-12
15:30:13.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/string/fmtip4.c 2007-02-14
07:49:57.000000000 +0100
@@ -29,7 +29,7 @@
*/
char*
-fmtip4(register unsigned _ast_int4_t addr, int bits)
+fmtip4(register uint32_t addr, int bits)
{
char* buf;
int z;
diff -r -N -u ksh93_2007_01_11/src/lib/libast/string/strntol.c
ksh93_2007_03_28/src/lib/libast/string/strntol.c
--- ksh93_2007_01_11/src/lib/libast/string/strntol.c 2002-11-11
21:22:48.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/string/strntol.c 2007-02-14
08:28:55.000000000 +0100
@@ -25,6 +25,7 @@
#define S2I_function strntol
#define S2I_number long
+#define S2I_unumber unsigned long
#define S2I_size 1
#include "strtoi.h"
diff -r -N -u ksh93_2007_01_11/src/lib/libast/string/strntoll.c
ksh93_2007_03_28/src/lib/libast/string/strntoll.c
--- ksh93_2007_01_11/src/lib/libast/string/strntoll.c 2002-11-11
21:23:39.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/string/strntoll.c 2007-02-14
08:29:07.000000000 +0100
@@ -24,7 +24,8 @@
*/
#define S2I_function strntoll
-#define S2I_number _ast_intmax_t
+#define S2I_number intmax_t
+#define S2I_unumber uintmax_t
#define S2I_size 1
#include "strtoi.h"
diff -r -N -u ksh93_2007_01_11/src/lib/libast/string/strntoul.c
ksh93_2007_03_28/src/lib/libast/string/strntoul.c
--- ksh93_2007_01_11/src/lib/libast/string/strntoul.c 2002-11-11
21:24:44.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/string/strntoul.c 2007-02-14
08:28:06.000000000 +0100
@@ -25,6 +25,7 @@
#define S2I_function strntoul
#define S2I_number long
+#define S2I_unumber unsigned long
#define S2I_size 1
#define S2I_unsigned 1
diff -r -N -u ksh93_2007_01_11/src/lib/libast/string/strntoull.c
ksh93_2007_03_28/src/lib/libast/string/strntoull.c
--- ksh93_2007_01_11/src/lib/libast/string/strntoull.c 2002-11-11
21:29:06.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/string/strntoull.c 2007-02-14
08:29:20.000000000 +0100
@@ -24,7 +24,8 @@
*/
#define S2I_function strntoull
-#define S2I_number _ast_intmax_t
+#define S2I_number intmax_t
+#define S2I_unumber uintmax_t
#define S2I_size 1
#define S2I_unsigned 1
diff -r -N -u ksh93_2007_01_11/src/lib/libast/string/strtoi.h
ksh93_2007_03_28/src/lib/libast/string/strtoi.h
--- ksh93_2007_01_11/src/lib/libast/string/strtoi.h 2006-10-13
21:30:36.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/string/strtoi.h 2007-02-14
08:26:52.000000000 +0100
@@ -35,6 +35,7 @@
*
* S2I_function the function name
* S2I_number the signed number type
+ * S2I_unumber the unsigned number type
* S2I_unsigned 1 for unsigned, 0 for signed
* S2I_multiplier 1 for optional multiplier suffix, 0 otherwise
* S2I_size the second argument is the input string size
@@ -94,11 +95,10 @@
#define QL 01
#define QU 02
-#define S2I_utype unsigned S2I_number
-#define S2I_umax (~((S2I_utype)0))
+#define S2I_umax (~((S2I_unumber)0))
#if S2I_unsigned
-#define S2I_type S2I_utype
+#define S2I_type S2I_unumber
#define S2I_min 0
#define S2I_max S2I_umax
#else
@@ -113,10 +113,10 @@
#define S2I_valid(s) 1
#endif
-#define ADDOVER(n,c,s) ((S2I_umax-(n))<((S2I_utype)((c)+(s))))
-#define MPYOVER(n,c) (((S2I_utype)(n))>(S2I_umax/(c)))
+#define ADDOVER(n,c,s) ((S2I_umax-(n))<((S2I_unumber)((c)+(s))))
+#define MPYOVER(n,c) (((S2I_unumber)(n))>(S2I_umax/(c)))
-static const S2I_utype mm[] =
+static const S2I_unumber mm[] =
{
0,
S2I_umax / 1,
@@ -224,15 +224,15 @@
#if S2I_size
register unsigned char* z = s + size;
#endif
- register S2I_utype n;
- register S2I_utype x;
+ register S2I_unumber n;
+ register S2I_unumber x;
register int c;
register int shift;
register unsigned char* p;
register unsigned char* cv;
unsigned char* b;
unsigned char* k;
- S2I_utype v;
+ S2I_unumber v;
#if S2I_multiplier
register int base;
#endif
@@ -546,7 +546,7 @@
overflow = 1;
}
else
- v = ((S2I_utype)1) << shift;
+ v = ((S2I_unumber)1) << shift;
}
if (v)
{
diff -r -N -u ksh93_2007_01_11/src/lib/libast/string/strtoip4.c
ksh93_2007_03_28/src/lib/libast/string/strtoip4.c
--- ksh93_2007_01_11/src/lib/libast/string/strtoip4.c 2003-02-19
09:52:17.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/string/strtoip4.c 2007-02-14
07:50:43.000000000 +0100
@@ -43,17 +43,17 @@
*/
int
-strtoip4(register const char* s, char** e, unsigned _ast_int4_t* paddr,
unsigned char* pbits)
+strtoip4(register const char* s, char** e, uint32_t* paddr, unsigned char*
pbits)
{
- register int c;
- register unsigned int n;
- register unsigned _ast_int4_t addr;
- register int part;
- register unsigned char bits;
- unsigned _ast_int4_t z;
- int old;
- int r;
- const char* b;
+ register int c;
+ register unsigned int n;
+ register uint32_t addr;
+ register int part;
+ register unsigned char bits;
+ uint32_t z;
+ int old;
+ int r;
+ const char* b;
r = -1;
while (isspace(*s))
@@ -136,7 +136,7 @@
else
bits = 24;
if (*pbits = bits)
- addr &= ~((((unsigned _ast_int4_t)1)<<(32-bits))-1);
+ addr &= ~((((uint32_t)1)<<(32-bits))-1);
else
addr = 0;
}
diff -r -N -u ksh93_2007_01_11/src/lib/libast/string/strton.c
ksh93_2007_03_28/src/lib/libast/string/strton.c
--- ksh93_2007_01_11/src/lib/libast/string/strton.c 2001-03-29
17:34:39.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/string/strton.c 2007-02-14
08:25:17.000000000 +0100
@@ -25,6 +25,7 @@
#define S2I_function strton
#define S2I_number long
+#define S2I_unumber unsigned long
#define S2I_multiplier 1
#include "strtoi.h"
diff -r -N -u ksh93_2007_01_11/src/lib/libast/string/strtonll.c
ksh93_2007_03_28/src/lib/libast/string/strtonll.c
--- ksh93_2007_01_11/src/lib/libast/string/strtonll.c 2001-03-29
17:34:46.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/string/strtonll.c 2007-02-14
08:25:26.000000000 +0100
@@ -24,7 +24,8 @@
*/
#define S2I_function strtonll
-#define S2I_number _ast_intmax_t
+#define S2I_number intmax_t
+#define S2I_unumber uintmax_t
#define S2I_multiplier 1
#include "strtoi.h"
diff -r -N -u ksh93_2007_01_11/src/lib/libast/string/swapget.c
ksh93_2007_03_28/src/lib/libast/string/swapget.c
--- ksh93_2007_01_11/src/lib/libast/string/swapget.c 1996-04-11
18:51:33.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/string/swapget.c 2007-02-14
08:17:50.000000000 +0100
@@ -34,16 +34,16 @@
* get int_n from b according to op
*/
-int_max
+intmax_t
swapget(int op, const void* b, int n)
{
register unsigned char* p;
register unsigned char* d;
- int_max v;
- unsigned char tmp[sizeof(int_max)];
+ intmax_t v;
+ unsigned char tmp[sizeof(intmax_t)];
- if (n > sizeof(int_max))
- n = sizeof(int_max);
+ if (n > sizeof(intmax_t))
+ n = sizeof(intmax_t);
if (op) swapmem(op, b, d = tmp, n);
else d = (unsigned char*)b;
p = d + n;
diff -r -N -u ksh93_2007_01_11/src/lib/libast/string/swapop.c
ksh93_2007_03_28/src/lib/libast/string/swapop.c
--- ksh93_2007_01_11/src/lib/libast/string/swapop.c 2004-10-28
17:11:07.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/string/swapop.c 2007-02-14
08:30:20.000000000 +0100
@@ -41,13 +41,13 @@
{
register int op;
register int z;
- char tmp[sizeof(int_max)];
+ char tmp[sizeof(intmax_t)];
if ((z = size) < 0)
z = -z;
if (z <= 1)
return 0;
- if (z <= sizeof(int_max))
+ if (z <= sizeof(intmax_t))
for (op = 0; op < z; op++)
if (!memcmp(internal, swapmem(op, external, tmp, z), z))
{
diff -r -N -u ksh93_2007_01_11/src/lib/libast/string/swapput.c
ksh93_2007_03_28/src/lib/libast/string/swapput.c
--- ksh93_2007_01_11/src/lib/libast/string/swapput.c 1996-04-11
18:57:03.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/string/swapput.c 2007-02-14
08:29:54.000000000 +0100
@@ -35,7 +35,7 @@
*/
void*
-swapput(int op, void* b, int n, int_max v)
+swapput(int op, void* b, int n, intmax_t v)
{
register char* p = (char*)b + n;
diff -r -N -u ksh93_2007_01_11/src/lib/libast/tm/tmdata.c
ksh93_2007_03_28/src/lib/libast/tm/tmdata.c
--- ksh93_2007_01_11/src/lib/libast/tm/tmdata.c 2004-11-30 21:43:44.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libast/tm/tmdata.c 2007-03-22 23:10:59.000000000
+0100
@@ -259,6 +259,24 @@
0, 0, 0, 0, 0
};
-Tm_data_t tm_data = { format, lex, digit, days, sum, leap, zone };
+/*
+ * 2007-03-19 move tm_data from _tm_data_ to (*_tm_datap_)
+ * to allow future Tm_data_t growth
+ * by 2009 _tm_data_ can be static
+ */
+
+#if _BLD_ast && defined(__EXPORT__)
+#define extern extern __EXPORT__
+#endif
+
+extern Tm_data_t _tm_data_;
+
+#undef extern
+
+Tm_data_t _tm_data_ = { format, lex, digit, days, sum, leap, zone };
__EXTERN__(Tm_data_t, _tm_data_);
+
+__EXTERN__(Tm_data_t*, _tm_datap_);
+
+Tm_data_t* _tm_datap_ = &_tm_data_;
diff -r -N -u ksh93_2007_01_11/src/lib/libast/tm/tminit.c
ksh93_2007_03_28/src/lib/libast/tm/tminit.c
--- ksh93_2007_01_11/src/lib/libast/tm/tminit.c 2005-03-03 23:05:31.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libast/tm/tminit.c 2007-03-22 23:13:16.000000000
+0100
@@ -63,10 +63,28 @@
0, 0
};
-Tm_info_t _tm_info_ = { 0 };
+/*
+ * 2007-03-19 move tm_info from _tm_info_ to (*_tm_infop_)
+ * to allow future Tm_info_t growth
+ * by 2009 _tm_info_ can be static
+ */
+
+#if _BLD_ast && defined(__EXPORT__)
+#define extern extern __EXPORT__
+#endif
+
+extern Tm_info_t _tm_info_;
+
+#undef extern
+
+Tm_info_t _tm_info_ = { 0 };
__EXTERN__(Tm_info_t, _tm_info_);
+__EXTERN__(Tm_info_t*, _tm_infop_);
+
+Tm_info_t* _tm_infop_ = &_tm_info_;
+
#if _tzset_environ
static char TZ[256];
@@ -417,7 +435,7 @@
void
tminit(register Tm_zone_t* zp)
{
- static unsigned _ast_int4_t serial = ~(unsigned _ast_int4_t)0;
+ static uint32_t serial = ~(uint32_t)0;
if (serial != ast.env_serial)
{
diff -r -N -u ksh93_2007_01_11/src/lib/libast/tm/tmxfmt.c
ksh93_2007_03_28/src/lib/libast/tm/tmxfmt.c
--- ksh93_2007_01_11/src/lib/libast/tm/tmxfmt.c 2005-01-11 22:04:23.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libast/tm/tmxfmt.c 2007-01-17 21:36:13.000000000
+0100
@@ -117,7 +117,7 @@
flags = tm_info.flags;
sp = &stack[0];
cp = buf;
- ep = buf + len - 1;
+ ep = buf + len;
delimiter = 0;
for (;;)
{
@@ -517,9 +517,8 @@
index:
p = tm_info.format[n];
string:
- while (*cp = *p++)
- if (cp < ep)
- cp++;
+ while (cp < ep && (*cp = *p++))
+ cp++;
continue;
push:
c = 0;
@@ -535,6 +534,8 @@
continue;
}
tm_info.flags = flags;
+ if (cp >= ep)
+ cp = ep - 1;
*cp = 0;
return cp;
}
diff -r -N -u ksh93_2007_01_11/src/lib/libast/tm/tmxleap.c
ksh93_2007_03_28/src/lib/libast/tm/tmxleap.c
--- ksh93_2007_01_11/src/lib/libast/tm/tmxleap.c 2004-12-08
07:17:29.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/tm/tmxleap.c 2007-02-14
07:51:16.000000000 +0100
@@ -38,7 +38,7 @@
tmxleap(Time_t t)
{
register Tm_leap_t* lp;
- unsigned _ast_int4_t sec;
+ uint32_t sec;
tmset(tm_info.zone);
if (tm_info.flags & TM_ADJUST)
diff -r -N -u ksh93_2007_01_11/src/lib/libast/tm/tmxmake.c
ksh93_2007_03_28/src/lib/libast/tm/tmxmake.c
--- ksh93_2007_01_11/src/lib/libast/tm/tmxmake.c 2005-03-02
21:45:07.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/tm/tmxmake.c 2007-02-14
07:51:38.000000000 +0100
@@ -45,11 +45,11 @@
time_t now;
int leapsec;
int y;
- unsigned _ast_int4_t n;
- _ast_int4_t o;
+ uint32_t n;
+ int32_t o;
#if TMX_FLOAT
Time_t z;
- unsigned _ast_int4_t i;
+ uint32_t i;
#endif
Tm_t tm;
diff -r -N -u ksh93_2007_01_11/src/lib/libast/tm/tmxscan.c
ksh93_2007_03_28/src/lib/libast/tm/tmxscan.c
--- ksh93_2007_01_11/src/lib/libast/tm/tmxscan.c 2006-10-04
17:51:15.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/tm/tmxscan.c 2007-03-11
12:43:11.000000000 +0100
@@ -37,7 +37,7 @@
typedef struct
{
- _ast_int4_t nsec;
+ int32_t nsec;
int year;
int mon;
int week;
@@ -456,17 +456,19 @@
char* r;
Time_t x;
+ static int initialized;
static char** datemask;
tmlocale();
if (!format || !*format)
{
- if (!datemask)
+ if (!initialized)
{
register Sfio_t* sp;
register int n;
off_t m;
+ initialized = 1;
if ((v = getenv("DATEMSK")) && *v && (sp = sfopen(NiL,
v, "r")))
{
for (n = 1; sfgetr(sp, '\n', 0); n++);
@@ -495,10 +497,8 @@
}
}
}
- if (!datemask)
- datemask = (char**)&datemask;
}
- if ((p = datemask) != (char**)&datemask)
+ if (p = datemask)
while (v = *p++)
{
x = scan(s, &q, v, &r, t, flags);
diff -r -N -u ksh93_2007_01_11/src/lib/libast/tm/tmxtime.c
ksh93_2007_03_28/src/lib/libast/tm/tmxtime.c
--- ksh93_2007_01_11/src/lib/libast/tm/tmxtime.c 2005-03-02
21:45:24.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/tm/tmxtime.c 2007-02-14
07:52:51.000000000 +0100
@@ -47,7 +47,7 @@
{
register Time_t t;
register Tm_leap_t* lp;
- register _ast_int4_t y;
+ register int32_t y;
int n;
int sec;
time_t now;
diff -r -N -u ksh93_2007_01_11/src/lib/libast/tm/tvgettime.c
ksh93_2007_03_28/src/lib/libast/tm/tvgettime.c
--- ksh93_2007_01_11/src/lib/libast/tm/tvgettime.c 2004-12-08
20:00:57.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/tm/tvgettime.c 2007-02-14
07:53:05.000000000 +0100
@@ -51,7 +51,7 @@
#else
static time_t s;
- static unsigned _ast_int4_t n;
+ static uint32_t n;
if ((tv->tv_sec = time(NiL)) != s)
{
diff -r -N -u ksh93_2007_01_11/src/lib/libast/tm/tvsleep.c
ksh93_2007_03_28/src/lib/libast/tm/tvsleep.c
--- ksh93_2007_01_11/src/lib/libast/tm/tvsleep.c 2004-12-14
16:52:55.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/tm/tvsleep.c 2007-02-14
07:53:18.000000000 +0100
@@ -94,7 +94,7 @@
#else
unsigned int s = tv->tv_sec;
- unsigned _ast_int4_t n = tv->tv_nsec;
+ uint32_t n = tv->tv_nsec;
#if _lib_usleep
diff -r -N -u ksh93_2007_01_11/src/lib/libast/tm/tvtouch.c
ksh93_2007_03_28/src/lib/libast/tm/tvtouch.c
--- ksh93_2007_01_11/src/lib/libast/tm/tvtouch.c 2005-01-16
17:06:31.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/tm/tvtouch.c 2007-02-14
07:53:32.000000000 +0100
@@ -59,7 +59,7 @@
#endif
#endif
-#define NS(n) (((unsigned _ast_int4_t)(n))<1000000000L?(n):0)
+#define NS(n) (((uint32_t)(n))<1000000000L?(n):0)
/*
* touch path <atime,mtime,ctime>
diff -r -N -u ksh93_2007_01_11/src/lib/libast/uwin/crypt.c
ksh93_2007_03_28/src/lib/libast/uwin/crypt.c
--- ksh93_2007_01_11/src/lib/libast/uwin/crypt.c 2006-10-27
21:47:19.000000000 +0200
+++ ksh93_2007_03_28/src/lib/libast/uwin/crypt.c 2007-02-22
21:31:40.000000000 +0100
@@ -1,26 +1,3 @@
-/***********************************************************************
-* *
-* 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
-
#include "FEATURE/uwin"
#if !_UWIN || _lib_crypt
diff -r -N -u ksh93_2007_01_11/src/lib/libast/uwin/rint.c
ksh93_2007_03_28/src/lib/libast/uwin/rint.c
--- ksh93_2007_01_11/src/lib/libast/uwin/rint.c 2002-08-26 23:02:52.000000000
+0200
+++ ksh93_2007_03_28/src/lib/libast/uwin/rint.c 2007-02-22 21:32:39.000000000
+0100
@@ -19,8 +19,6 @@
* Phong Vo <kpv at research.att.com> *
* *
***********************************************************************/
-#include <math.h>
-
#include "FEATURE/uwin"
#if !_UWIN || _lib_ceil && _lib_floor && _lib_rint
@@ -29,6 +27,8 @@
#else
+#include <math.h>
+
extern double rint(x)
double x;
{
diff -r -N -u ksh93_2007_01_11/src/lib/libast/vmalloc/malloc.c
ksh93_2007_03_28/src/lib/libast/vmalloc/malloc.c
--- ksh93_2007_01_11/src/lib/libast/vmalloc/malloc.c 2006-11-27
23:12:09.000000000 +0100
+++ ksh93_2007_03_28/src/lib/libast/vmalloc/malloc.c 2007-03-13
15:36:22.000000000 +0100
@@ -74,7 +74,7 @@
#else
#define F0(f,t0) f()
#define F1(f,t1,a1) f(a1) t1 a1;
-#define F1(f,t1,a1,t2,a2) f(a1, a2) t1 a1; t2 a2;
+#define F2(f,t1,a1,t2,a2) f(a1, a2) t1 a1; t2 a2;
#endif
/*
@@ -215,14 +215,19 @@
}
static int _Vmflinit = 0;
+static Vmulong_t _Vmdbstart = 0;
static Vmulong_t _Vmdbcheck = 0;
static Vmulong_t _Vmdbtime = 0;
static int _Vmpffd = -1;
#define VMFLINIT() \
{ if(!_Vmflinit) vmflinit(); \
- if(_Vmdbcheck && (++_Vmdbtime % _Vmdbcheck) == 0 && \
- Vmregion->meth.meth == VM_MTDEBUG) \
+ if(_Vmdbcheck) \
+ { if(_Vmdbtime < _Vmdbstart) _Vmdbtime += 1; \
+ else if((_Vmdbtime += 1) < _Vmdbstart) _Vmdbtime = _Vmdbstart; \
+ if(_Vmdbtime >= _Vmdbstart && (_Vmdbtime % _Vmdbcheck) == 0 && \
+ Vmregion->meth.meth == VM_MTDEBUG) \
vmdbcheck(Vmregion); \
+ } \
}
#if __STD_C
@@ -355,17 +360,19 @@
if((fd = atou(&env)) >= 0 )
vmdebug(fd);
}
-
- if(*env < '0' || *env > '9')
+ else if(*env < '0' || *env > '9')
env += 1;
- else if(env[0] == '0' &&
- (env[1] == 'x' || env[1] == 'X') )
+ else if(env[0] == '0' && (env[1] == 'x' ||
env[1] == 'X') )
{ if((addr = atou(&env)) != 0)
vmdbwatch((Void_t*)addr);
}
else
{ _Vmdbcheck = atou(&env);
setcheck = 1;
+ if(*env == ',')
+ { env += 1;
+ _Vmdbstart = atou(&env);
+ }
}
}
if(!setcheck)
diff -r -N -u ksh93_2007_01_11/src/lib/libcmd/chmod.c
ksh93_2007_03_28/src/lib/libcmd/chmod.c
--- ksh93_2007_01_11/src/lib/libcmd/chmod.c 2006-11-01 21:15:59.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libcmd/chmod.c 2007-01-26 23:43:33.000000000
+0100
@@ -28,7 +28,7 @@
*/
static const char usage[] =
-"[-?\n@(#)$Id: chmod (AT&T Research) 2006-06-25 $\n]"
+"[-?\n@(#)$Id: chmod (AT&T Research) 2007-07-26 $\n]"
USAGE_LICENSE
"[+NAME?chmod - change the access permissions of files]"
"[+DESCRIPTION?\bchmod\b changes the permission of each file "
@@ -253,7 +253,8 @@
case FTS_SL:
if (chmodf == chmod)
{
- fts_set(NiL, ent, FTS_FOLLOW);
+ if (!(flags & FTS_PHYSICAL) || (flags &
FTS_META) && ent->fts_level == 1)
+ fts_set(NiL, ent, FTS_FOLLOW);
break;
}
/*FALLTHROUGH*/
@@ -266,7 +267,7 @@
if ((*chmodf)(ent->fts_accpath, mode) >= 0)
{
if (notify == 2 || notify == 1 &&
(mode&S_IPERM) != (ent->fts_statp->st_mode&S_IPERM))
- sfprintf(sfstdout, "%s: mode changed to
%0.4o (%s)\n", ent->fts_accpath, mode, fmtmode(mode, 1)+1);
+ sfprintf(sfstdout, "%s: mode changed to
%0.4o (%s)\n", ent->fts_path, mode, fmtmode(mode, 1)+1);
}
else if (!force)
error(ERROR_system(0), "%s: cannot change
mode", ent->fts_accpath);
diff -r -N -u ksh93_2007_01_11/src/lib/libcmd/cksum.c
ksh93_2007_03_28/src/lib/libcmd/cksum.c
--- ksh93_2007_01_11/src/lib/libcmd/cksum.c 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libcmd/cksum.c 2007-02-07 20:25:43.000000000
+0100
@@ -0,0 +1,599 @@
+/***********************************************************************
+* *
+* 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
+/*
+ * Glenn Fowler
+ * AT&T Research
+ *
+ * sum -- list file checksum and size
+ */
+
+static const char usage[] =
+"[-?\n@(#)$Id: sum (AT&T Research) 2007-02-07 $\n]"
+USAGE_LICENSE
+"[+NAME?cksum,md5sum,sum - print file checksum and block count]"
+"[+DESCRIPTION?\bsum\b lists the checksum, and for most methods the block"
+" count, for each file argument. The standard input is read if there are"
+" no \afile\a arguments. \bgetconf UNIVERSE\b determines the default"
+" \bsum\b method: \batt\b for the \batt\b universe, \bbsd\b otherwise."
+" The default for the other commands is the command name itself. The"
+" \batt\b method is a true sum, all others are order dependent.]"
+"[+?Method names consist of a leading identifier and 0 or more options"
+" separated by -.]"
+"[+?\bgetconf PATH_RESOLVE\b determines how symbolic links are handled. This"
+" can be explicitly overridden by the \b--logical\b, \b--metaphysical\b,"
+" and \b--physical\b options below. \bPATH_RESOLVE\b can be one of:]{"
+" [+logical?Follow all symbolic links.]"
+" [+metaphysical?Follow command argument symbolic links,"
+" otherwise don't follow.]"
+" [+physical?Don't follow symbolic links.]"
+"}"
+
+"[a:all?List the checksum for all files. Use with \b--total\b to list both"
+" individual and total checksums and block counts.]"
+"[b:binary?Read files in binary mode. This is the default.]"
+"[c:check?Each \afile\a is interpreted as the output from a previous \bsum\b."
+" If \b--header\b or \b--permissions\b was specified in the previous"
+" \bsum\b then the checksum method is automatically determined,"
+" otherwise \b--method\b must be specified. The listed checksum is"
+" compared with the current value and a warning is issued for each file"
+" that does not match. If \afile\a was generated by \b--permissions\b"
+" then the file mode, user and group are also checked. Empty lines,"
+" lines starting with \b#<space>\b, or the line \b#\b are ignored. Lines"
+" containing no blanks are interpreted as [no]]\aname\a[=\avalue\a]]"
+" options:]{"
+" [+method=name?Checksum method to apply to subsequent lines.]"
+" [+permissions?Subsequent lines were generated with"
+" \b--permissions\b.]"
+"}"
+"[h:header?Print the checksum method as the first output line. Used with"
+" \b--check\b and \b--permissions\b.]"
+"[l:list?Each \afile\a is interpreted as a list of files, one per line,"
+" that is checksummed.]"
+"[p:permissions?If \b--check\b is not specified then list the file"
+" mode, user and group between the checksum and path. User and group"
+" matching the caller are output as \b-\b. If \b--check\b is"
+" specified then the mode, user and group for each path in \afile\a"
+" are updated if necessary to match those in \afile\a. A warning is"
+" printed on the standard error for each changed file.]"
+"[r:recursive?Recursively checksum the contents of directories.]"
+"[s:silent|status?No output for \b--check\b; 0 exit status means all sums"
+" matched, non-0 means at least one sum failed to match. Ignored for"
+" \b--permissions\b.]"
+"[t:total?List only the total checksum and block count of all files."
+" \b--all\b \b--total\b lists each checksum and the total. The"
+" total checksum and block count may be different from the checksum"
+" and block count of the catenation of all files due to partial"
+" blocks that may occur when the files are treated separately.]"
+"[T:text?Read files in text mode (i.e., treat \b\\r\\n\b as \b\\n\b).]"
+"[w!:warn?Warn about invalid \b--check\b lines.]"
+"[x:method|algorithm?Specifies the checksum \amethod\a to"
+" apply. Parenthesized method options are readonly implementation"
+" details.]:[method]{\fmethods\f}"
+"[L:logical|follow?Follow symbolic links when traversing directories. The"
+" default is determined by \bgetconf PATH_RESOLVE\b.]"
+"[H:metaphysical?Follow command argument symbolic links, otherwise don't"
+" follow symbolic links when traversing directories. The default is"
+" determined by \bgetconf PATH_RESOLVE\b.]"
+"[P:physical?Don't follow symbolic links when traversing directories. The"
+" default is determined by \bgetconf PATH_RESOLVE\b.]"
+
+"\n"
+"\n[ file ... ]\n"
+"\n"
+
+"[+SEE ALSO?\bgetconf\b(1), \btw\b(1), \buuencode\b(1)]"
+;
+
+#include <cmd.h>
+#include <sum.h>
+#include <ls.h>
+#include <fts.h>
+#include <error.h>
+
+typedef struct State_s /* program state */
+{
+ int all; /* list all items */
+ Sfio_t* check; /* check previous output */
+ gid_t gid; /* caller gid */
+ int header; /* list method on output */
+ int list; /* list file name too */
+ Sum_t* oldsum; /* previous sum method */
+ int permissions; /* include mode,uer,group */
+ int haveperm; /* permissions in the input */
+ int recursive; /* recursively descend dirs */
+ unsigned long size; /* combined size of all files */
+ int silent; /* silent check, 0 exit if ok */
+ int (*sort)(FTSENT* const*, FTSENT* const*);
+ Sum_t* sum; /* sum method */
+ int text; /* \r\n == \n */
+ int total; /* list totals only */
+ uid_t uid; /* caller uid */
+ int warn; /* invalid check line warnings */
+} State_t;
+
+static void verify(State_t*, char*, char*, Sfio_t*);
+
+/*
+ * open path for read mode
+ */
+
+static Sfio_t*
+openfile(const char* path, const char* mode)
+{
+ Sfio_t* sp;
+
+ if (!path || streq(path, "-") || streq(path, "/dev/stdin") ||
streq(path, "/dev/fd/0"))
+ {
+ sp = sfstdin;
+ sfopen(sp, NiL, mode);
+ }
+ else if (!(sp = sfopen(NiL, path, mode)))
+ error(ERROR_SYSTEM|2, "%s: cannot read", path);
+ return sp;
+}
+
+/*
+ * close an openfile() stream
+ */
+
+static int
+closefile(Sfio_t* sp)
+{
+ return sp == sfstdin ? 0 : sfclose(sp);
+}
+
+/*
+ * compute and print sum on an open file
+ */
+
+static void
+pr(State_t* state, Sfio_t* op, Sfio_t* ip, char* file, int perm, struct stat*
st, Sfio_t* check)
+{
+ register char* p;
+ register char* r;
+ register char* e;
+ register int peek;
+ struct stat ss;
+
+ if (check)
+ {
+ state->oldsum = state->sum;
+ while (p = sfgetr(ip, '\n', 1))
+ verify(state, p, file, check);
+ state->sum = state->oldsum;
+ if (state->warn && !sfeof(ip))
+ error(2, "%s: last line incomplete", file);
+ return;
+ }
+ suminit(state->sum);
+ if (state->text)
+ {
+ peek = 0;
+ while (p = sfreserve(ip, SF_UNBOUND, 0))
+ {
+ e = p + sfvalue(ip);
+ if (peek)
+ {
+ peek = 0;
+ if (*p != '\n')
+ sumblock(state->sum, "\r", 1);
+ }
+ while (r = memchr(p, '\r', e - p))
+ {
+ if (++r >= e)
+ {
+ e--;
+ peek = 1;
+ break;
+ }
+ sumblock(state->sum, p, r - p - (*r == '\n'));
+ p = r;
+ }
+ sumblock(state->sum, p, e - p);
+ }
+ if (peek)
+ sumblock(state->sum, "\r", 1);
+ }
+ else
+ while (p = sfreserve(ip, SF_UNBOUND, 0))
+ sumblock(state->sum, p, sfvalue(ip));
+ if (sfvalue(ip))
+ error(ERROR_SYSTEM|2, "%s: read error", file);
+ sumdone(state->sum);
+ if (!state->total || state->all)
+ {
+ sumprint(state->sum, op, SUM_SIZE|SUM_SCALE);
+ if (perm >= 0)
+ {
+ if (perm)
+ {
+ if (!st && fstat(sffileno(ip), st = &ss))
+ error(ERROR_SYSTEM|2, "%s: cannot
stat", file);
+ else
+ sfprintf(sfstdout, " %04o %s %s",
+ modex(st->st_mode & S_IPERM),
+ (st->st_uid != state->uid &&
((st->st_mode & S_ISUID) || (st->st_mode & S_IRUSR) && !(st->st_mode &
(S_IRGRP|S_IROTH)) || (st->st_mode & S_IXUSR) && !(st->st_mode &
(S_IXGRP|S_IXOTH)))) ? fmtuid(st->st_uid) : "-",
+ (st->st_gid != state->gid &&
((st->st_mode & S_ISGID) || (st->st_mode & S_IRGRP) && !(st->st_mode & S_IROTH)
|| (st->st_mode & S_IXGRP) && !(st->st_mode & S_IXOTH))) ? fmtgid(st->st_gid) :
"-");
+ }
+ if (ip != sfstdin)
+ sfprintf(op, " %s", file);
+ sfputc(op, '\n');
+ }
+ }
+}
+
+/*
+ * verify previous sum output
+ */
+
+static void
+verify(State_t* state, register char* s, char* check, Sfio_t* rp)
+{
+ register char* t;
+ char* e;
+ char* file;
+ int attr;
+ int mode;
+ int uid;
+ int gid;
+ Sfio_t* sp;
+ struct stat st;
+
+ if (!*s || *s == '#' && (!*(s + 1) || *(s + 1) == ' ' || *(s + 1) ==
'\t'))
+ return;
+ if (t = strchr(s, ' '))
+ {
+ if ((t - s) > 10 || !(file = strchr(t + 1, ' ')))
+ file = t;
+ *file++ = 0;
+ attr = 0;
+ if ((mode = strtol(file, &e, 8)) && *e == ' ' && (e - file) ==
4)
+ {
+ mode = modei(mode);
+ if (t = strchr(++e, ' '))
+ {
+ if (*e == '-' && (t - e) == 1)
+ uid = -1;
+ else
+ {
+ *t = 0;
+ uid = struid(e);
+ *t = ' ';
+ }
+ if (e = strchr(++t, ' '))
+ {
+ if (*t == '-' && (e - t) == 1)
+ gid = -1;
+ else
+ {
+ *e = 0;
+ gid = struid(t);
+ *e = ' ';
+ }
+ file = e + 1;
+ attr = 1;
+ }
+ }
+ }
+ if (sp = openfile(file, "rb"))
+ {
+ pr(state, rp, sp, file, -1, NiL, NiL);
+ if (!(t = sfstruse(rp)))
+ error(ERROR_SYSTEM|3, "out of space");
+ if (!streq(s, t))
+ {
+ if (state->silent)
+ error_info.errors++;
+ else
+ error(2, "%s: checksum changed", file);
+ }
+ else if (attr)
+ {
+ if (fstat(sffileno(sp), &st))
+ {
+ if (state->silent)
+ error_info.errors++;
+ else
+ error(ERROR_SYSTEM|2, "%s:
cannot stat", file);
+ }
+ else
+ {
+ if (uid < 0 || uid == st.st_uid)
+ uid = -1;
+ else if (!state->permissions)
+ {
+ if (state->silent)
+ error_info.errors++;
+ else
+ error(2, "%s: uid
should be %s", file, fmtuid(uid));
+ }
+ if (gid < 0 || gid == st.st_gid)
+ gid = -1;
+ else if (!state->permissions)
+ {
+ if (state->silent)
+ error_info.errors++;
+ else
+ error(2, "%s: gid
should be %s", file, fmtgid(gid));
+ }
+ if (state->permissions && (uid >= 0 ||
gid >= 0))
+ {
+ if (chown(file, uid, gid) < 0)
+ {
+ if (uid < 0)
+
error(ERROR_SYSTEM|2, "%s: cannot change group to %s", file, fmtgid(gid));
+ else if (gid < 0)
+
error(ERROR_SYSTEM|2, "%s: cannot change user to %s", file, fmtuid(uid));
+ else
+
error(ERROR_SYSTEM|2, "%s: cannot change user to %s and group to %s", file,
fmtuid(uid), fmtgid(gid));
+ }
+ else
+ {
+ if (uid < 0)
+ error(1, "%s:
changed group to %s", file, fmtgid(gid));
+ else if (gid < 0)
+ error(1, "%s:
changed user to %s", file, fmtuid(uid));
+ else
+ error(1, "%s:
changed user to %s and group to %s", file, fmtuid(uid), fmtgid(gid));
+ }
+ }
+ if ((st.st_mode & S_IPERM) ^ mode)
+ {
+ if (state->permissions)
+ {
+ if (chmod(file, mode) <
0)
+
error(ERROR_SYSTEM|2, "%s: cannot change mode to %s", file, fmtmode(mode, 0));
+ else
+
error(ERROR_SYSTEM|1, "%s: changed mode to %s", file, fmtmode(mode, 0));
+ }
+ else if (state->silent)
+ error_info.errors++;
+ else
+ error(2, "%s: mode
should be %s", file, fmtmode(mode, 0));
+ }
+ }
+ }
+ closefile(sp);
+ }
+ }
+ else if (strneq(s, "method=", 7))
+ {
+ s += 7;
+ if (state->sum != state->oldsum)
+ sumclose(state->sum);
+ if (!(state->sum = sumopen(s)))
+ error(3, "%s: %s: unknown checksum method", check, s);
+ }
+ else if (streq(s, "permissions"))
+ state->haveperm = 1;
+ else
+ error(1, "%s: %s: unknown option", check, s);
+}
+
+/*
+ * sum the list of files in lp
+ */
+
+static void
+list(State_t* state, register Sfio_t* lp)
+{
+ register char* file;
+ register Sfio_t* sp;
+
+ while (file = sfgetr(lp, '\n', 1))
+ if (sp = openfile(file, state->check ? "rt" : "rb"))
+ {
+ pr(state, sfstdout, sp, file, state->permissions, NiL,
state->check);
+ closefile(sp);
+ }
+}
+
+/*
+ * order child entries
+ */
+
+static int
+order(FTSENT* const* f1, FTSENT* const* f2)
+{
+ return strcoll((*f1)->fts_name, (*f2)->fts_name);
+}
+
+/*
+ * optget() info discipline function
+ */
+
+static int
+optinfo(Opt_t* op, Sfio_t* sp, const char* s, Optdisc_t* dp)
+{
+ if (streq(s, "methods"))
+ return sumusage(sp);
+ return 0;
+}
+
+int
+b_cksum(int argc, register char** argv, void* context)
+{
+ register int flags;
+ register char* s;
+ char* file;
+ Sfio_t* sp;
+ FTS* fts;
+ FTSENT* ent;
+ Optdisc_t optdisc;
+ State_t state;
+
+ cmdinit(argc, argv, context, ERROR_CATALOG, ERROR_NOTIFY);
+ memset(&state, 0, sizeof(state));
+ setlocale(LC_ALL, "");
+ flags = fts_flags() | FTS_TOP | FTS_NOPOSTORDER | FTS_NOSEEDOTDIR;
+ state.warn = 1;
+ optinit(&optdisc, optinfo);
+ for (;;)
+ {
+ switch (optget(argv, usage))
+ {
+ case 'a':
+ state.all = 1;
+ continue;
+ case 'b':
+ state.text = 0;
+ continue;
+ case 'c':
+ if (!(state.check = sfstropen()))
+ error(3, "out of space [check]");
+ continue;
+ case 'h':
+ state.header = 1;
+ continue;
+ case 'l':
+ state.list = 1;
+ continue;
+ case 'p':
+ state.permissions = 1;
+ continue;
+ case 'r':
+ flags &= ~FTS_TOP;
+ state.recursive = 1;
+ state.sort = order;
+ continue;
+ case 's':
+ state.silent = opt_info.num;
+ continue;
+ case 't':
+ state.total = 1;
+ continue;
+ case 'w':
+ state.warn = opt_info.num;
+ continue;
+ case 'x':
+ if (!(state.sum = sumopen(opt_info.arg)))
+ error(3, "%s: unknown checksum method",
opt_info.arg);
+ continue;
+ case 'H':
+ flags |= FTS_META|FTS_PHYSICAL;
+ continue;
+ case 'L':
+ flags &= ~(FTS_META|FTS_PHYSICAL);
+ continue;
+ case 'P':
+ flags &= ~FTS_META;
+ flags |= FTS_PHYSICAL;
+ continue;
+ case 'T':
+ state.text = 1;
+ continue;
+ case '?':
+ error(ERROR_USAGE|4, "%s", opt_info.arg);
+ break;
+ case ':':
+ error(2, "%s", opt_info.arg);
+ break;
+ }
+ break;
+ }
+ argv += opt_info.index;
+ if (error_info.errors)
+ error(ERROR_USAGE|4, "%s", optusage(NiL));
+
+ /*
+ * check the method
+ */
+
+ if (!state.sum && !(state.sum = sumopen(error_info.id)) && !(state.sum
= sumopen(astconf("UNIVERSE", NiL, NiL))))
+ state.sum = sumopen(NiL);
+
+ /*
+ * do it
+ */
+
+ if (state.permissions)
+ {
+ state.uid = geteuid();
+ state.gid = getegid();
+ state.silent = 0;
+ }
+ if (!state.check && (state.header || state.permissions))
+ {
+ sfprintf(sfstdout, "method=%s\n", state.sum->name);
+ if (state.permissions)
+ sfprintf(sfstdout, "permissions\n");
+ }
+ if (state.list)
+ {
+ if (*argv)
+ {
+ while (file = *argv++)
+ if (sp = openfile(file, "rt"))
+ {
+ list(&state, sp);
+ closefile(sp);
+ }
+ }
+ else if (sp = openfile(NiL, "rt"))
+ {
+ list(&state, sp);
+ closefile(sp);
+ }
+ }
+ else if (!*argv && !state.recursive)
+ pr(&state, sfstdout, sfstdin, "/dev/stdin", state.permissions,
NiL, state.check);
+ else if (!(fts = fts_open(argv, flags, state.sort)))
+ error(ERROR_system(1), "%s: not found", *argv);
+ else
+ {
+ while (!cmdquit() && (ent = fts_read(fts)))
+ switch (ent->fts_info)
+ {
+ case FTS_SL:
+ if (!(flags & FTS_PHYSICAL) || (flags &
FTS_META) && ent->fts_level == 1)
+ fts_set(NiL, ent, FTS_FOLLOW);
+ break;
+ case FTS_F:
+ if (sp = openfile(ent->fts_accpath, "rb"))
+ {
+ pr(&state, sfstdout, sp, ent->fts_path,
state.permissions, ent->fts_statp, state.check);
+ closefile(sp);
+ }
+ break;
+ case FTS_DC:
+ error(ERROR_warn(0), "%s: directory causes
cycle", ent->fts_accpath);
+ break;
+ case FTS_DNR:
+ error(ERROR_system(0), "%s: cannot read
directory", ent->fts_accpath);
+ break;
+ case FTS_DNX:
+ error(ERROR_system(0), "%s: cannot search
directory", ent->fts_accpath);
+ break;
+ case FTS_NS:
+ error(ERROR_system(0), "%s: not found",
ent->fts_accpath);
+ break;
+ }
+ fts_close(fts);
+ }
+ if (state.total)
+ {
+ sumprint(state.sum, sfstdout, SUM_TOTAL|SUM_SIZE|SUM_SCALE);
+ sfputc(sfstdout, '\n');
+ }
+ sumclose(state.sum);
+ return error_info.errors != 0;
+}
diff -r -N -u ksh93_2007_01_11/src/lib/libcmd/cut.c
ksh93_2007_03_28/src/lib/libcmd/cut.c
--- ksh93_2007_01_11/src/lib/libcmd/cut.c 2006-11-01 22:23:18.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libcmd/cut.c 2007-01-23 18:31:39.000000000
+0100
@@ -29,7 +29,7 @@
*/
static const char usage[] =
-"[-?\n@(#)$Id: cut (AT&T Research) 2006-07-17 $\n]"
+"[-?\n@(#)$Id: cut (AT&T Research) 2007-01-23 $\n]"
USAGE_LICENSE
"[+NAME?cut - cut out selected columns or fields of each line of a file]"
"[+DESCRIPTION?\bcut\b bytes, characters, or character-delimited fields "
@@ -97,9 +97,9 @@
int ldelim;
int seqno;
int reclen;
- int list[2];
signed char space[UCHAR_MAX];
Last_t last;
+ int list[2]; /* NOTE: must be last member */
} Cut_t;
#define HUGE (1<<14)
diff -r -N -u ksh93_2007_01_11/src/lib/libcmd/date.c
ksh93_2007_03_28/src/lib/libcmd/date.c
--- ksh93_2007_01_11/src/lib/libcmd/date.c 2006-11-01 21:16:22.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libcmd/date.c 2007-03-29 18:52:51.000000000
+0200
@@ -27,7 +27,7 @@
*/
static const char usage[] =
-"[-?\n@(#)$Id: date (AT&T Research) 2006-09-08 $\n]"
+"[-?\n@(#)$Id: date (AT&T Research) 2007-03-28 $\n]"
USAGE_LICENSE
"[+NAME?date - set/list/convert dates]"
"[+DESCRIPTION?\bdate\b sets the current date and time (with appropriate"
@@ -169,6 +169,8 @@
"}"
"[s:show?Show the date without setting the system time.]"
"[u:utc|gmt|zulu?Output dates in \acoordinated universal time\a (UTC).]"
+"[U:unelapsed?Interpret each argument as \bfmtelapsed\b(3) elapsed"
+" time and list the \bstrelapsed\b(3) 1/\ascale\a seconds.]#[scale]"
"[z:list-zones?List the known time zone table and exit. The table columns"
" are: country code, standard zone name, savings time zone name,"
" minutes west of \bUTC\b, and savings time minutes offset. Blank"
@@ -268,6 +270,7 @@
register char* s;
register Fmt_t* f;
char* t;
+ unsigned long u;
Time_t now;
Time_t ts;
Time_t te;
@@ -287,8 +290,8 @@
Tm_zone_t* listzones = 0; /* known time zone table */
int network = 0; /* don't set network time */
int show = 0; /* show date and don't set */
+ int unelapsed = 0; /* fmtelapsed() => strelapsed */
- NoP(argc);
cmdinit(argc, argv, context, ERROR_CATALOG, 0);
setlocale(LC_ALL, "");
tm_info.flags = TM_DATESTYLE;
@@ -342,6 +345,9 @@
case 'u':
tm_info.flags |= TM_UTC;
continue;
+ case 'U':
+ unelapsed = (int)opt_info.num;
+ continue;
case 'z':
listzones = tm_data.zone;
continue;
@@ -390,6 +396,17 @@
sfputr(sfstdout, fmtelapsed((unsigned long)tmxsec(e), 1), '\n');
show = 1;
}
+ else if (unelapsed)
+ {
+ while (s = *argv++)
+ {
+ u = strelapsed(s, &t, unelapsed);
+ if (*t)
+ error(3, "%s: invalid elapsed time", s);
+ sfprintf(sfstdout, "%lu\n", u);
+ }
+ show = 1;
+ }
else if (filetime)
{
if (!*argv)
diff -r -N -u ksh93_2007_01_11/src/lib/libcmd/getconf.c
ksh93_2007_03_28/src/lib/libcmd/getconf.c
--- ksh93_2007_01_11/src/lib/libcmd/getconf.c 2006-11-14 22:36:15.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libcmd/getconf.c 2007-02-07 21:08:17.000000000
+0100
@@ -27,7 +27,7 @@
*/
static const char usage[] =
-"[-?\n@(#)$Id: getconf (AT&T Research) 2006-11-11 $\n]"
+"[-?\n@(#)$Id: getconf (AT&T Research) 2007-02-07 $\n]"
USAGE_LICENSE
"[+NAME?getconf - get configuration values]"
"[+DESCRIPTION?\bgetconf\b displays the system configuration value for"
@@ -117,6 +117,7 @@
#include <cmd.h>
#include <proc.h>
+#include <ls.h>
typedef struct Path_s
{
@@ -134,15 +135,22 @@
register char* t;
char* pattern;
char* native;
+ char* cmd;
Path_t* e;
Path_t* p;
int flags;
int n;
+ int i;
+ int m;
+ int q;
char** oargv;
- char cmd[PATH_MAX];
+ char buf[PATH_MAX];
Path_t std[64];
+ struct stat st0;
+ struct stat st1;
static const char empty[] = "-";
+ static const Path_t equiv[] = { { "/bin", 4 }, { "/usr/bin", 8 } };
cmdinit(argc, argv, context, ERROR_CATALOG, 0);
oargv = argv;
@@ -268,19 +276,53 @@
defer:
/*
+ * defer to argv[0] if absolute and it exists
+ */
+
+ if ((cmd = oargv[0]) && *cmd == '/' && !access(cmd, X_OK))
+ goto found;
+
+ /*
* defer to the first getconf on $PATH that is also on the standard PATH
*/
e = std;
s = astconf("PATH", NiL, NiL);
+ q = !stat(equiv[0].path, &st0) && !stat(equiv[1].path, &st1) &&
st0.st_ino == st1.st_ino && st0.st_dev == st1.st_dev;
+ m = 0;
do
{
for (t = s; *s && *s != ':'; s++);
if ((n = s - t) && *t == '/')
{
- e->path = t;
- e->len = n;
- e++;
+ if (q)
+ for (i = 0; i < 2; i++)
+ if (n == equiv[i].len && !strncmp(t,
equiv[i].path, n))
+ {
+ if (m & (i+1))
+ t = 0;
+ else
+ {
+ m |= (i+1);
+ if (!(m & (!i+1)))
+ {
+ m |= (!i+1);
+ e->path = t;
+ e->len = n;
+ e++;
+ if (e >=
&std[elementsof(std)])
+ break;
+ t =
equiv[!i].path;
+ n =
equiv[!i].len;
+ }
+ }
+ }
+ if (t)
+ {
+ e->path = t;
+ e->len = n;
+ e++;
+ }
}
while (*s == ':')
s++;
@@ -303,9 +345,12 @@
for (p = std; p < e; p++)
if (p->len == n && !strncmp(t, p->path,
n))
{
- sfsprintf(cmd, sizeof(cmd),
"%-*.*s/%s", n, n, t, error_info.id);
- if (!access(cmd, X_OK))
+ sfsprintf(buf, sizeof(buf),
"%-*.*s/%s", n, n, t, error_info.id);
+ if (!access(buf, X_OK))
+ {
+ cmd = buf;
goto found;
+ }
}
}
while (*s == ':')
@@ -318,9 +363,12 @@
for (p = std; p < e; p++)
{
- sfsprintf(cmd, sizeof(cmd), "%-*.*s/%s", p->len, p->len,
p->path, error_info.id);
- if (!access(cmd, X_OK))
+ sfsprintf(buf, sizeof(buf), "%-*.*s/%s", p->len, p->len,
p->path, error_info.id);
+ if (!access(buf, X_OK))
+ {
+ cmd = buf;
goto found;
+ }
}
/*
diff -r -N -u ksh93_2007_01_11/src/lib/libcmd/Makefile
ksh93_2007_03_28/src/lib/libcmd/Makefile
--- ksh93_2007_01_11/src/lib/libcmd/Makefile 2006-11-01 21:25:14.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libcmd/Makefile 2007-02-26 17:32:20.000000000
+0100
@@ -15,19 +15,24 @@
cmd 1.2 :LIBRARY: RELEASE cmdinit.c \
cmd.h rev.h wc.h \
- basename.c cat.c chgrp.c chmod.c chown.c cmp.c comm.c \
- cp.c cut.c dirname.c date.c expr.c fds.c fmt.c fold.c \
- getconf.c head.c id.c join.c ln.c logname.c mkdir.c \
- mkfifo.c mv.c paste.c pathchk.c rev.c rm.c rmdir.c \
- stty.c sync.c tail.c tee.c tty.c uname.c uniq.c wc.c \
- revlib.c wclib.c \
+ basename.c cat.c chgrp.c chmod.c chown.c cksum.c cmp.c \
+ comm.c cp.c cut.c dirname.c date.c expr.c fds.c fmt.c \
+ fold.c getconf.c head.c id.c join.c ln.c logname.c md5sum.c \
+ mkdir.c mkfifo.c mv.c paste.c pathchk.c rev.c rm.c rmdir.c \
+ stty.c sum.c sync.c tail.c tee.c tty.c uname.c uniq.c wc.c \
+ revlib.c wclib.c sumlib.o \
-lfsg
+sumlib.o : +lsum
+ $(AR) x $(*:O=1) $(<)
+
$(INCLUDEDIR) :INSTALLPROTO: cmd.h cmdext.h cmdlist.h
"win32*" :NOOPTIMIZE: id.c
-cmdext.h : $(*$(*$(*cmd)):N=*.c)
+src = $(*$(*$(*cmd)):N=*.c)
+
+cmdext.h : (src) $$(--mam:+$$(src))
{
cat <<!
$("#")pragma prototyped
@@ -37,11 +42,11 @@
!
$(SED) \
- -e '/^b_[a-z_]*(/!d' \
+ -e '/^b_[a-z_][a-z_0-9]*(/!d' \
-e 's/^b_//' \
-e 's/(.*//' \
-e 's/.*/extern int b_&(int, char**, void*);/' \
- $(*) |
+ $($(~:O=1):T=F) |
$(SORT) -u
} > 1.$(tmp).h
if $(CMP) $(CMPFLAGS) 1.$(tmp).h $(<)
@@ -49,7 +54,7 @@
else $(MV) 1.$(tmp).h $(<)
fi
-cmdlist.h : $(*$(*$(*cmd)):N=*.c)
+cmdlist.h : (src)
{
cat <<!
$("#")pragma prototyped
@@ -59,11 +64,11 @@
!
$(SED) \
- -e '/^b_[a-z_]*(/!d' \
+ -e '/^b_[a-z_][a-z_0-9]*(/!d' \
-e 's/^b_//' \
-e 's/(.*//' \
-e 's/.*/CMDLIST(&)/' \
- $(*) |
+ $($(~):T=F) |
$(SORT) -u
} > 1.$(tmp).h
if $(CMP) $(CMPFLAGS) 1.$(tmp).h $(<)
diff -r -N -u ksh93_2007_01_11/src/lib/libcmd/Mamfile
ksh93_2007_03_28/src/lib/libcmd/Mamfile
--- ksh93_2007_01_11/src/lib/libcmd/Mamfile 2007-01-12 10:54:52.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libcmd/Mamfile 2007-03-29 19:07:13.000000000
+0200
@@ -1,4 +1,4 @@
-info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-01-11
+info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-03-26
setv INSTALLROOT ../../..
setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
setv PACKAGE_ast_LIB ${INSTALLROOT}/lib
@@ -156,16 +156,9 @@
make chown.c
prev cmd.h implicit
done chown.c
-make cmp.c
-prev ${PACKAGE_ast_INCLUDE}/ls.h implicit
-prev cmd.h implicit
-done cmp.c
-make comm.c
-prev cmd.h implicit
-done comm.c
-make cp.c
-make ${PACKAGE_ast_INCLUDE}/tmx.h implicit
-make ${PACKAGE_ast_INCLUDE}/tv.h implicit
+make cksum.c
+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
@@ -183,6 +176,30 @@
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
+prev ${PACKAGE_ast_INCLUDE}/fts.h implicit
+prev ${PACKAGE_ast_INCLUDE}/ls.h implicit
+make ${PACKAGE_ast_INCLUDE}/sum.h implicit
+prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
+prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
+done ${PACKAGE_ast_INCLUDE}/sum.h
+prev cmd.h implicit
+done cksum.c
+make cmp.c
+prev ${PACKAGE_ast_INCLUDE}/ls.h implicit
+prev cmd.h implicit
+done cmp.c
+make comm.c
+prev cmd.h implicit
+done comm.c
+make cp.c
+make ${PACKAGE_ast_INCLUDE}/tmx.h implicit
+make ${PACKAGE_ast_INCLUDE}/tv.h implicit
+prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
done ${PACKAGE_ast_INCLUDE}/tv.h dontcare
make ${PACKAGE_ast_INCLUDE}/tm.h implicit
make ${PACKAGE_ast_INCLUDE}/times.h implicit
@@ -250,6 +267,7 @@
prev cmd.h implicit
done fold.c
make getconf.c
+prev ${PACKAGE_ast_INCLUDE}/ls.h implicit
prev ${PACKAGE_ast_INCLUDE}/proc.h implicit
prev cmd.h implicit
done getconf.c
@@ -288,6 +306,9 @@
make logname.c
prev cmd.h implicit
done logname.c
+make md5sum.c
+prev cmd.h implicit
+done md5sum.c
make mkdir.c
prev ${PACKAGE_ast_INCLUDE}/ls.h implicit
prev cmd.h implicit
@@ -331,6 +352,9 @@
done ${PACKAGE_ast_INCLUDE}/ccode.h
prev cmd.h implicit
done stty.c
+make sum.c
+prev cmd.h implicit
+done sum.c
make sync.c
prev ${PACKAGE_ast_INCLUDE}/ls.h implicit
prev cmd.h implicit
@@ -376,9 +400,9 @@
prev cmd.h implicit
done revlib.c
make wclib.c
+prev ${PACKAGE_ast_INCLUDE}/endian.h implicit
make ${PACKAGE_ast_INCLUDE}/wchar.h implicit
make ${PACKAGE_ast_INCLUDE}/ast_wchar.h implicit
-prev ${PACKAGE_ast_INCLUDE}/endian.h implicit
prev ${PACKAGE_ast_INCLUDE}/stdio.h implicit
prev ${PACKAGE_ast_INCLUDE}/stdio.h implicit
prev ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
@@ -396,11 +420,11 @@
exec -
exec - !
exec - sed \
-exec - -e '/^b_[a-z_]*(/!d' \
+exec - -e '/^b_[a-z_][a-z_0-9]*(/!d' \
exec - -e 's/^b_//' \
exec - -e 's/(.*//' \
exec - -e 's/.*/extern int b_&(int, char**, void*);/' \
-exec - cmdinit.c basename.c cat.c chgrp.c chmod.c chown.c cmp.c comm.c
cp.c cut.c dirname.c date.c expr.c fds.c fmt.c fold.c getconf.c head.c id.c
join.c ln.c logname.c mkdir.c mkfifo.c mv.c paste.c pathchk.c rev.c rm.c
rmdir.c stty.c sync.c tail.c tee.c tty.c uname.c uniq.c wc.c revlib.c wclib.c |
+exec - cmdinit.c basename.c cat.c chgrp.c chmod.c chown.c cksum.c
cmp.c comm.c cp.c cut.c dirname.c date.c expr.c fds.c fmt.c fold.c getconf.c
head.c id.c join.c ln.c logname.c md5sum.c mkdir.c mkfifo.c mv.c paste.c
pathchk.c rev.c rm.c rmdir.c stty.c sum.c sync.c tail.c tee.c tty.c uname.c
uniq.c wc.c revlib.c wclib.c |
exec - sort -u
exec - } > 1.${COTEMP}.h
exec - if cmp 2>/dev/null -s 1.${COTEMP}.h cmdext.h
@@ -412,14 +436,7 @@
prev ${PACKAGE_ast_INCLUDE}/stk.h implicit
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}/error.h implicit
prev ${PACKAGE_ast_INCLUDE}/ast.h implicit
done cmd.h
done cmdinit.c
@@ -457,6 +474,12 @@
prev chown.c
exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -I${PACKAGE_ast_INCLUDE}
-D_BLD_cmd -D_PACKAGE_ast -c chown.c
done chown.o generated
+make cksum.o
+prev cksum.c
+meta cksum.o %.c>%.o cksum.c cksum
+prev cksum.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -I${PACKAGE_ast_INCLUDE}
-DERROR_CATALOG=\""libcmd"\" -D_PACKAGE_ast -D_BLD_cmd
-DUSAGE_LICENSE=\""[-author?Glenn Fowler <gsf at
research.att.com>][-author?David Korn <dgk at
research.att.com>][-copyright?Copyright (c) 1992-2007 AT&T Knowledge
Ventures][-license?http://www.opensource.org/licenses/cpl1.0.txt][--catalog?libcmd]"\"
-c cksum.c
+done cksum.o generated
make cmp.o
prev cmp.c
meta cmp.o %.c>%.o cmp.c cmp
@@ -553,6 +576,12 @@
prev logname.c
exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -I${PACKAGE_ast_INCLUDE}
-DERROR_CATALOG=\""libcmd"\" -D_BLD_cmd -D_PACKAGE_ast
-DUSAGE_LICENSE=\""[-author?Glenn Fowler <gsf at
research.att.com>][-author?David Korn <dgk at
research.att.com>][-copyright?Copyright (c) 1992-2007 AT&T Knowledge
Ventures][-license?http://www.opensource.org/licenses/cpl1.0.txt][--catalog?libcmd]"\"
-c logname.c
done logname.o generated
+make md5sum.o
+prev md5sum.c
+meta md5sum.o %.c>%.o md5sum.c md5sum
+prev md5sum.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -I${PACKAGE_ast_INCLUDE}
-D_BLD_cmd -D_PACKAGE_ast -c md5sum.c
+done md5sum.o generated
make mkdir.o
prev mkdir.c
meta mkdir.o %.c>%.o mkdir.c mkdir
@@ -607,6 +636,12 @@
prev stty.c
exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -I${PACKAGE_ast_INCLUDE}
-DERROR_CATALOG=\""libcmd"\" -D_PACKAGE_ast -D_BLD_cmd
-DUSAGE_LICENSE=\""[-author?Glenn Fowler <gsf at
research.att.com>][-author?David Korn <dgk at
research.att.com>][-copyright?Copyright (c) 1992-2007 AT&T Knowledge
Ventures][-license?http://www.opensource.org/licenses/cpl1.0.txt][--catalog?libcmd]"\"
-c stty.c
done stty.o generated
+make sum.o
+prev sum.c
+meta sum.o %.c>%.o sum.c sum
+prev sum.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -I${PACKAGE_ast_INCLUDE}
-D_BLD_cmd -D_PACKAGE_ast -c sum.c
+done sum.o generated
make sync.o
prev sync.c
meta sync.o %.c>%.o sync.c sync
@@ -661,8 +696,12 @@
prev wclib.c
exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -D_BLD_cmd -c wclib.c
done wclib.o generated
-exec - ${AR} cr libcmd.a cmdinit.o basename.o cat.o chgrp.o chmod.o chown.o
cmp.o comm.o cp.o cut.o dirname.o date.o expr.o fds.o fmt.o fold.o getconf.o
head.o id.o join.o ln.o logname.o mkdir.o mkfifo.o mv.o paste.o pathchk.o rev.o
rm.o rmdir.o
-exec - ${AR} cr libcmd.a stty.o sync.o tail.o tee.o tty.o uname.o uniq.o wc.o
revlib.o wclib.o
+make sumlib.o
+bind -lsum
+exec - ${AR} x ${mam_libsum} sumlib.o
+done sumlib.o generated
+exec - ${AR} cr libcmd.a cmdinit.o basename.o cat.o chgrp.o chmod.o chown.o
cksum.o cmp.o comm.o cp.o cut.o dirname.o date.o expr.o fds.o fmt.o fold.o
getconf.o head.o id.o join.o ln.o logname.o md5sum.o mkdir.o mkfifo.o mv.o
paste.o pathchk.o rev.o
+exec - ${AR} cr libcmd.a rm.o rmdir.o stty.o sum.o sync.o tail.o tee.o tty.o
uname.o uniq.o wc.o revlib.o wclib.o sumlib.o
exec - (ranlib libcmd.a) >/dev/null 2>&1 || true
done libcmd.a generated
done cmd virtual
@@ -712,46 +751,6 @@
done ${PACKAGE_ast_INCLUDE}/cmdext.h generated
make ${PACKAGE_ast_INCLUDE}/cmdlist.h
make cmdlist.h
-prev cmdinit.c
-prev basename.c
-prev cat.c
-prev chgrp.c
-prev chmod.c
-prev chown.c
-prev cmp.c
-prev comm.c
-prev cp.c
-prev cut.c
-prev dirname.c
-prev date.c
-prev expr.c
-prev fds.c
-prev fmt.c
-prev fold.c
-prev getconf.c
-prev head.c
-prev id.c
-prev join.c
-prev ln.c
-prev logname.c
-prev mkdir.c
-prev mkfifo.c
-prev mv.c
-prev paste.c
-prev pathchk.c
-prev rev.c
-prev rm.c
-prev rmdir.c
-prev stty.c
-prev sync.c
-prev tail.c
-prev tee.c
-prev tty.c
-prev uname.c
-prev uniq.c
-prev wc.c
-prev revlib.c
-prev wclib.c
exec - {
exec - cat <<!
exec - #pragma prototyped
@@ -761,11 +760,11 @@
exec -
exec - !
exec - sed \
-exec - -e '/^b_[a-z_]*(/!d' \
+exec - -e '/^b_[a-z_][a-z_0-9]*(/!d' \
exec - -e 's/^b_//' \
exec - -e 's/(.*//' \
exec - -e 's/.*/CMDLIST(&)/' \
-exec - cmdinit.c basename.c cat.c chgrp.c chmod.c chown.c cmp.c comm.c
cp.c cut.c dirname.c date.c expr.c fds.c fmt.c fold.c getconf.c head.c id.c
join.c ln.c logname.c mkdir.c mkfifo.c mv.c paste.c pathchk.c rev.c rm.c
rmdir.c stty.c sync.c tail.c tee.c tty.c uname.c uniq.c wc.c revlib.c wclib.c |
+exec - cmdinit.c basename.c cat.c chgrp.c chmod.c chown.c cksum.c
cmp.c comm.c cp.c cut.c dirname.c date.c expr.c fds.c fmt.c fold.c getconf.c
head.c id.c join.c ln.c logname.c md5sum.c mkdir.c mkfifo.c mv.c paste.c
pathchk.c rev.c rm.c rmdir.c stty.c sum.c sync.c tail.c tee.c tty.c uname.c
uniq.c wc.c revlib.c wclib.c |
exec - sort -u
exec - } > 1.${COTEMP}.h
exec - if cmp 2>/dev/null -s 1.${COTEMP}.h cmdlist.h
diff -r -N -u ksh93_2007_01_11/src/lib/libcmd/md5sum.c
ksh93_2007_03_28/src/lib/libcmd/md5sum.c
--- ksh93_2007_01_11/src/lib/libcmd/md5sum.c 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libcmd/md5sum.c 2007-02-07 21:55:50.000000000
+0100
@@ -0,0 +1,35 @@
+/***********************************************************************
+* *
+* 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
+/*
+ * Glenn Fowler
+ * AT&T Research
+ *
+ * md5sum -- implemented by cksum
+ */
+
+#include <cmd.h>
+
+int
+b_md5sum(int argc, register char** argv, void* context)
+{
+ return b_cksum(argc, argv, context);
+}
diff -r -N -u ksh93_2007_01_11/src/lib/libcmd/RELEASE
ksh93_2007_03_28/src/lib/libcmd/RELEASE
--- ksh93_2007_01_11/src/lib/libcmd/RELEASE 2007-01-03 22:39:38.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libcmd/RELEASE 2007-03-29 18:54:35.000000000
+0200
@@ -1,3 +1,15 @@
+07-03-28 date.c: add --unelepsed=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)
+07-02-24 Makefile: tweak cmdext.h action for --mam bootstrap
+07-02-09 Makefile: { cmdext.h cmdlist.h } depend on *.c list!
+07-02-09 Makefile: +lsum to bring in static -lsum (no dynamic right now)
+07-02-07 cksum.c: move from src/cmd/std with ftwalk => fts
+07-02-07 getconf.c: handle /bin == /usr/bin in defer logic
+07-01-26 chmod.c: don't FTS_FOLLOW if !FTS_PHYSICAL
+07-01-23 cut.c: Cut_t variable dimension list[] must be last member
+07-01-22 uname.c: fix -h typo that clobbered astconf() state -- ouch
07-01-02 fmt.c: fix buffer splice off by one bug -- what else
06-11-23 cmd.h: because of proto cmdinit cannot be a function like macro
06-11-21 cp.c: fix 06-10-31 const dot[] readonly assignment
diff -r -N -u ksh93_2007_01_11/src/lib/libcmd/sum.c
ksh93_2007_03_28/src/lib/libcmd/sum.c
--- ksh93_2007_01_11/src/lib/libcmd/sum.c 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libcmd/sum.c 2007-02-09 20:21:37.000000000
+0100
@@ -0,0 +1,35 @@
+/***********************************************************************
+* *
+* 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
+/*
+ * Glenn Fowler
+ * AT&T Research
+ *
+ * sum -- implemented by cksum
+ */
+
+#include <cmd.h>
+
+int
+b_sum(int argc, register char** argv, void* context)
+{
+ return b_cksum(argc, argv, context);
+}
diff -r -N -u ksh93_2007_01_11/src/lib/libcmd/tail.c
ksh93_2007_03_28/src/lib/libcmd/tail.c
--- ksh93_2007_01_11/src/lib/libcmd/tail.c 2006-11-01 21:25:35.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libcmd/tail.c 2007-02-14 18:59:50.000000000
+0100
@@ -303,10 +303,10 @@
* convert number with validity diagnostics
*/
-static _ast_intmax_t
+static intmax_t
num(register const char* s, char** e, int* f, int o)
{
- _ast_intmax_t number;
+ intmax_t number;
char* t;
int c;
diff -r -N -u ksh93_2007_01_11/src/lib/libcmd/tty.c
ksh93_2007_03_28/src/lib/libcmd/tty.c
--- ksh93_2007_01_11/src/lib/libcmd/tty.c 2006-11-01 21:17:23.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libcmd/tty.c 2007-03-11 19:18:53.000000000
+0100
@@ -27,14 +27,17 @@
*/
static const char usage[] =
-"[-?\n@(#)$Id: tty (AT&T Research) 1999-04-10 $\n]"
+"[-?\n@(#)$Id: tty (AT&T Research) 2007-03-11 $\n]"
USAGE_LICENSE
"[+NAME?tty - write the name of the terminal to standard output]"
"[+DESCRIPTION?\btty\b writes the name of the terminal that is connected "
- "to standard input onto standard output. If standard input is not "
+ "to standard input onto standard output. If the standard input is not "
"a terminal, \"\bnot a tty\b\" will be written to standard output.]"
-"[s:silent|quiet?Don't write anything, just return exit status. This option "
- "is obsolete.]"
+"[l:line-number?Write the synchronous line number of the terminal on a "
+ "separate line following the terminal name line. If the standard "
+ "input is not a synchronous terminal then "
+ "\"\bnot on an active synchronous line\b\" is written.]"
+"[s:silent|quiet?Disable the terminal name line. Use \b[[ -t 0 ]]]]\b
instead.]"
"[+EXIT STATUS?]{"
"[+0?Standard input is a tty.]"
"[+1?Standard input is not a tty.]"
@@ -46,15 +49,22 @@
#include <cmd.h>
+#if _mac_STWLINE
+#include <sys/stermio.h>
+#endif
+
int
b_tty(int argc, char *argv[], void* context)
{
- register int n,sflag=0;
+ register int n,sflag=0,lflag=0;
register char *tty;
cmdinit(argc, argv, context, ERROR_CATALOG, 0);
while (n = optget(argv, usage)) switch (n)
{
+ case 'l':
+ lflag++;
+ break;
case 's':
sflag++;
break;
@@ -69,11 +79,16 @@
error(ERROR_usage(2), "%s", optusage(NiL));
if(!(tty=ttyname(0)))
{
- tty = "not a tty";
+ tty = ERROR_translate(0, 0, 0, "not a tty");
error_info.errors++;
}
if(!sflag)
sfputr(sfstdout,tty,'\n');
+#if _mac_STWLINE
+ if(lflag && (n = ioctl(0, STWLINE, 0)) >= 0)
+ error(ERROR_OUTPUT, 1, "synchronous line %d", n);
+ else
+#endif
+ error(ERROR_OUTPUT, 1, "not on an active synchronous line");
return(error_info.errors);
}
-
diff -r -N -u ksh93_2007_01_11/src/lib/libcmd/uname.c
ksh93_2007_03_28/src/lib/libcmd/uname.c
--- ksh93_2007_01_11/src/lib/libcmd/uname.c 2006-11-01 21:17:27.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libcmd/uname.c 2007-01-22 21:49:20.000000000
+0100
@@ -28,7 +28,7 @@
*/
static const char usage[] =
-"[-?\n@(#)$Id: uname (AT&T Research) 2006-05-09 $\n]"
+"[-?\n@(#)$Id: uname (AT&T Research) 2007-01-22 $\n]"
USAGE_LICENSE
"[+NAME?uname - identify the current system ]"
"[+DESCRIPTION?By default \buname\b writes the operating system name to"
@@ -431,7 +431,7 @@
{
if (!*(s = astconf("HW_SERIAL", NiL, NiL)))
#if _lib_gethostid
- sfsprintf(s, sizeof(buf), "%08x", gethostid());
+ sfsprintf(s = buf, sizeof(buf), "%08x",
gethostid());
#else
/*NOP*/;
#endif
diff -r -N -u ksh93_2007_01_11/src/lib/libcmd/wclib.c
ksh93_2007_03_28/src/lib/libcmd/wclib.c
--- ksh93_2007_01_11/src/lib/libcmd/wclib.c 2006-11-01 21:17:33.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libcmd/wclib.c 2007-03-26 06:05:52.000000000
+0200
@@ -30,14 +30,19 @@
#include <wc.h>
#include <ctype.h>
-#if _hdr_wchar
+#if _hdr_wchar && _hdr_wctype
+
#include <wchar.h>
-#endif
+#include <wctype.h>
+
+#else
#ifndef iswspace
#define iswspace(x) isspace(x)
#endif
+#endif
+
#define endline(c) (((signed char)-1)<0?(c)<0:(c)==((char)-1))
#define mbok(p,n)
(((n)<1)?0:mbwide()?((*ast.mb_towc)(NiL,(char*)(p),n)>=0):1)
diff -r -N -u ksh93_2007_01_11/src/lib/libdll/Mamfile
ksh93_2007_03_28/src/lib/libdll/Mamfile
--- ksh93_2007_01_11/src/lib/libdll/Mamfile 2007-01-12 10:54:54.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libdll/Mamfile 2007-03-29 19:07:14.000000000
+0200
@@ -1,4 +1,4 @@
-info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-01-11
+info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-03-26
setv INSTALLROOT ../../..
setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
setv PACKAGE_ast_LIB ${INSTALLROOT}/lib
diff -r -N -u ksh93_2007_01_11/src/lib/libsum/Makefile
ksh93_2007_03_28/src/lib/libsum/Makefile
--- ksh93_2007_01_11/src/lib/libsum/Makefile 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libsum/Makefile 2007-02-07 20:21:56.000000000
+0100
@@ -0,0 +1,11 @@
+:PACKAGE: ast
+
+LICENSE = since=1996,author=gsf
+
+CCFLAGS = $(CC.OPTIMIZE) $(CC.PIC)
+
+sum 1.0 :LIBRARY: sum.h sumlib.c
+
+$(INCLUDEDIR) :INSTALLPROTO: sum.h
+
+:: RELEASE
diff -r -N -u ksh93_2007_01_11/src/lib/libsum/Mamfile
ksh93_2007_03_28/src/lib/libsum/Mamfile
--- ksh93_2007_01_11/src/lib/libsum/Mamfile 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libsum/Mamfile 2007-03-29 19:07:14.000000000
+0200
@@ -0,0 +1,207 @@
+info mam static 00000 1994-07-17 make (AT&T Research) 5.2 2007-03-26
+setv INSTALLROOT ../../..
+setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
+setv PACKAGE_ast_LIB ${INSTALLROOT}/lib
+setv PACKAGEROOT ../../../../..
+setv AR ar
+setv ARFLAGS cr
+setv AS as
+setv ASFLAGS
+setv CC cc
+setv mam_cc_FLAGS ${mam_cc_PIC}
+setv CCFLAGS ${-debug-symbols?1?${mam_cc_DEBUG}
-D_BLD_DEBUG?${mam_cc_OPTIMIZE}?}
+setv CCLDFLAGS ${-strip-symbols?1?${mam_cc_LD_STRIP}??}
+setv COTEMP $$
+setv CPIO cpio
+setv CPIOFLAGS
+setv CPP "${CC} -E"
+setv F77 f77
+setv HOSTCC ${CC}
+setv IGNORE
+setv LD ld
+setv LDFLAGS
+setv LEX lex
+setv LEXFLAGS
+setv LPR lpr
+setv LPRFLAGS
+setv M4FLAGS
+setv NMAKE nmake
+setv NMAKEFLAGS
+setv PR pr
+setv PRFLAGS
+setv SHELL /bin/sh
+setv SILENT
+setv TAR tar
+setv YACC yacc
+setv YACCFLAGS -d
+make ${PACKAGEROOT}/lib/package/ast.lic
+done ${PACKAGEROOT}/lib/package/ast.lic
+make install
+make sum
+make libsum.a archive
+make sum.req
+exec - set -
+exec - echo 'int main(){return 0;}' > 1.${COTEMP}.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -c 1.${COTEMP}.c &&
+exec - x=`${CC} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} -o 1.${COTEMP}.x
1.${COTEMP}.o -l'*' 2>&1 | sed -e 's/[][()+...@?]/#/g' || :` &&
+exec - {
+exec - case "" in
+exec - *?) echo " " ;;
+exec - esac
+exec - for i in sum ast
+exec - do case $i in
+exec - "sum"|sum)
+exec - ;;
+exec - *) if test ! -f ${INSTALLROOT}/lib/lib$i.a
+exec - then case `{ ${CC} ${mam_cc_FLAGS} ${CCFLAGS}
-L${INSTALLROOT}/lib ${LDFLAGS} -o 1.${COTEMP}.x 1.${COTEMP}.o -l$i 2>&1 ||
echo '' $x ;} | sed -e 's/[][()+...@?]/#/g' || :` in
+exec - *$x*) case `{ ${CC} ${mam_cc_FLAGS}
${CCFLAGS} ${LDFLAGS} -o 1.${COTEMP}.x 1.${COTEMP}.o -l$i 2>&1 || echo ''
$x ;} | sed -e 's/[][()+...@?]/#/g' || :` in
+exec - *$x*) continue ;;
+exec - esac
+exec - ;;
+exec - esac
+exec - fi
+exec - ;;
+exec - esac
+exec - echo " -l$i"
+exec - done
+exec - } > sum.req
+exec - rm -f 1.${COTEMP}.*
+done sum.req generated
+make sumlib.o
+make sumlib.c
+make sum-sha2.c implicit
+make ${PACKAGE_ast_INCLUDE}/endian.h implicit
+make ${PACKAGE_ast_INCLUDE}/bytesex.h implicit
+make ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
+make ${PACKAGE_ast_INCLUDE}/ast_map.h implicit
+done ${PACKAGE_ast_INCLUDE}/ast_map.h dontcare
+prev ${PACKAGE_ast_INCLUDE}/endian.h implicit
+done ${PACKAGE_ast_INCLUDE}/ast_common.h dontcare
+done ${PACKAGE_ast_INCLUDE}/bytesex.h dontcare
+done ${PACKAGE_ast_INCLUDE}/endian.h dontcare
+done sum-sha2.c
+make sum-sha1.c implicit
+done sum-sha1.c
+make sum-prng.c implicit
+make ${PACKAGE_ast_INCLUDE}/fnv.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
+done ${PACKAGE_ast_INCLUDE}/fnv.h
+done sum-prng.c
+make sum-md5.c implicit
+done sum-md5.c
+make sum-crc.c implicit
+done sum-crc.c
+make sum-bsd.c implicit
+done sum-bsd.c
+make sum-ast4.c implicit
+done sum-ast4.c
+make sum-att.c implicit
+done sum-att.c
+make ${PACKAGE_ast_INCLUDE}/hashpart.h implicit
+prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
+done ${PACKAGE_ast_INCLUDE}/hashpart.h
+make ${PACKAGE_ast_INCLUDE}/swap.h implicit
+prev ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
+prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
+done ${PACKAGE_ast_INCLUDE}/swap.h
+prev ${PACKAGE_ast_INCLUDE}/endian.h implicit
+make sum.h implicit
+make ${PACKAGE_ast_INCLUDE}/ast.h implicit
+make ${PACKAGE_ast_INCLUDE}/vmalloc.h implicit
+prev ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
+make ${PACKAGE_ast_INCLUDE}/ast_std.h implicit
+make ${PACKAGE_ast_INCLUDE}/regex.h implicit
+prev ${PACKAGE_ast_INCLUDE}/ast_common.h implicit
+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
+done ${PACKAGE_ast_INCLUDE}/ast_botch.h dontcare
+make ${PACKAGE_ast_INCLUDE}/ast_limits.h implicit
+done ${PACKAGE_ast_INCLUDE}/ast_limits.h dontcare
+make ${PACKAGE_ast_INCLUDE}/ast_fcntl.h implicit
+make ${PACKAGE_ast_INCLUDE}/ast_fs.h implicit
+done ${PACKAGE_ast_INCLUDE}/ast_fs.h dontcare
+done ${PACKAGE_ast_INCLUDE}/ast_fcntl.h dontcare
+make ${PACKAGE_ast_INCLUDE}/ast_getopt.h implicit
+prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
+done ${PACKAGE_ast_INCLUDE}/ast_getopt.h dontcare
+make ${PACKAGE_ast_INCLUDE}/ast_sys.h implicit
+make ${PACKAGE_ast_INCLUDE}/getopt.h implicit
+prev ${PACKAGE_ast_INCLUDE}/ast_getopt.h implicit
+prev ${PACKAGE_ast_INCLUDE}/prototyped.h implicit
+done ${PACKAGE_ast_INCLUDE}/getopt.h dontcare
+prev ${PACKAGE_ast_INCLUDE}/endian.h implicit
+prev ${PACKAGE_ast_INCLUDE}/endian.h implicit
+done ${PACKAGE_ast_INCLUDE}/ast_sys.h dontcare
+make ${PACKAGE_ast_INCLUDE}/ast_lib.h implicit
+done ${PACKAGE_ast_INCLUDE}/ast_lib.h dontcare
+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}/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}/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
+done sum.h
+done sumlib.c
+meta sumlib.o %.c>%.o sumlib.c sumlib
+prev sumlib.c
+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -I${PACKAGE_ast_INCLUDE}
-D_PACKAGE_ast -c sumlib.c
+done sumlib.o generated
+exec - ${AR} cr libsum.a sumlib.o
+exec - (ranlib libsum.a) >/dev/null 2>&1 || true
+done libsum.a generated
+done sum virtual
+prev libsum.a archive
+make ${INSTALLROOT}/lib
+exec - if silent test ! -d ${INSTALLROOT}/lib
+exec - then mkdir -p ${INSTALLROOT}/lib
+exec - fi
+done ${INSTALLROOT}/lib generated
+make ${INSTALLROOT}/lib/libsum.a archive
+prev ${INSTALLROOT}/lib
+prev libsum.a archive
+exec - test '' = 'libsum.a' || ${STDCMP} 2>/dev/null -s libsum.a
${INSTALLROOT}/lib/libsum.a || { ${STDMV} ${INSTALLROOT}/lib/libsum.a
${INSTALLROOT}/lib/libsum.a.old 2>/dev/null || true; ${STDCP} libsum.a
${INSTALLROOT}/lib/libsum.a ;}
+exec - (ranlib ${INSTALLROOT}/lib/libsum.a) >/dev/null 2>&1 || true
+done ${INSTALLROOT}/lib/libsum.a generated
+make ${INSTALLROOT}/lib/lib
+exec - if silent test ! -d ${INSTALLROOT}/lib/lib
+exec - then mkdir -p ${INSTALLROOT}/lib/lib
+exec - fi
+done ${INSTALLROOT}/lib/lib generated
+make ${INSTALLROOT}/lib/lib/sum
+prev ${INSTALLROOT}/lib/lib
+prev sum.req
+exec - test '' = 'sum.req' || ${STDCMP} 2>/dev/null -s sum.req
${INSTALLROOT}/lib/lib/sum || { ${STDMV} ${INSTALLROOT}/lib/lib/sum
${INSTALLROOT}/lib/lib/sum.old 2>/dev/null || true; ${STDCP} sum.req
${INSTALLROOT}/lib/lib/sum ;}
+done ${INSTALLROOT}/lib/lib/sum generated
+make ${PACKAGE_ast_INCLUDE}
+exec - if silent test ! -d ${PACKAGE_ast_INCLUDE}
+exec - then mkdir -p ${PACKAGE_ast_INCLUDE}
+exec - fi
+done ${PACKAGE_ast_INCLUDE} generated
+make ${PACKAGE_ast_INCLUDE}/sum.h
+prev ${PACKAGE_ast_INCLUDE}
+prev sum.h
+exec - proto -p -s -l ${PACKAGEROOT}/lib/package/ast.lic '-o
since=1996,author=gsf' sum.h > 1.${COTEMP}.x
+exec - if cmp 2>/dev/null -s ${PACKAGE_ast_INCLUDE}/sum.h 1.${COTEMP}.x
+exec - then rm -f 1.${COTEMP}.x
+exec - else mv 1.${COTEMP}.x ${PACKAGE_ast_INCLUDE}/sum.h
+exec - fi
+done ${PACKAGE_ast_INCLUDE}/sum.h generated
+done install virtual
+make test
+done test dontcare virtual
diff -r -N -u ksh93_2007_01_11/src/lib/libsum/RELEASE
ksh93_2007_03_28/src/lib/libsum/RELEASE
--- ksh93_2007_01_11/src/lib/libsum/RELEASE 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libsum/RELEASE 2007-02-23 19:21:06.000000000
+0100
@@ -0,0 +1,8 @@
+05-02-14 sumlib.c: split into sum-*.c
+ sum-sha2.c: add SHA { 256 384 512 }
+04-02-29 Makefile: compile with $(CC.PIC) for codexlib/sum $(CC.DLL)
+03-12-16 add { crc prng } generic methods and maps[] to these methods
+03-12-16 sum.h,sumlib.c: add sumdata()
+03-09-29 sumlib.c: fix FNV to use ^ instead of +
+03-04-28 sumlib.c: drop md5 `zeroize' for performance
+ sumlib.c: add FIPS 180-1 SHA-1
diff -r -N -u ksh93_2007_01_11/src/lib/libsum/sum-ast4.c
ksh93_2007_03_28/src/lib/libsum/sum-ast4.c
--- ksh93_2007_01_11/src/lib/libsum/sum-ast4.c 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libsum/sum-ast4.c 2007-02-23 19:08:59.000000000
+0100
@@ -0,0 +1,120 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1996-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> *
+* *
+***********************************************************************/
+#pragma prototyped
+
+/*
+ * ast4
+ */
+
+#define ast4_description \
+ "The \bast\b 128 bit PRNG hash generated by catenating 4 separate 32 \
+ bit PNRG hashes. The block count is not printed."
+#define ast4_options 0
+#define ast4_match "ast4|32x4|tw"
+#define ast4_done long_done
+#define ast4_scale 0
+
+typedef struct Ast4_sum_s
+{
+ uint32_t sum0;
+ uint32_t sum1;
+ uint32_t sum2;
+ uint32_t sum3;
+} Ast4_sum_t;
+
+typedef struct Ast4_s
+{
+ _SUM_PUBLIC_
+ _SUM_PRIVATE_
+ Ast4_sum_t cur;
+ Ast4_sum_t tot;
+ unsigned char buf[sizeof(Ast4_sum_t)];
+} Ast4_t;
+
+static int
+ast4_init(Sum_t* p)
+{
+ register Ast4_t* a = (Ast4_t*)p;
+
+ a->tot.sum0 ^= a->cur.sum0;
+ a->cur.sum0 = 0;
+ a->tot.sum1 ^= a->cur.sum1;
+ a->cur.sum1 = 0;
+ a->tot.sum2 ^= a->cur.sum2;
+ a->cur.sum2 = 0;
+ a->tot.sum3 ^= a->cur.sum3;
+ a->cur.sum3 = 0;
+ return 0;
+}
+
+static Sum_t*
+ast4_open(const Method_t* method, const char* name)
+{
+ Ast4_t* p;
+
+ if (p = newof(0, Ast4_t, 1, 0))
+ {
+ p->method = (Method_t*)method;
+ p->name = name;
+ }
+ return (Sum_t*)p;
+}
+
+static int
+ast4_block(Sum_t* p, const void* s, size_t n)
+{
+ register Ast4_sum_t* a = &((Ast4_t*)p)->cur;
+ register unsigned char* b = (unsigned char*)s;
+ register unsigned char* e = b + n;
+ register int c;
+
+ while (b < e)
+ {
+ c = *b++;
+ a->sum0 = a->sum0 * 0x63c63cd9 + 0x9c39c33d + c;
+ a->sum1 = a->sum1 * 0x00000011 + 0x00017cfb + c;
+ a->sum2 = a->sum2 * 0x12345679 + 0x3ade68b1 + c;
+ a->sum3 = a->sum3 * 0xf1eac01d + 0xcafe10af + c;
+ }
+ return 0;
+}
+
+static int
+ast4_print(Sum_t* p, Sfio_t* sp, int flags)
+{
+ register Ast4_sum_t* a;
+
+ a = (flags & SUM_TOTAL) ? &((Ast4_t*)p)->tot : &((Ast4_t*)p)->cur;
+ sfprintf(sp, "%06..64u%06..64u%06..64u%06..64u", a->sum0, a->sum1,
a->sum2, a->sum3);
+ return 0;
+}
+
+static int
+ast4_data(Sum_t* p, Sumdata_t* data)
+{
+ data->size = sizeof(((Ast4_t*)p)->cur);
+ data->num = 0;
+#if _ast_intswap
+ swapmem(_ast_intswap, data->buf = ((Ast4_t*)p)->buf,
&((Ast4_t*)p)->cur, sizeof(((Ast4_t*)p)->cur));
+#else
+ data->buf = &((Ast4_t*)p)->cur;
+#endif
+ return 0;
+}
diff -r -N -u ksh93_2007_01_11/src/lib/libsum/sum-att.c
ksh93_2007_03_28/src/lib/libsum/sum-att.c
--- ksh93_2007_01_11/src/lib/libsum/sum-att.c 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libsum/sum-att.c 2007-02-14 19:03:52.000000000
+0100
@@ -0,0 +1,60 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1996-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> *
+* *
+***********************************************************************/
+#pragma prototyped
+
+/*
+ * att
+ */
+
+#define att_description \
+ "The system 5 release 4 checksum. This is the default for \bsum\b \
+ when \bgetconf UNIVERSE\b is \batt\b. This is the only true sum; \
+ all of the other methods are order dependent."
+#define att_options 0
+#define att_match "att|sys5|s5|default"
+#define att_open long_open
+#define att_init long_init
+#define att_print long_print
+#define att_data long_data
+#define att_scale 512
+
+static int
+att_block(register Sum_t* p, const void* s, size_t n)
+{
+ register uint32_t c = ((Integral_t*)p)->sum;
+ register unsigned char* b = (unsigned char*)s;
+ register unsigned char* e = b + n;
+
+ while (b < e)
+ c += *b++;
+ ((Integral_t*)p)->sum = c;
+ return 0;
+}
+
+static int
+att_done(Sum_t* p)
+{
+ register uint32_t c = ((Integral_t*)p)->sum;
+
+ c = (c & 0xffff) + ((c >> 16) & 0xffff);
+ c = (c & 0xffff) + (c >> 16);
+ ((Integral_t*)p)->sum = c & 0xffff;
+ return short_done(p);
+}
diff -r -N -u ksh93_2007_01_11/src/lib/libsum/sum-bsd.c
ksh93_2007_03_28/src/lib/libsum/sum-bsd.c
--- ksh93_2007_01_11/src/lib/libsum/sum-bsd.c 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libsum/sum-bsd.c 2007-02-14 19:04:08.000000000
+0100
@@ -0,0 +1,48 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1996-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> *
+* *
+***********************************************************************/
+#pragma prototyped
+
+/*
+ * bsd
+ */
+
+#define bsd_description \
+ "The BSD checksum."
+#define bsd_options 0
+#define bsd_match "bsd|ucb"
+#define bsd_open long_open
+#define bsd_init long_init
+#define bsd_done short_done
+#define bsd_print long_print
+#define bsd_data long_data
+#define bsd_scale 1024
+
+static int
+bsd_block(register Sum_t* p, const void* s, size_t n)
+{
+ register uint32_t c = ((Integral_t*)p)->sum;
+ register unsigned char* b = (unsigned char*)s;
+ register unsigned char* e = b + n;
+
+ while (b < e)
+ c = ((c >> 1) + *b++ + ((c & 01) ? 0x8000 : 0)) & 0xffff;
+ ((Integral_t*)p)->sum = c;
+ return 0;
+}
diff -r -N -u ksh93_2007_01_11/src/lib/libsum/sum-crc.c
ksh93_2007_03_28/src/lib/libsum/sum-crc.c
--- ksh93_2007_01_11/src/lib/libsum/sum-crc.c 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libsum/sum-crc.c 2007-02-14 19:04:26.000000000
+0100
@@ -0,0 +1,191 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1996-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> *
+* *
+***********************************************************************/
+#pragma prototyped
+
+/*
+ * crc
+ */
+
+#define crc_description \
+ "32 bit CRC (cyclic redundancy check)."
+#define crc_options "\
+[+polynomial?The 32 bit crc polynomial bitmask with implicit bit
32.]:[mask:=0xedb88320]\
+[+done?XOR the final crc value with \anumber\a. 0xffffffff is used if
\anumber\a is omitted.]:?[number:=0]\
+[+init?The initial crc value. 0xffffffff is used if \anumber\a is
omitted.]:?[number:=0]\
+[+rotate?XOR each input character with the high order crc byte (instead of the
low order).]\
+[+size?Include the total number of bytes in the crc. \anumber\a, if specified,
is first XOR'd into the size.]:?[number:=0]\
+"
+#define crc_match "crc"
+#define crc_open crc_open
+#define crc_print long_print
+#define crc_data long_data
+#define crc_scale 0
+
+typedef uint32_t Crcnum_t;
+
+typedef struct Crc_s
+{
+ _SUM_PUBLIC_
+ _SUM_PRIVATE_
+ _INTEGRAL_PRIVATE_
+ Crcnum_t init;
+ Crcnum_t done;
+ Crcnum_t xorsize;
+ Crcnum_t tab[256];
+ unsigned int addsize;
+ unsigned int rotate;
+} Crc_t;
+
+#define CRC(p,s,c) (s = (s >> 8) ^ (p)->tab[(s ^ (c)) & 0xff])
+#define CRCROTATE(p,s,c) (s = (s << 8) ^ (p)->tab[((s >> 24) ^ (c)) &
0xff])
+
+static Sum_t*
+crc_open(const Method_t* method, const char* name)
+{
+ register Crc_t* sum;
+ register const char* s;
+ register const char* t;
+ register const char* v;
+ register int i;
+ register int j;
+ Crcnum_t polynomial;
+ Crcnum_t x;
+
+ if (sum = newof(0, Crc_t, 1, 0))
+ {
+ sum->method = (Method_t*)method;
+ sum->name = name;
+ }
+ polynomial = 0xedb88320;
+ s = name;
+ while (*(t = s))
+ {
+ for (t = s, v = 0; *s && *s != '-'; s++)
+ if (*s == '=' && !v)
+ v = s;
+ i = (v ? v : s) - t;
+ if (isdigit(*t) || v && i >= 4 && strneq(t, "poly", 4) && (t =
v + 1))
+ polynomial = strtoul(t, NiL, 0);
+ else if (strneq(t, "done", i))
+ sum->done = v ? strtoul(v + 1, NiL, 0) : ~sum->done;
+ else if (strneq(t, "init", i))
+ sum->init = v ? strtoul(v + 1, NiL, 0) : ~sum->init;
+ else if (strneq(t, "rotate", i))
+ sum->rotate = 1;
+ else if (strneq(t, "size", i))
+ {
+ sum->addsize = 1;
+ if (v)
+ sum->xorsize = strtoul(v + 1, NiL, 0);
+ }
+ if (*s == '-')
+ s++;
+ }
+ if (sum->rotate)
+ {
+ Crcnum_t t;
+ Crcnum_t p[8];
+
+ p[0] = polynomial;
+ for (i = 1; i < 8; i++)
+ p[i] = (p[i-1] << 1) ^ ((p[i-1] & 0x80000000) ?
polynomial : 0);
+ for (i = 0; i < elementsof(sum->tab); i++)
+ {
+ t = 0;
+ x = i;
+ for (j = 0; j < 8; j++)
+ {
+ if (x & 1)
+ t ^= p[j];
+ x >>= 1;
+ }
+ sum->tab[i] = t;
+ }
+ }
+ else
+ {
+ for (i = 0; i < elementsof(sum->tab); i++)
+ {
+ x = i;
+ for (j = 0; j < 8; j++)
+ x = (x>>1) ^ ((x & 1) ? polynomial : 0);
+ sum->tab[i] = x;
+ }
+ }
+ return (Sum_t*)sum;
+}
+
+static int
+crc_init(Sum_t* p)
+{
+ Crc_t* sum = (Crc_t*)p;
+
+ sum->sum = sum->init;
+ return 0;
+}
+
+static int
+crc_block(Sum_t* p, const void* s, size_t n)
+{
+ Crc_t* sum = (Crc_t*)p;
+ register Crcnum_t c = sum->sum;
+ register unsigned char* b = (unsigned char*)s;
+ register unsigned char* e = b + n;
+
+ if (sum->rotate)
+ while (b < e)
+ CRCROTATE(sum, c, *b++);
+ else
+ while (b < e)
+ CRC(sum, c, *b++);
+ sum->sum = c;
+ return 0;
+}
+
+static int
+crc_done(Sum_t* p)
+{
+ register Crc_t* sum = (Crc_t*)p;
+ register Crcnum_t c;
+ register uintmax_t n;
+ int i;
+ int j;
+
+ c = sum->sum;
+ if (sum->addsize)
+ {
+ n = sum->size ^ sum->xorsize;
+ if (sum->rotate)
+ while (n)
+ {
+ CRCROTATE(sum, c, n);
+ n >>= 8;
+ }
+ else
+ for (i = 0, j = 32; i < 4; i++)
+ {
+ j -= 8;
+ CRC(sum, c, n >> j);
+ }
+ }
+ sum->sum = c ^ sum->done;
+ sum->total_sum ^= (sum->sum &= 0xffffffff);
+ return 0;
+}
diff -r -N -u ksh93_2007_01_11/src/lib/libsum/sum.h
ksh93_2007_03_28/src/lib/libsum/sum.h
--- ksh93_2007_01_11/src/lib/libsum/sum.h 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libsum/sum.h 2007-02-14 19:02:49.000000000
+0100
@@ -0,0 +1,64 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1996-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> *
+* *
+***********************************************************************/
+#pragma prototyped
+
+/*
+ * Glenn Fowler
+ * AT&T Research
+ *
+ * checksum library interface
+ */
+
+#ifndef _SUM_H
+#define _SUM_H
+
+#include <ast.h>
+
+#define SUM_SIZE (1<<0) /* print size too */
+#define SUM_SCALE (1<<1) /* traditional size scale */
+#define SUM_TOTAL (1<<2) /* print totals since sumopen */
+
+#define _SUM_PUBLIC_ const char* name;
+
+typedef struct Sumdata_s
+{
+ uint32_t size;
+ uint32_t num;
+ void* buf;
+} Sumdata_t;
+
+typedef struct Sum_s
+{
+ _SUM_PUBLIC_
+#ifdef _SUM_PRIVATE_
+ _SUM_PRIVATE_
+#endif
+} Sum_t;
+
+extern Sum_t* sumopen(const char*);
+extern int suminit(Sum_t*);
+extern int sumblock(Sum_t*, const void*, size_t);
+extern int sumdone(Sum_t*);
+extern int sumdata(Sum_t*, Sumdata_t*);
+extern int sumprint(Sum_t*, Sfio_t*, int);
+extern int sumusage(Sfio_t*);
+extern int sumclose(Sum_t*);
+
+#endif
diff -r -N -u ksh93_2007_01_11/src/lib/libsum/sumlib.c
ksh93_2007_03_28/src/lib/libsum/sumlib.c
--- ksh93_2007_01_11/src/lib/libsum/sumlib.c 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libsum/sumlib.c 2007-03-12 05:14:21.000000000
+0100
@@ -0,0 +1,333 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1996-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> *
+* *
+***********************************************************************/
+#pragma prototyped
+/*
+ * Glenn Fowler
+ * AT&T Research
+ *
+ * man this is sum library
+ */
+
+static const char id[] = "\n@(#)$Id: sumlib (AT&T Research) 2007-03-11 $\0\n";
+
+#define _SUM_PRIVATE_ \
+ struct Method_s* method; \
+ uintmax_t total_count; \
+ uintmax_t total_size; \
+ uintmax_t size;
+
+#include <sum.h>
+#include <ctype.h>
+#include <swap.h>
+#include <hashpart.h>
+
+#define SCALE(n,m) (((n)+(m)-1)/(m))
+
+typedef struct Method_s
+{
+ const char* match;
+ const char* description;
+ const char* options;
+ Sum_t* (*open)(const struct Method_s*, const char*);
+ int (*init)(Sum_t*);
+ int (*block)(Sum_t*, const void*, size_t);
+ int (*data)(Sum_t*, Sumdata_t*);
+ int (*print)(Sum_t*, Sfio_t*, int);
+ int (*done)(Sum_t*);
+ int scale;
+} Method_t;
+
+typedef struct Map_s
+{
+ const char* match;
+ const char* description;
+ const char* map;
+} Map_t;
+
+/*
+ * 16 and 32 bit common code
+ */
+
+#define _INTEGRAL_PRIVATE_ \
+ uint32_t sum; \
+ uint32_t total_sum;
+
+typedef struct Integral_s
+{
+ _SUM_PUBLIC_
+ _SUM_PRIVATE_
+ _INTEGRAL_PRIVATE_
+} Integral_t;
+
+static Sum_t*
+long_open(const Method_t* method, const char* name)
+{
+ Integral_t* p;
+
+ if (p = newof(0, Integral_t, 1, 0))
+ {
+ p->method = (Method_t*)method;
+ p->name = name;
+ }
+ return (Sum_t*)p;
+}
+
+static int
+long_init(Sum_t* p)
+{
+ ((Integral_t*)p)->sum = 0;
+ return 0;
+}
+
+static int
+long_done(Sum_t* p)
+{
+ register Integral_t* x = (Integral_t*)p;
+
+ x->total_sum ^= (x->sum &= 0xffffffff);
+ return 0;
+}
+
+static int
+short_done(Sum_t* p)
+{
+ register Integral_t* x = (Integral_t*)p;
+
+ x->total_sum ^= (x->sum &= 0xffff);
+ return 0;
+}
+
+static int
+long_print(Sum_t* p, Sfio_t* sp, register int flags)
+{
+ register Integral_t* x = (Integral_t*)p;
+ register uint32_t c;
+ register uintmax_t z;
+ register size_t n;
+
+ c = (flags & SUM_TOTAL) ? x->total_sum : x->sum;
+ sfprintf(sp, "%I*u", sizeof(c), c);
+ if (flags & SUM_SIZE)
+ {
+ z = (flags & SUM_TOTAL) ? x->total_size : x->size;
+ if ((flags & SUM_SCALE) && (n = x->method->scale))
+ z = SCALE(z, n);
+ sfprintf(sp, " %I*u", sizeof(z), z);
+ }
+ if (flags & SUM_TOTAL)
+ sfprintf(sp, " %I*u", sizeof(x->total_count), x->total_count);
+ return 0;
+}
+
+static int
+long_data(Sum_t* p, Sumdata_t* data)
+{
+ register Integral_t* x = (Integral_t*)p;
+
+ data->size = sizeof(data->num);
+ data->num = x->sum;
+ data->buf = 0;
+ return 0;
+}
+
+#include "sum-att.c"
+#include "sum-ast4.c"
+#include "sum-bsd.c"
+#include "sum-crc.c"
+#include "sum-md5.c"
+#include "sum-prng.c"
+#include "sum-sha1.c"
+#include "sum-sha2.c"
+
+/*
+ * now the library interface
+ */
+
+#undef METHOD /* solaris <sys/localedef.h>! */
+#define METHOD(x)
x##_match,x##_description,x##_options,x##_open,x##_init,x##_block,x##_data,x##_print,x##_done,x##_scale
+
+static const Method_t methods[] =
+{
+ METHOD(att),
+ METHOD(ast4),
+ METHOD(bsd),
+ METHOD(crc),
+ METHOD(md5),
+ METHOD(prng),
+#ifdef sha1_description
+ METHOD(sha1),
+#endif
+#ifdef sha256_description
+ METHOD(sha256),
+#endif
+#ifdef sha384_description
+ METHOD(sha384),
+#endif
+#ifdef sha512_description
+ METHOD(sha512),
+#endif
+};
+
+static const Map_t maps[] =
+{
+ {
+ "posix|cksum|std|standard",
+ "The posix 1003.2-1992 32 bit crc checksum. This is the"
+ " default \bcksum\b(1) method.",
+ "crc-0x04c11db7-rotate-done-size"
+ },
+ {
+ "zip",
+ "The \bzip\b(1) crc.",
+ "crc-0xedb88320-init-done"
+ },
+ {
+ "fddi",
+ "The FDDI crc.",
+ "crc-0xedb88320-size=0xcc55cc55"
+ },
+ {
+ "fnv|fnv1",
+ "The Fowler-Noll-Vo 32 bit PRNG hash with non-zero"
+ " initializer (FNV-1).",
+ "prng-0x01000193-init=0x811c9dc5"
+ },
+ {
+ "ast|strsum",
+ "The \bast\b \bstrsum\b(3) PRNG hash.",
+ "prng-0x63c63cd9-add=0x9c39c33d"
+ },
+};
+
+/*
+ * open sum method name
+ */
+
+Sum_t*
+sumopen(register const char* name)
+{
+ register int n;
+ char pat[256];
+
+ if (!name || !name[0] || name[0] == '-' && !name[1])
+ name = "default";
+ for (n = 0; n < elementsof(maps); n++)
+ {
+ sfsprintf(pat, sizeof(pat), "*@(%s)*", maps[n].match);
+ if (strmatch(name, pat))
+ {
+ name = maps[n].map;
+ break;
+ }
+ }
+ for (n = 0; n < elementsof(methods); n++)
+ {
+ sfsprintf(pat, sizeof(pat), "*@(%s)*", methods[n].match);
+ if (strmatch(name, pat))
+ return (*methods[n].open)(&methods[n], name);
+ }
+ return 0;
+}
+
+/*
+ * initialize for a new run of blocks
+ */
+
+int
+suminit(Sum_t* p)
+{
+ p->size = 0;
+ return (*p->method->init)(p);
+}
+
+/*
+ * compute the running sum on buf
+ */
+
+int
+sumblock(Sum_t* p, const void* buf, size_t siz)
+{
+ p->size += siz;
+ return (*p->method->block)(p, buf, siz);
+}
+
+/*
+ * done with this run of blocks
+ */
+
+int
+sumdone(Sum_t* p)
+{
+ p->total_count++;
+ p->total_size += p->size;
+ return (*p->method->done)(p);
+}
+
+/*
+ * print the sum [size] on sp
+ */
+
+int
+sumprint(Sum_t* p, Sfio_t* sp, int flags)
+{
+ return (*p->method->print)(p, sp, flags);
+}
+
+/*
+ * return the current sum (internal) data
+ */
+
+int
+sumdata(Sum_t* p, Sumdata_t* d)
+{
+ return (*p->method->data)(p, d);
+}
+
+/*
+ * close an open sum handle
+ */
+
+int
+sumclose(Sum_t* p)
+{
+ free(p);
+ return 0;
+}
+
+/*
+ * print the checksum method optget(3) usage on sp and return the length
+ */
+
+int
+sumusage(Sfio_t* sp)
+{
+ register int i;
+ register int n;
+
+ for (i = n = 0; i < elementsof(methods); i++)
+ {
+ n += sfprintf(sp, "[+%s?%s]", methods[i].match,
methods[i].description);
+ if (methods[i].options)
+ n += sfprintf(sp, "{\n%s\n}", methods[i].options);
+ }
+ for (i = 0; i < elementsof(maps); i++)
+ n += sfprintf(sp, "[+%s?%s Shorthand for \b%s\b.]",
maps[i].match, maps[i].description, maps[i].map);
+ return n;
+}
diff -r -N -u ksh93_2007_01_11/src/lib/libsum/sum-md5.c
ksh93_2007_03_28/src/lib/libsum/sum-md5.c
--- ksh93_2007_01_11/src/lib/libsum/sum-md5.c 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libsum/sum-md5.c 2007-02-23 19:09:12.000000000
+0100
@@ -0,0 +1,374 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1996-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> *
+* *
+***********************************************************************/
+#pragma prototyped
+
+/*
+ * md5
+ */
+
+/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+ rights reserved.
+
+ License to copy and use this software is granted provided that it
+ is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+ Method" in all material mentioning or referencing this software
+ or this function.
+
+ License is also granted to make and use derivative works provided
+ that such works are identified as "derived from the RSA Data
+ Security, Inc. MD5 Message-Digest Method" in all material
+ mentioning or referencing the derived work.
+
+ RSA Data Security, Inc. makes no representations concerning either
+ the merchantability of this software or the suitability of this
+ software for any particular purpose. It is provided "as is"
+ without express or implied warranty of any kind.
+
+ These notices must be retained in any copies of any part of this
+ documentation and/or software.
+ */
+
+#define md5_description \
+ "The RSA Data Security, Inc. MD5 Message-Digest Method, 1991-2, \
+ used with permission. The block count is not printed."
+#define md5_options "[+(version)?md5 (RSA Data Security, Inc. MD5
Message-Digest, 1991-2) 1996-02-29]"
+#define md5_match "md5|MD5"
+#define md5_scale 0
+
+typedef uint32_t UINT4;
+
+typedef struct Md5_s
+{
+ _SUM_PUBLIC_
+ _SUM_PRIVATE_
+ UINT4 state[4]; /* state (ABCD) */
+ UINT4 count[2]; /* # bits handled mod 2^64 (lsb)*/
+ unsigned char buffer[64]; /* input buffer */
+ unsigned char digest[16]; /* final digest */
+ unsigned char digest_sum[16]; /* sum of all digests */
+} Md5_t;
+
+static unsigned char md5_pad[] =
+{
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+/*
+ * encode input into output
+ * len must be a multiple of 4
+ */
+
+static void
+md5_encode(register unsigned char* output, register UINT4* input, unsigned int
len)
+{
+ register unsigned int i;
+ register unsigned int j;
+
+ for (i = j = 0; j < len; i++, j += 4)
+ {
+ output[j] = (unsigned char)(input[i] & 0xff);
+ output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
+ output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
+ output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
+ }
+}
+
+/*
+ * decode input into output
+ * len must be a multiple of 4
+ */
+
+static void
+md5_decode(register UINT4* output, register unsigned char* input, unsigned int
len)
+{
+ unsigned int i;
+ unsigned int j;
+
+ for (i = j = 0; j < len; i++, j += 4)
+ output[i] = ((UINT4)input[j]) |
+ (((UINT4)input[j+1]) << 8) |
+ (((UINT4)input[j+2]) << 16) |
+ (((UINT4)input[j+3]) << 24);
+}
+
+static int
+md5_init(Sum_t* p)
+{
+ register Md5_t* context = (Md5_t*)p;
+
+ context->count[0] = context->count[1] = 0;
+ context->state[0] = 0x67452301;
+ context->state[1] = 0xefcdab89;
+ context->state[2] = 0x98badcfe;
+ context->state[3] = 0x10325476;
+ return 0;
+}
+
+static Sum_t*
+md5_open(const Method_t* method, const char* name)
+{
+ Md5_t* p;
+
+ if (p = newof(0, Md5_t, 1, 0))
+ {
+ p->method = (Method_t*)method;
+ p->name = name;
+ md5_init((Sum_t*)p);
+ }
+ return (Sum_t*)p;
+}
+
+/*
+ * basic MD5 step -- transforms buf based on in
+ */
+
+#define S11 7
+#define S12 12
+#define S13 17
+#define S14 22
+#define S21 5
+#define S22 9
+#define S23 14
+#define S24 20
+#define S31 4
+#define S32 11
+#define S33 16
+#define S34 23
+#define S41 6
+#define S42 10
+#define S43 15
+#define S44 21
+
+/* F, G, H and I are basic MD5 functions */
+#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
+#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
+#define H(x, y, z) ((x) ^ (y) ^ (z))
+#define I(x, y, z) ((y) ^ ((x) | (~z)))
+
+/* ROTATE_LEFT rotates x left n bits */
+#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
+
+/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4 */
+/* Rotation is separate from addition to prevent recomputation */
+#define FF(a, b, c, d, x, s, ac) { \
+ (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ }
+#define GG(a, b, c, d, x, s, ac) { \
+ (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ }
+#define HH(a, b, c, d, x, s, ac) { \
+ (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ }
+#define II(a, b, c, d, x, s, ac) { \
+ (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ }
+
+static void
+md5_transform(UINT4 state[4], unsigned char block[64])
+{
+ UINT4 a = state[0];
+ UINT4 b = state[1];
+ UINT4 c = state[2];
+ UINT4 d = state[3];
+ UINT4 x[16];
+
+ md5_decode(x, block, 64);
+
+ /* round 1 */
+ FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
+ FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
+ FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
+ FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
+ FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
+ FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
+ FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
+ FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
+ FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
+ FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
+ FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
+ FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
+ FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
+ FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
+ FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
+ FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
+
+ /* round 2 */
+ GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
+ GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
+ GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
+ GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
+ GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
+ GG (d, a, b, c, x[10], S22, 0x02441453); /* 22 */
+ GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
+ GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
+ GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
+ GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
+ GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
+ GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
+ GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
+ GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
+ GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
+ GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
+
+ /* round 3 */
+ HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
+ HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
+ HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
+ HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
+ HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
+ HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
+ HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
+ HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
+ HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
+ HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
+ HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
+ HH (b, c, d, a, x[ 6], S34, 0x04881d05); /* 44 */
+ HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
+ HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
+ HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
+ HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
+
+ /* round 4 */
+ II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
+ II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
+ II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
+ II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
+ II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
+ II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
+ II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
+ II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
+ II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
+ II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
+ II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
+ II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
+ II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
+ II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
+ II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
+ II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
+
+ state[0] += a;
+ state[1] += b;
+ state[2] += c;
+ state[3] += d;
+}
+
+static int
+md5_block(Sum_t* p, const void* s, size_t inputLen)
+{
+ register Md5_t* context = (Md5_t*)p;
+ unsigned char* input = (unsigned char*)s;
+ unsigned int i;
+ unsigned int index;
+ unsigned int partLen;
+
+ /* compute number of bytes mod 64 */
+ index = (unsigned int)((context->count[0] >> 3) & 0x3f);
+
+ /* update number of bits */
+ if ((context->count[0] += ((UINT4)inputLen << 3)) < ((UINT4)inputLen <<
3))
+ context->count[1]++;
+ context->count[1] += ((UINT4)inputLen >> 29);
+ partLen = 64 - index;
+
+ /* transform as many times as possible */
+ if (inputLen >= partLen)
+ {
+ memcpy(&context->buffer[index], input, partLen);
+ md5_transform(context->state, context->buffer);
+ for (i = partLen; i + 63 < inputLen; i += 64)
+ md5_transform(context->state, &input[i]);
+ index = 0;
+ }
+ else
+ i = 0;
+
+ /* buffer remaining input */
+ memcpy(&context->buffer[index], &input[i], inputLen - i);
+
+ return 0;
+}
+
+static int
+md5_done(Sum_t* p)
+{
+ register Md5_t* context = (Md5_t*)p;
+ unsigned char bits[8];
+ unsigned int index;
+ unsigned int padLen;
+
+ /* save number of bits */
+ md5_encode(bits, context->count, sizeof(bits));
+
+ /* pad out to 56 mod 64 */
+ index = (unsigned int)((context->count[0] >> 3) & 0x3f);
+ padLen = (index < 56) ? (56 - index) : (120 - index);
+ md5_block(p, md5_pad, padLen);
+
+ /* append length (before padding) */
+ md5_block(p, bits, sizeof(bits));
+
+ /* store state in digest */
+ md5_encode(context->digest, context->state, sizeof(context->digest));
+
+ /* accumulate the digests */
+ for (index = 0; index < elementsof(context->digest); index++)
+ context->digest_sum[index] ^= context->digest[index];
+
+ return 0;
+}
+
+static int
+md5_print(Sum_t* p, Sfio_t* sp, register int flags)
+{
+ register Md5_t* x = (Md5_t*)p;
+ register unsigned char* d;
+ register int n;
+
+ d = (flags & SUM_TOTAL) ? x->digest_sum : x->digest;
+ for (n = 0; n < elementsof(x->digest); n++)
+ sfprintf(sp, "%02x", d[n]);
+ return 0;
+}
+
+static int
+md5_data(Sum_t* p, Sumdata_t* data)
+{
+ register Md5_t* x = (Md5_t*)p;
+
+ data->size = elementsof(x->digest);
+ data->num = 0;
+ data->buf = x->digest;
+ return 0;
+}
diff -r -N -u ksh93_2007_01_11/src/lib/libsum/sum-prng.c
ksh93_2007_03_28/src/lib/libsum/sum-prng.c
--- ksh93_2007_01_11/src/lib/libsum/sum-prng.c 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libsum/sum-prng.c 2007-02-14 19:04:42.000000000
+0100
@@ -0,0 +1,113 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1996-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> *
+* *
+***********************************************************************/
+#pragma prototyped
+
+/*
+ * prng
+ */
+
+#include <fnv.h>
+
+#define prng_description \
+ "32 bit PRNG (pseudo random number generator) hash."
+#define prng_options "\
+[+mpy?The 32 bit PRNG multiplier.]:[number:=0x01000193]\
+[+add?The 32 bit PRNG addend.]:[number:=0]\
+[+init?The PRNG initial value. 0xffffffff is used if \anumber\a is
omitted.]:?[number:=0x811c9dc5]\
+"
+#define prng_match "prng"
+#define prng_done long_done
+#define prng_print long_print
+#define prng_data long_data
+#define prng_scale 0
+
+typedef uint32_t Prngnum_t;
+
+typedef struct Prng_s
+{
+ _SUM_PUBLIC_
+ _SUM_PRIVATE_
+ _INTEGRAL_PRIVATE_
+ Prngnum_t init;
+ Prngnum_t mpy;
+ Prngnum_t add;
+} Prng_t;
+
+static Sum_t*
+prng_open(const Method_t* method, const char* name)
+{
+ register Prng_t* sum;
+ register const char* s;
+ register const char* t;
+ register const char* v;
+ register int i;
+
+ if (sum = newof(0, Prng_t, 1, 0))
+ {
+ sum->method = (Method_t*)method;
+ sum->name = name;
+ }
+ s = name;
+ while (*(t = s))
+ {
+ for (t = s, v = 0; *s && *s != '-'; s++)
+ if (*s == '=' && !v)
+ v = s;
+ i = (v ? v : s) - t;
+ if (isdigit(*t) || v && strneq(t, "mpy", i) && (t = v + 1))
+ sum->mpy = strtoul(t, NiL, 0);
+ else if (strneq(t, "add", i))
+ sum->add = v ? strtoul(v + 1, NiL, 0) : ~sum->add;
+ else if (strneq(t, "init", i))
+ sum->init = v ? strtoul(v + 1, NiL, 0) : ~sum->init;
+ if (*s == '-')
+ s++;
+ }
+ if (!sum->mpy)
+ {
+ sum->mpy = FNV_MULT;
+ if (!sum->init)
+ sum->init = FNV_INIT;
+ }
+ return (Sum_t*)sum;
+}
+
+static int
+prng_init(Sum_t* p)
+{
+ Prng_t* sum = (Prng_t*)p;
+
+ sum->sum = sum->init;
+ return 0;
+}
+
+static int
+prng_block(Sum_t* p, const void* s, size_t n)
+{
+ Prng_t* sum = (Prng_t*)p;
+ register Prngnum_t c = sum->sum;
+ register unsigned char* b = (unsigned char*)s;
+ register unsigned char* e = b + n;
+
+ while (b < e)
+ c = c * sum->mpy + sum->add + *b++;
+ sum->sum = c;
+ return 0;
+}
diff -r -N -u ksh93_2007_01_11/src/lib/libsum/sum-sha1.c
ksh93_2007_03_28/src/lib/libsum/sum-sha1.c
--- ksh93_2007_01_11/src/lib/libsum/sum-sha1.c 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libsum/sum-sha1.c 2007-02-14 19:05:02.000000000
+0100
@@ -0,0 +1,344 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1996-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> *
+* *
+***********************************************************************/
+#pragma prototyped
+
+/*
+ * FIPS 180-1 compliant SHA-1 implementation,
+ * by Christophe Devine <devine at cr0.net>;
+ * this program is licensed under the GPL.
+ */
+
+#define sha1_description "FIPS 180-1 SHA-1 secure hash algorithm 1."
+#define sha1_options "[+(version)?sha1 (FIPS 180-1) 1993-05-11]\
+ [+(author)?Christophe Devine <devine at cr0.net>]"
+#define sha1_match "sha1|SHA1|sha-1|SHA-1"
+#define sha1_scale 0
+
+#define uint8 uint8_t
+#define uint32 uint32_t
+
+#define sha1_padding md5_pad
+
+typedef struct Sha1_s
+{
+ _SUM_PUBLIC_
+ _SUM_PRIVATE_
+ uint32 total[2];
+ uint32 state[5];
+ uint8 buffer[64];
+ uint8 digest[20];
+ uint8 digest_sum[20];
+} Sha1_t;
+
+#define GET_UINT32(n,b,i) \
+{ \
+ (n) = (uint32) ((uint8 *) b)[(i)+3] \
+ | (((uint32) ((uint8 *) b)[(i)+2]) << 8) \
+ | (((uint32) ((uint8 *) b)[(i)+1]) << 16) \
+ | (((uint32) ((uint8 *) b)[(i)] ) << 24); \
+}
+
+#define PUT_UINT32(n,b,i) \
+{ \
+ (((uint8 *) b)[(i)+3]) = (uint8) (((n) ) & 0xFF); \
+ (((uint8 *) b)[(i)+2]) = (uint8) (((n) >> 8) & 0xFF); \
+ (((uint8 *) b)[(i)+1]) = (uint8) (((n) >> 16) & 0xFF); \
+ (((uint8 *) b)[(i)] ) = (uint8) (((n) >> 24) & 0xFF); \
+}
+
+static void
+sha1_process(Sha1_t* sha, uint8 data[64] )
+{
+ uint32 temp, A, B, C, D, E, W[16];
+
+ GET_UINT32( W[0], data, 0 );
+ GET_UINT32( W[1], data, 4 );
+ GET_UINT32( W[2], data, 8 );
+ GET_UINT32( W[3], data, 12 );
+ GET_UINT32( W[4], data, 16 );
+ GET_UINT32( W[5], data, 20 );
+ GET_UINT32( W[6], data, 24 );
+ GET_UINT32( W[7], data, 28 );
+ GET_UINT32( W[8], data, 32 );
+ GET_UINT32( W[9], data, 36 );
+ GET_UINT32( W[10], data, 40 );
+ GET_UINT32( W[11], data, 44 );
+ GET_UINT32( W[12], data, 48 );
+ GET_UINT32( W[13], data, 52 );
+ GET_UINT32( W[14], data, 56 );
+ GET_UINT32( W[15], data, 60 );
+
+#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
+
+#define R(t) \
+( \
+ temp = W[(t - 3) & 0x0F] ^ W[(t - 8) & 0x0F] ^ \
+ W[(t - 14) & 0x0F] ^ W[ t & 0x0F], \
+ ( W[t & 0x0F] = S(temp,1) ) \
+)
+
+#define P(a,b,c,d,e,x) \
+{ \
+ e += S(a,5) + F(b,c,d) + K + x; b = S(b,30); \
+}
+
+ A = sha->state[0];
+ B = sha->state[1];
+ C = sha->state[2];
+ D = sha->state[3];
+ E = sha->state[4];
+
+#undef F
+
+#define F(x,y,z) (z ^ (x & (y ^ z)))
+#define K 0x5A827999
+
+ P( A, B, C, D, E, W[0] );
+ P( E, A, B, C, D, W[1] );
+ P( D, E, A, B, C, W[2] );
+ P( C, D, E, A, B, W[3] );
+ P( B, C, D, E, A, W[4] );
+ P( A, B, C, D, E, W[5] );
+ P( E, A, B, C, D, W[6] );
+ P( D, E, A, B, C, W[7] );
+ P( C, D, E, A, B, W[8] );
+ P( B, C, D, E, A, W[9] );
+ P( A, B, C, D, E, W[10] );
+ P( E, A, B, C, D, W[11] );
+ P( D, E, A, B, C, W[12] );
+ P( C, D, E, A, B, W[13] );
+ P( B, C, D, E, A, W[14] );
+ P( A, B, C, D, E, W[15] );
+ P( E, A, B, C, D, R(16) );
+ P( D, E, A, B, C, R(17) );
+ P( C, D, E, A, B, R(18) );
+ P( B, C, D, E, A, R(19) );
+
+#undef K
+#undef F
+
+#define F(x,y,z) (x ^ y ^ z)
+#define K 0x6ED9EBA1
+
+ P( A, B, C, D, E, R(20) );
+ P( E, A, B, C, D, R(21) );
+ P( D, E, A, B, C, R(22) );
+ P( C, D, E, A, B, R(23) );
+ P( B, C, D, E, A, R(24) );
+ P( A, B, C, D, E, R(25) );
+ P( E, A, B, C, D, R(26) );
+ P( D, E, A, B, C, R(27) );
+ P( C, D, E, A, B, R(28) );
+ P( B, C, D, E, A, R(29) );
+ P( A, B, C, D, E, R(30) );
+ P( E, A, B, C, D, R(31) );
+ P( D, E, A, B, C, R(32) );
+ P( C, D, E, A, B, R(33) );
+ P( B, C, D, E, A, R(34) );
+ P( A, B, C, D, E, R(35) );
+ P( E, A, B, C, D, R(36) );
+ P( D, E, A, B, C, R(37) );
+ P( C, D, E, A, B, R(38) );
+ P( B, C, D, E, A, R(39) );
+
+#undef K
+#undef F
+
+#define F(x,y,z) ((x & y) | (z & (x | y)))
+#define K 0x8F1BBCDC
+
+ P( A, B, C, D, E, R(40) );
+ P( E, A, B, C, D, R(41) );
+ P( D, E, A, B, C, R(42) );
+ P( C, D, E, A, B, R(43) );
+ P( B, C, D, E, A, R(44) );
+ P( A, B, C, D, E, R(45) );
+ P( E, A, B, C, D, R(46) );
+ P( D, E, A, B, C, R(47) );
+ P( C, D, E, A, B, R(48) );
+ P( B, C, D, E, A, R(49) );
+ P( A, B, C, D, E, R(50) );
+ P( E, A, B, C, D, R(51) );
+ P( D, E, A, B, C, R(52) );
+ P( C, D, E, A, B, R(53) );
+ P( B, C, D, E, A, R(54) );
+ P( A, B, C, D, E, R(55) );
+ P( E, A, B, C, D, R(56) );
+ P( D, E, A, B, C, R(57) );
+ P( C, D, E, A, B, R(58) );
+ P( B, C, D, E, A, R(59) );
+
+#undef K
+#undef F
+
+#define F(x,y,z) (x ^ y ^ z)
+#define K 0xCA62C1D6
+
+ P( A, B, C, D, E, R(60) );
+ P( E, A, B, C, D, R(61) );
+ P( D, E, A, B, C, R(62) );
+ P( C, D, E, A, B, R(63) );
+ P( B, C, D, E, A, R(64) );
+ P( A, B, C, D, E, R(65) );
+ P( E, A, B, C, D, R(66) );
+ P( D, E, A, B, C, R(67) );
+ P( C, D, E, A, B, R(68) );
+ P( B, C, D, E, A, R(69) );
+ P( A, B, C, D, E, R(70) );
+ P( E, A, B, C, D, R(71) );
+ P( D, E, A, B, C, R(72) );
+ P( C, D, E, A, B, R(73) );
+ P( B, C, D, E, A, R(74) );
+ P( A, B, C, D, E, R(75) );
+ P( E, A, B, C, D, R(76) );
+ P( D, E, A, B, C, R(77) );
+ P( C, D, E, A, B, R(78) );
+ P( B, C, D, E, A, R(79) );
+
+#undef K
+#undef F
+
+ sha->state[0] += A;
+ sha->state[1] += B;
+ sha->state[2] += C;
+ sha->state[3] += D;
+ sha->state[4] += E;
+}
+
+static int
+sha1_block(register Sum_t* p, const void* s, size_t length)
+{
+ Sha1_t* sha = (Sha1_t*)p;
+ uint8* input = (uint8*)s;
+ uint32 left, fill;
+
+ if( ! length ) return 0;
+
+ left = ( sha->total[0] >> 3 ) & 0x3F;
+ fill = 64 - left;
+
+ sha->total[0] += length << 3;
+ sha->total[1] += length >> 29;
+
+ sha->total[0] &= 0xFFFFFFFF;
+ sha->total[1] += sha->total[0] < length << 3;
+
+ if( left && length >= fill )
+ {
+ memcpy( (void *) (sha->buffer + left), (void *) input, fill );
+ sha1_process( sha, sha->buffer );
+ length -= fill;
+ input += fill;
+ left = 0;
+ }
+
+ while( length >= 64 )
+ {
+ sha1_process( sha, input );
+ length -= 64;
+ input += 64;
+ }
+
+ if( length )
+ memcpy( (void *) (sha->buffer + left), (void *) input, length );
+
+ return 0;
+}
+
+static int
+sha1_init(Sum_t* p)
+{
+ register Sha1_t* sha = (Sha1_t*)p;
+
+ sha->total[0] = sha->total[1] = 0;
+ sha->state[0] = 0x67452301;
+ sha->state[1] = 0xEFCDAB89;
+ sha->state[2] = 0x98BADCFE;
+ sha->state[3] = 0x10325476;
+ sha->state[4] = 0xC3D2E1F0;
+
+ return 0;
+}
+
+static Sum_t*
+sha1_open(const Method_t* method, const char* name)
+{
+ Sha1_t* sha;
+
+ if (sha = newof(0, Sha1_t, 1, 0))
+ {
+ sha->method = (Method_t*)method;
+ sha->name = name;
+ sha1_init((Sum_t*)sha);
+ }
+ return (Sum_t*)sha;
+}
+
+static int
+sha1_done(Sum_t* p)
+{
+ Sha1_t* sha = (Sha1_t*)p;
+ uint32 last, padn;
+ uint8 msglen[8];
+
+ PUT_UINT32( sha->total[1], msglen, 0 );
+ PUT_UINT32( sha->total[0], msglen, 4 );
+
+ last = ( sha->total[0] >> 3 ) & 0x3F;
+ padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
+
+ sha1_block( p, sha1_padding, padn );
+ sha1_block( p, msglen, 8 );
+
+ PUT_UINT32( sha->state[0], sha->digest, 0 );
+ PUT_UINT32( sha->state[1], sha->digest, 4 );
+ PUT_UINT32( sha->state[2], sha->digest, 8 );
+ PUT_UINT32( sha->state[3], sha->digest, 12 );
+ PUT_UINT32( sha->state[4], sha->digest, 16 );
+
+ /* accumulate the digests */
+ for (last = 0; last < elementsof(sha->digest); last++)
+ sha->digest_sum[last] ^= sha->digest[last];
+ return 0;
+}
+
+static int
+sha1_print(Sum_t* p, Sfio_t* sp, register int flags)
+{
+ register Sha1_t* sha = (Sha1_t*)p;
+ register unsigned char* d;
+ register int n;
+
+ d = (flags & SUM_TOTAL) ? sha->digest_sum : sha->digest;
+ for (n = 0; n < elementsof(sha->digest); n++)
+ sfprintf(sp, "%02x", d[n]);
+ return 0;
+}
+
+static int
+sha1_data(Sum_t* p, Sumdata_t* data)
+{
+ register Sha1_t* sha = (Sha1_t*)p;
+
+ data->size = elementsof(sha->digest);
+ data->num = 0;
+ data->buf = sha->digest;
+ return 0;
+}
diff -r -N -u ksh93_2007_01_11/src/lib/libsum/sum-sha2.c
ksh93_2007_03_28/src/lib/libsum/sum-sha2.c
--- ksh93_2007_01_11/src/lib/libsum/sum-sha2.c 1970-01-01 01:00:00.000000000
+0100
+++ ksh93_2007_03_28/src/lib/libsum/sum-sha2.c 2007-02-14 19:05:50.000000000
+0100
@@ -0,0 +1,1248 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1996-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> *
+* *
+***********************************************************************/
+#pragma prototyped
+
+#if _typ_int64_t
+
+/*
+ * Aaron D. Gifford's SHA {256,384,512} code transcribed into a -lsum method
+ */
+
+/*
+ * Copyright (c) 2000-2001, Aaron D. Gifford
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holder nor the names of contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * ASSERT NOTE:
+ * Some sanity checking code is included using assert(). On my FreeBSD
+ * system, this additional code can be removed by compiling with NDEBUG
+ * defined. Check your own systems manpage on assert() to see how to
+ * compile WITHOUT the sanity checking code on your system.
+ *
+ * UNROLLED TRANSFORM LOOP NOTE:
+ * You can define SHA2_UNROLL_TRANSFORM to use the unrolled transform
+ * loop version for the hash transform rounds (defined using macros
+ * later in this file). Either define on the command line, for example:
+ *
+ * cc -DSHA2_UNROLL_TRANSFORM -o sha2 sha2.c sha2prog.c
+ *
+ * or define below:
+ *
+ * #define SHA2_UNROLL_TRANSFORM
+ *
+ */
+
+/*** SHA-256/384/512 Machine Architecture Definitions *****************/
+
+#if _PACKAGE_ast
+
+#ifndef __USE_BSD
+#define __undef__USE_BSD
+#define __USE_BSD
+#endif
+#include <endian.h>
+#ifdef __undef__USE_BSD
+#undef __undef__USE_BSD
+#undef __USE_BSD
+#endif
+
+typedef uint8_t sha2_byte; /* Exactly 1 byte */
+typedef uint32_t sha2_word32; /* Exactly 4 bytes */
+typedef uint64_t sha2_word64; /* Exactly 8 bytes */
+
+#define assert(x)
+
+#undef R
+#undef S32
+#undef S64
+
+#else /* _PACKAGE_ast */
+
+/*
+ * BYTE_ORDER NOTE:
+ *
+ * Please make sure that your system defines BYTE_ORDER. If your
+ * architecture is little-endian, make sure it also defines
+ * LITTLE_ENDIAN and that the two (BYTE_ORDER and LITTLE_ENDIAN) are
+ * equivilent.
+ *
+ * If your system does not define the above, then you can do so by
+ * hand like this:
+ *
+ * #define LITTLE_ENDIAN 1234
+ * #define BIG_ENDIAN 4321
+ *
+ * And for little-endian machines, add:
+ *
+ * #define BYTE_ORDER LITTLE_ENDIAN
+ *
+ * Or for big-endian machines:
+ *
+ * #define BYTE_ORDER BIG_ENDIAN
+ *
+ * The FreeBSD machine this was written on defines BYTE_ORDER
+ * appropriately by including <sys/types.h> (which in turn includes
+ * <machine/endian.h> where the appropriate definitions are actually
+ * made).
+ */
+
+#if !defined(BYTE_ORDER) || (BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER !=
BIG_ENDIAN)
+#error Define BYTE_ORDER to be equal to either LITTLE_ENDIAN or BIG_ENDIAN
+#endif
+
+/*
+ * Define the following sha2_* types to types of the correct length on
+ * the native archtecture. Most BSD systems and Linux define u_intXX_t
+ * types. Machines with very recent ANSI C headers, can use the
+ * uintXX_t definintions from inttypes.h by defining SHA2_USE_INTTYPES_H
+ * during compile or in the sha.h header file.
+ *
+ * Machines that support neither u_intXX_t nor inttypes.h's uintXX_t
+ * will need to define these three typedefs below (and the appropriate
+ * ones in sha.h too) by hand according to their system architecture.
+ *
+ * Thank you, Jun-ichiro itojun Hagino, for suggesting using u_intXX_t
+ * types and pointing out recent ANSI C support for uintXX_t in inttypes.h.
+ */
+
+#ifdef SHA2_USE_INTTYPES_H
+
+typedef uint8_t sha2_byte; /* Exactly 1 byte */
+typedef uint32_t sha2_word32; /* Exactly 4 bytes */
+typedef uint64_t sha2_word64; /* Exactly 8 bytes */
+
+#else /* SHA2_USE_INTTYPES_H */
+
+typedef u_int8_t sha2_byte; /* Exactly 1 byte */
+typedef u_int32_t sha2_word32; /* Exactly 4 bytes */
+typedef u_int64_t sha2_word64; /* Exactly 8 bytes */
+
+#endif /* SHA2_USE_INTTYPES_H */
+
+#endif /* _PACKAGE_ast */
+
+/*** SHA-256/384/512 Various Length Definitions ***********************/
+
+#define SHA256_BLOCK_LENGTH 64
+#define SHA256_DIGEST_LENGTH 32
+#define SHA384_BLOCK_LENGTH 128
+#define SHA384_DIGEST_LENGTH 48
+#define SHA512_BLOCK_LENGTH 128
+#define SHA512_DIGEST_LENGTH 64
+
+#define SHA256_SHORT_BLOCK_LENGTH (SHA256_BLOCK_LENGTH - 8)
+#define SHA384_SHORT_BLOCK_LENGTH (SHA384_BLOCK_LENGTH - 16)
+#define SHA512_SHORT_BLOCK_LENGTH (SHA512_BLOCK_LENGTH - 16)
+
+/*** ENDIAN REVERSAL MACROS *******************************************/
+#if BYTE_ORDER == LITTLE_ENDIAN
+#define REVERSE32(w,x) { \
+ sha2_word32 tmp = (w); \
+ tmp = (tmp >> 16) | (tmp << 16); \
+ (x) = ((tmp & 0xff00ff00UL) >> 8) | ((tmp & 0x00ff00ffUL) << 8); \
+}
+#if _ast_LL
+#define REVERSE64(w,x) { \
+ sha2_word64 tmp = (w); \
+ tmp = (tmp >> 32) | (tmp << 32); \
+ tmp = ((tmp & 0xff00ff00ff00ff00ULL) >> 8) | \
+ ((tmp & 0x00ff00ff00ff00ffULL) << 8); \
+ (x) = ((tmp & 0xffff0000ffff0000ULL) >> 16) | \
+ ((tmp & 0x0000ffff0000ffffULL) << 16); \
+}
+#else
+#define REVERSE64(w,x) { \
+ sha2_word64 tmp = (w); \
+ tmp = (tmp >> 32) | (tmp << 32); \
+ tmp = ((tmp & ((sha2_word64)0xff00ff00ff00ff00)) >> 8) | \
+ ((tmp & ((sha2_word64)0x00ff00ff00ff00ff)) << 8); \
+ (x) = ((tmp & ((sha2_word64)0xffff0000ffff0000)) >> 16) | \
+ ((tmp & ((sha2_word64)0x0000ffff0000ffff)) << 16); \
+}
+#endif
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
+
+/*
+ * Macro for incrementally adding the unsigned 64-bit integer n to the
+ * unsigned 128-bit integer (represented using a two-element array of
+ * 64-bit words):
+ */
+
+#define ADDINC128(w,n) { \
+ (w)[0] += (sha2_word64)(n); \
+ if ((w)[0] < (n)) { \
+ (w)[1]++; \
+ } \
+}
+
+/*
+ * Macros for copying blocks of memory and for zeroing out ranges
+ * of memory. Using these macros makes it easy to switch from
+ * using memset()/memcpy() and using bzero()/bcopy().
+ *
+ * Please define either SHA2_USE_MEMSET_MEMCPY or define
+ * SHA2_USE_BZERO_BCOPY depending on which function set you
+ * choose to use:
+ */
+
+#if !defined(SHA2_USE_MEMSET_MEMCPY) && !defined(SHA2_USE_BZERO_BCOPY)
+/* Default to memset()/memcpy() if no option is specified */
+#define SHA2_USE_MEMSET_MEMCPY 1
+#endif
+#if defined(SHA2_USE_MEMSET_MEMCPY) && defined(SHA2_USE_BZERO_BCOPY)
+/* Abort with an error if BOTH options are defined */
+#error Define either SHA2_USE_MEMSET_MEMCPY or SHA2_USE_BZERO_BCOPY, not both!
+#endif
+
+#ifdef SHA2_USE_MEMSET_MEMCPY
+#define MEMSET_BZERO(p,l) memset((p), 0, (l))
+#define MEMCPY_BCOPY(d,s,l) memcpy((d), (s), (l))
+#endif
+#ifdef SHA2_USE_BZERO_BCOPY
+#define MEMSET_BZERO(p,l) bzero((p), (l))
+#define MEMCPY_BCOPY(d,s,l) bcopy((s), (d), (l))
+#endif
+
+
+/*** THE SIX LOGICAL FUNCTIONS ****************************************/
+/*
+ * Bit shifting and rotation (used by the six SHA-XYZ logical functions:
+ *
+ * NOTE: The naming of R and S appears backwards here (R is a SHIFT and
+ * S is a ROTATION) because the SHA-256/384/512 description document
+ * (see http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf) uses this
+ * same "backwards" definition.
+ */
+
+/* Shift-right (used in SHA-256, SHA-384, and SHA-512): */
+#define R(b,x) ((x) >> (b))
+/* 32-bit Rotate-right (used in SHA-256): */
+#define S32(b,x) (((x) >> (b)) | ((x) << (32 - (b))))
+/* 64-bit Rotate-right (used in SHA-384 and SHA-512): */
+#define S64(b,x) (((x) >> (b)) | ((x) << (64 - (b))))
+
+/* Two of six logical functions used in SHA-256, SHA-384, and SHA-512: */
+#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z)))
+#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
+
+/* Four of six logical functions used in SHA-256: */
+#define Sigma0_256(x) (S32(2, (x)) ^ S32(13, (x)) ^ S32(22, (x)))
+#define Sigma1_256(x) (S32(6, (x)) ^ S32(11, (x)) ^ S32(25, (x)))
+#define sigma0_256(x) (S32(7, (x)) ^ S32(18, (x)) ^ R(3 , (x)))
+#define sigma1_256(x) (S32(17, (x)) ^ S32(19, (x)) ^ R(10, (x)))
+
+/* Four of six logical functions used in SHA-384 and SHA-512: */
+#define Sigma0_512(x) (S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x)))
+#define Sigma1_512(x) (S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x)))
+#define sigma0_512(x) (S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7, (x)))
+#define sigma1_512(x) (S64(19, (x)) ^ S64(61, (x)) ^ R( 6, (x)))
+
+/*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/
+/* Hash constant words K for SHA-256: */
+static const sha2_word32 K256[64] = {
+ 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,
+ 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,
+ 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,
+ 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL,
+ 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
+ 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL,
+ 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL,
+ 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL,
+ 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL,
+ 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
+ 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL,
+ 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL,
+ 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL,
+ 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL,
+ 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
+ 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
+};
+
+/* Initial hash value H for SHA-256: */
+static const sha2_word32 sha256_initial_hash_value[8] = {
+ 0x6a09e667UL,
+ 0xbb67ae85UL,
+ 0x3c6ef372UL,
+ 0xa54ff53aUL,
+ 0x510e527fUL,
+ 0x9b05688cUL,
+ 0x1f83d9abUL,
+ 0x5be0cd19UL
+};
+
+/* Hash constant words K for SHA-384 and SHA-512: */
+static const sha2_word64 K512[80] = {
+#if _ast_LL
+ 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL,
+ 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
+ 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
+ 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
+ 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL,
+ 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
+ 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL,
+ 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
+ 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
+ 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL,
+ 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL,
+ 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
+ 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL,
+ 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL,
+ 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
+ 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
+ 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL,
+ 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
+ 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL,
+ 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
+ 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
+ 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL,
+ 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL,
+ 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
+ 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL,
+ 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL,
+ 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
+ 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
+ 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL,
+ 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
+ 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL,
+ 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
+ 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
+ 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL,
+ 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL,
+ 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
+ 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL,
+ 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL,
+ 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
+ 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
+#else
+ ((sha2_word64)0x428a2f98d728ae22), ((sha2_word64)0x7137449123ef65cd),
+ ((sha2_word64)0xb5c0fbcfec4d3b2f), ((sha2_word64)0xe9b5dba58189dbbc),
+ ((sha2_word64)0x3956c25bf348b538), ((sha2_word64)0x59f111f1b605d019),
+ ((sha2_word64)0x923f82a4af194f9b), ((sha2_word64)0xab1c5ed5da6d8118),
+ ((sha2_word64)0xd807aa98a3030242), ((sha2_word64)0x12835b0145706fbe),
+ ((sha2_word64)0x243185be4ee4b28c), ((sha2_word64)0x550c7dc3d5ffb4e2),
+ ((sha2_word64)0x72be5d74f27b896f), ((sha2_word64)0x80deb1fe3b1696b1),
+ ((sha2_word64)0x9bdc06a725c71235), ((sha2_word64)0xc19bf174cf692694),
+ ((sha2_word64)0xe49b69c19ef14ad2), ((sha2_word64)0xefbe4786384f25e3),
+ ((sha2_word64)0x0fc19dc68b8cd5b5), ((sha2_word64)0x240ca1cc77ac9c65),
+ ((sha2_word64)0x2de92c6f592b0275), ((sha2_word64)0x4a7484aa6ea6e483),
+ ((sha2_word64)0x5cb0a9dcbd41fbd4), ((sha2_word64)0x76f988da831153b5),
+ ((sha2_word64)0x983e5152ee66dfab), ((sha2_word64)0xa831c66d2db43210),
+ ((sha2_word64)0xb00327c898fb213f), ((sha2_word64)0xbf597fc7beef0ee4),
+ ((sha2_word64)0xc6e00bf33da88fc2), ((sha2_word64)0xd5a79147930aa725),
+ ((sha2_word64)0x06ca6351e003826f), ((sha2_word64)0x142929670a0e6e70),
+ ((sha2_word64)0x27b70a8546d22ffc), ((sha2_word64)0x2e1b21385c26c926),
+ ((sha2_word64)0x4d2c6dfc5ac42aed), ((sha2_word64)0x53380d139d95b3df),
+ ((sha2_word64)0x650a73548baf63de), ((sha2_word64)0x766a0abb3c77b2a8),
+ ((sha2_word64)0x81c2c92e47edaee6), ((sha2_word64)0x92722c851482353b),
+ ((sha2_word64)0xa2bfe8a14cf10364), ((sha2_word64)0xa81a664bbc423001),
+ ((sha2_word64)0xc24b8b70d0f89791), ((sha2_word64)0xc76c51a30654be30),
+ ((sha2_word64)0xd192e819d6ef5218), ((sha2_word64)0xd69906245565a910),
+ ((sha2_word64)0xf40e35855771202a), ((sha2_word64)0x106aa07032bbd1b8),
+ ((sha2_word64)0x19a4c116b8d2d0c8), ((sha2_word64)0x1e376c085141ab53),
+ ((sha2_word64)0x2748774cdf8eeb99), ((sha2_word64)0x34b0bcb5e19b48a8),
+ ((sha2_word64)0x391c0cb3c5c95a63), ((sha2_word64)0x4ed8aa4ae3418acb),
+ ((sha2_word64)0x5b9cca4f7763e373), ((sha2_word64)0x682e6ff3d6b2b8a3),
+ ((sha2_word64)0x748f82ee5defb2fc), ((sha2_word64)0x78a5636f43172f60),
+ ((sha2_word64)0x84c87814a1f0ab72), ((sha2_word64)0x8cc702081a6439ec),
+ ((sha2_word64)0x90befffa23631e28), ((sha2_word64)0xa4506cebde82bde9),
+ ((sha2_word64)0xbef9a3f7b2c67915), ((sha2_word64)0xc67178f2e372532b),
+ ((sha2_word64)0xca273eceea26619c), ((sha2_word64)0xd186b8c721c0c207),
+ ((sha2_word64)0xeada7dd6cde0eb1e), ((sha2_word64)0xf57d4f7fee6ed178),
+ ((sha2_word64)0x06f067aa72176fba), ((sha2_word64)0x0a637dc5a2c898a6),
+ ((sha2_word64)0x113f9804bef90dae), ((sha2_word64)0x1b710b35131c471b),
+ ((sha2_word64)0x28db77f523047d84), ((sha2_word64)0x32caab7b40c72493),
+ ((sha2_word64)0x3c9ebe0a15c9bebc), ((sha2_word64)0x431d67c49c100d4c),
+ ((sha2_word64)0x4cc5d4becb3e42b6), ((sha2_word64)0x597f299cfc657e2a),
+ ((sha2_word64)0x5fcb6fab3ad6faec), ((sha2_word64)0x6c44198c4a475817)
+#endif
+};
+
+/* Initial hash value H for SHA-384 */
+static const sha2_word64 sha384_initial_hash_value[8] = {
+#if _ast_LL
+ 0xcbbb9d5dc1059ed8ULL,
+ 0x629a292a367cd507ULL,
+ 0x9159015a3070dd17ULL,
+ 0x152fecd8f70e5939ULL,
+ 0x67332667ffc00b31ULL,
+ 0x8eb44a8768581511ULL,
+ 0xdb0c2e0d64f98fa7ULL,
+ 0x47b5481dbefa4fa4ULL
+#else
+ ((sha2_word64)0xcbbb9d5dc1059ed8),
+ ((sha2_word64)0x629a292a367cd507),
+ ((sha2_word64)0x9159015a3070dd17),
+ ((sha2_word64)0x152fecd8f70e5939),
+ ((sha2_word64)0x67332667ffc00b31),
+ ((sha2_word64)0x8eb44a8768581511),
+ ((sha2_word64)0xdb0c2e0d64f98fa7),
+ ((sha2_word64)0x47b5481dbefa4fa4)
+#endif
+};
+
+/* Initial hash value H for SHA-512 */
+static const sha2_word64 sha512_initial_hash_value[8] = {
+#if _ast_LL
+ 0x6a09e667f3bcc908ULL,
+ 0xbb67ae8584caa73bULL,
+ 0x3c6ef372fe94f82bULL,
+ 0xa54ff53a5f1d36f1ULL,
+ 0x510e527fade682d1ULL,
+ 0x9b05688c2b3e6c1fULL,
+ 0x1f83d9abfb41bd6bULL,
+ 0x5be0cd19137e2179ULL
+#else
+ ((sha2_word64)0x6a09e667f3bcc908),
+ ((sha2_word64)0xbb67ae8584caa73b),
+ ((sha2_word64)0x3c6ef372fe94f82b),
+ ((sha2_word64)0xa54ff53a5f1d36f1),
+ ((sha2_word64)0x510e527fade682d1),
+ ((sha2_word64)0x9b05688c2b3e6c1f),
+ ((sha2_word64)0x1f83d9abfb41bd6b),
+ ((sha2_word64)0x5be0cd19137e2179)
+#endif
+};
+
+/*** SHA-256: *********************************************************/
+
+#define sha256_description "FIPS SHA-256 secure hash algorithm."
+#define sha256_options "\
+[+(version)?sha-256 (FIPS) 2000-01-01]\
+[+(author)?Aaron D. Gifford]\
+"
+#define sha256_match "sha256|sha-256|SHA256|SHA-256"
+#define sha256_scale 0
+
+#define sha256_padding md5_pad
+
+#define SHA256_CTX Sha256_t
+
+typedef struct Sha256_s
+{
+ _SUM_PUBLIC_
+ _SUM_PRIVATE_
+ sha2_byte digest[SHA256_DIGEST_LENGTH];
+ sha2_byte digest_sum[SHA256_DIGEST_LENGTH];
+ sha2_word32 state[8];
+ sha2_word64 bitcount;
+ sha2_byte buffer[SHA256_BLOCK_LENGTH];
+} Sha256_t;
+
+#ifdef SHA2_UNROLL_TRANSFORM
+
+/* Unrolled SHA-256 round macros: */
+
+#if BYTE_ORDER == LITTLE_ENDIAN
+
+#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \
+ REVERSE32(*data++, W256[j]); \
+ T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \
+ K256[j] + W256[j]; \
+ (d) += T1; \
+ (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
+ j++
+
+
+#else /* BYTE_ORDER == LITTLE_ENDIAN */
+
+#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \
+ T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \
+ K256[j] + (W256[j] = *data++); \
+ (d) += T1; \
+ (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
+ j++
+
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
+
+#define ROUND256(a,b,c,d,e,f,g,h) \
+ s0 = W256[(j+1)&0x0f]; \
+ s0 = sigma0_256(s0); \
+ s1 = W256[(j+14)&0x0f]; \
+ s1 = sigma1_256(s1); \
+ T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + K256[j] + \
+ (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0); \
+ (d) += T1; \
+ (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
+ j++
+
+static void SHA256_Transform(SHA256_CTX* sha, const sha2_word32* data) {
+ sha2_word32 a, b, c, d, e, f, g, h, s0, s1;
+ sha2_word32 T1, *W256;
+ int j;
+
+ W256 = (sha2_word32*)sha->buffer;
+
+ /* Initialize registers with the prev. intermediate value */
+ a = sha->state[0];
+ b = sha->state[1];
+ c = sha->state[2];
+ d = sha->state[3];
+ e = sha->state[4];
+ f = sha->state[5];
+ g = sha->state[6];
+ h = sha->state[7];
+
+ j = 0;
+ do {
+ /* Rounds 0 to 15 (unrolled): */
+ ROUND256_0_TO_15(a,b,c,d,e,f,g,h);
+ ROUND256_0_TO_15(h,a,b,c,d,e,f,g);
+ ROUND256_0_TO_15(g,h,a,b,c,d,e,f);
+ ROUND256_0_TO_15(f,g,h,a,b,c,d,e);
+ ROUND256_0_TO_15(e,f,g,h,a,b,c,d);
+ ROUND256_0_TO_15(d,e,f,g,h,a,b,c);
+ ROUND256_0_TO_15(c,d,e,f,g,h,a,b);
+ ROUND256_0_TO_15(b,c,d,e,f,g,h,a);
+ } while (j < 16);
+
+ /* Now for the remaining rounds to 64: */
+ do {
+ ROUND256(a,b,c,d,e,f,g,h);
+ ROUND256(h,a,b,c,d,e,f,g);
+ ROUND256(g,h,a,b,c,d,e,f);
+ ROUND256(f,g,h,a,b,c,d,e);
+ ROUND256(e,f,g,h,a,b,c,d);
+ ROUND256(d,e,f,g,h,a,b,c);
+ ROUND256(c,d,e,f,g,h,a,b);
+ ROUND256(b,c,d,e,f,g,h,a);
+ } while (j < 64);
+
+ /* Compute the current intermediate hash value */
+ sha->state[0] += a;
+ sha->state[1] += b;
+ sha->state[2] += c;
+ sha->state[3] += d;
+ sha->state[4] += e;
+ sha->state[5] += f;
+ sha->state[6] += g;
+ sha->state[7] += h;
+
+ /* Clean up */
+ a = b = c = d = e = f = g = h = T1 = 0;
+}
+
+#else /* SHA2_UNROLL_TRANSFORM */
+
+static void SHA256_Transform(SHA256_CTX* sha, const sha2_word32* data) {
+ sha2_word32 a, b, c, d, e, f, g, h, s0, s1;
+ sha2_word32 T1, T2, *W256;
+ int j;
+
+ W256 = (sha2_word32*)sha->buffer;
+
+ /* Initialize registers with the prev. intermediate value */
+ a = sha->state[0];
+ b = sha->state[1];
+ c = sha->state[2];
+ d = sha->state[3];
+ e = sha->state[4];
+ f = sha->state[5];
+ g = sha->state[6];
+ h = sha->state[7];
+
+ j = 0;
+ do {
+#if BYTE_ORDER == LITTLE_ENDIAN
+ /* Copy data while converting to host byte order */
+ REVERSE32(*data++,W256[j]);
+ /* Apply the SHA-256 compression function to update a..h */
+ T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + W256[j];
+#else /* BYTE_ORDER == LITTLE_ENDIAN */
+ /* Apply the SHA-256 compression function to update a..h with
copy */
+ T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + (W256[j] =
*data++);
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
+ T2 = Sigma0_256(a) + Maj(a, b, c);
+ h = g;
+ g = f;
+ f = e;
+ e = d + T1;
+ d = c;
+ c = b;
+ b = a;
+ a = T1 + T2;
+
+ j++;
+ } while (j < 16);
+
+ do {
+ /* Part of the message block expansion: */
+ s0 = W256[(j+1)&0x0f];
+ s0 = sigma0_256(s0);
+ s1 = W256[(j+14)&0x0f];
+ s1 = sigma1_256(s1);
+
+ /* Apply the SHA-256 compression function to update a..h */
+ T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] +
+ (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0);
+ T2 = Sigma0_256(a) + Maj(a, b, c);
+ h = g;
+ g = f;
+ f = e;
+ e = d + T1;
+ d = c;
+ c = b;
+ b = a;
+ a = T1 + T2;
+
+ j++;
+ } while (j < 64);
+
+ /* Compute the current intermediate hash value */
+ sha->state[0] += a;
+ sha->state[1] += b;
+ sha->state[2] += c;
+ sha->state[3] += d;
+ sha->state[4] += e;
+ sha->state[5] += f;
+ sha->state[6] += g;
+ sha->state[7] += h;
+
+ /* Clean up */
+ a = b = c = d = e = f = g = h = T1 = T2 = 0;
+}
+
+#endif /* SHA2_UNROLL_TRANSFORM */
+
+static int
+sha256_block(register Sum_t* p, const void* s, size_t len)
+{
+ Sha256_t* sha = (Sha256_t*)p;
+ sha2_byte* data = (sha2_byte*)s;
+ unsigned int freespace, usedspace;
+
+ if (!len)
+ return 0;
+ usedspace = (sha->bitcount >> 3) % SHA256_BLOCK_LENGTH;
+ if (usedspace > 0) {
+ /* Calculate how much free space is available in the buffer */
+ freespace = SHA256_BLOCK_LENGTH - usedspace;
+
+ if (len >= freespace) {
+ /* Fill the buffer completely and process it */
+ MEMCPY_BCOPY(&sha->buffer[usedspace], data, freespace);
+ sha->bitcount += freespace << 3;
+ len -= freespace;
+ data += freespace;
+ SHA256_Transform(sha, (sha2_word32*)sha->buffer);
+ } else {
+ /* The buffer is not yet full */
+ MEMCPY_BCOPY(&sha->buffer[usedspace], data, len);
+ sha->bitcount += len << 3;
+ /* Clean up: */
+ usedspace = freespace = 0;
+ return 0;
+ }
+ }
+ while (len >= SHA256_BLOCK_LENGTH) {
+ /* Process as many complete blocks as we can */
+ SHA256_Transform(sha, (sha2_word32*)data);
+ sha->bitcount += SHA256_BLOCK_LENGTH << 3;
+ len -= SHA256_BLOCK_LENGTH;
+ data += SHA256_BLOCK_LENGTH;
+ }
+ if (len > 0) {
+ /* There's left-overs, so save 'em */
+ MEMCPY_BCOPY(sha->buffer, data, len);
+ sha->bitcount += len << 3;
+ }
+ /* Clean up: */
+ usedspace = freespace = 0;
+
+ return 0;
+}
+
+static int
+sha256_init(Sum_t* p)
+{
+ register Sha256_t* sha = (Sha256_t*)p;
+
+ MEMCPY_BCOPY(sha->state, sha256_initial_hash_value,
SHA256_DIGEST_LENGTH);
+ MEMSET_BZERO(sha->buffer, SHA256_BLOCK_LENGTH);
+ sha->bitcount = 0;
+
+ return 0;
+}
+
+static Sum_t*
+sha256_open(const Method_t* method, const char* name)
+{
+ Sha256_t* sha;
+
+ if (sha = newof(0, Sha256_t, 1, 0))
+ {
+ sha->method = (Method_t*)method;
+ sha->name = name;
+ sha256_init((Sum_t*)sha);
+ }
+ return (Sum_t*)sha;
+}
+
+static int
+sha256_done(Sum_t* p)
+{
+ Sha256_t* sha = (Sha256_t*)p;
+ unsigned int usedspace;
+ register int i;
+
+ /* Sanity check: */
+ assert(sha != (SHA256_CTX*)0);
+
+ usedspace = (sha->bitcount >> 3) % SHA256_BLOCK_LENGTH;
+#if BYTE_ORDER == LITTLE_ENDIAN
+ /* Convert FROM host byte order */
+ REVERSE64(sha->bitcount,sha->bitcount);
+#endif
+ if (usedspace > 0) {
+ /* Begin padding with a 1 bit: */
+ sha->buffer[usedspace++] = 0x80;
+
+ if (usedspace <= SHA256_SHORT_BLOCK_LENGTH) {
+ /* Set-up for the last transform: */
+ MEMSET_BZERO(&sha->buffer[usedspace],
SHA256_SHORT_BLOCK_LENGTH - usedspace);
+ } else {
+ if (usedspace < SHA256_BLOCK_LENGTH) {
+ MEMSET_BZERO(&sha->buffer[usedspace],
SHA256_BLOCK_LENGTH - usedspace);
+ }
+ /* Do second-to-last transform: */
+ SHA256_Transform(sha, (sha2_word32*)sha->buffer);
+
+ /* And set-up for the last transform: */
+ MEMSET_BZERO(sha->buffer, SHA256_SHORT_BLOCK_LENGTH);
+ }
+ } else {
+ /* Set-up for the last transform: */
+ MEMSET_BZERO(sha->buffer, SHA256_SHORT_BLOCK_LENGTH);
+
+ /* Begin padding with a 1 bit: */
+ *sha->buffer = 0x80;
+ }
+ /* Set the bit count: */
+ *(sha2_word64*)&sha->buffer[SHA256_SHORT_BLOCK_LENGTH] = sha->bitcount;
+
+ /* Final transform: */
+ SHA256_Transform(sha, (sha2_word32*)sha->buffer);
+
+#if BYTE_ORDER == LITTLE_ENDIAN
+ {
+ /* Convert TO host byte order */
+ int j;
+ sha2_word32* d = (sha2_word32*)sha->digest;
+ for (j = 0; j < 8; j++) {
+ REVERSE32(sha->state[j],sha->state[j]);
+ *d++ = sha->state[j];
+ }
+ }
+#else
+ MEMCPY_BCOPY(sha->digest, sha->state, SHA256_DIGEST_LENGTH);
+#endif
+
+ /* accumulate the digests */
+ for (i = 0; i < SHA256_DIGEST_LENGTH; i++)
+ sha->digest_sum[i] ^= sha->digest[i];
+
+ /* Clean up state data: */
+ MEMSET_BZERO(&sha->state, sizeof(*sha) - offsetof(Sha256_t, state));
+ usedspace = 0;
+
+ return 0;
+}
+
+static int
+sha256_print(Sum_t* p, Sfio_t* sp, register int flags)
+{
+ register Sha256_t* sha = (Sha256_t*)p;
+ register sha2_byte* d;
+ register sha2_byte* e;
+
+ d = (flags & SUM_TOTAL) ? sha->digest_sum : sha->digest;
+ e = d + SHA256_DIGEST_LENGTH;
+ while (d < e)
+ sfprintf(sp, "%02x", *d++);
+ return 0;
+}
+
+static int
+sha256_data(Sum_t* p, Sumdata_t* data)
+{
+ register Sha256_t* sha = (Sha256_t*)p;
+
+ data->size = SHA256_DIGEST_LENGTH;
+ data->num = 0;
+ data->buf = sha->digest;
+ return 0;
+}
+
+/*** SHA-512: *********************************************************/
+
+#define sha512_description "FIPS SHA-512 secure hash algorithm."
+#define sha512_options "\
+[+(version)?sha-512 (FIPS) 2000-01-01]\
+[+(author)?Aaron D. Gifford]\
+"
+#define sha512_match "sha512|sha-512|SHA512|SHA-512"
+#define sha512_scale 0
+
+#define sha512_padding md5_pad
+
+#define SHA512_CTX Sha512_t
+
+typedef struct Sha512_s
+{
+ _SUM_PUBLIC_
+ _SUM_PRIVATE_
+ sha2_byte digest[SHA512_DIGEST_LENGTH];
+ sha2_byte digest_sum[SHA512_DIGEST_LENGTH];
+ sha2_word64 state[8];
+ sha2_word64 bitcount[2];
+ sha2_byte buffer[SHA512_BLOCK_LENGTH];
+} Sha512_t;
+
+#ifdef SHA2_UNROLL_TRANSFORM
+
+/* Unrolled SHA-512 round macros: */
+#if BYTE_ORDER == LITTLE_ENDIAN
+
+#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \
+ REVERSE64(*data++, W512[j]); \
+ T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \
+ K512[j] + W512[j]; \
+ (d) += T1, \
+ (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)), \
+ j++
+
+
+#else /* BYTE_ORDER == LITTLE_ENDIAN */
+
+#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \
+ T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \
+ K512[j] + (W512[j] = *data++); \
+ (d) += T1; \
+ (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \
+ j++
+
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
+
+#define ROUND512(a,b,c,d,e,f,g,h) \
+ s0 = W512[(j+1)&0x0f]; \
+ s0 = sigma0_512(s0); \
+ s1 = W512[(j+14)&0x0f]; \
+ s1 = sigma1_512(s1); \
+ T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + \
+ (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); \
+ (d) += T1; \
+ (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \
+ j++
+
+static void SHA512_Transform(SHA512_CTX* sha, const sha2_word64* data) {
+ sha2_word64 a, b, c, d, e, f, g, h, s0, s1;
+ sha2_word64 T1, *W512 = (sha2_word64*)sha->buffer;
+ int j;
+
+ /* Initialize registers with the prev. intermediate value */
+ a = sha->state[0];
+ b = sha->state[1];
+ c = sha->state[2];
+ d = sha->state[3];
+ e = sha->state[4];
+ f = sha->state[5];
+ g = sha->state[6];
+ h = sha->state[7];
+
+ j = 0;
+ do {
+ ROUND512_0_TO_15(a,b,c,d,e,f,g,h);
+ ROUND512_0_TO_15(h,a,b,c,d,e,f,g);
+ ROUND512_0_TO_15(g,h,a,b,c,d,e,f);
+ ROUND512_0_TO_15(f,g,h,a,b,c,d,e);
+ ROUND512_0_TO_15(e,f,g,h,a,b,c,d);
+ ROUND512_0_TO_15(d,e,f,g,h,a,b,c);
+ ROUND512_0_TO_15(c,d,e,f,g,h,a,b);
+ ROUND512_0_TO_15(b,c,d,e,f,g,h,a);
+ } while (j < 16);
+
+ /* Now for the remaining rounds up to 79: */
+ do {
+ ROUND512(a,b,c,d,e,f,g,h);
+ ROUND512(h,a,b,c,d,e,f,g);
+ ROUND512(g,h,a,b,c,d,e,f);
+ ROUND512(f,g,h,a,b,c,d,e);
+ ROUND512(e,f,g,h,a,b,c,d);
+ ROUND512(d,e,f,g,h,a,b,c);
+ ROUND512(c,d,e,f,g,h,a,b);
+ ROUND512(b,c,d,e,f,g,h,a);
+ } while (j < 80);
+
+ /* Compute the current intermediate hash value */
+ sha->state[0] += a;
+ sha->state[1] += b;
+ sha->state[2] += c;
+ sha->state[3] += d;
+ sha->state[4] += e;
+ sha->state[5] += f;
+ sha->state[6] += g;
+ sha->state[7] += h;
+
+ /* Clean up */
+ a = b = c = d = e = f = g = h = T1 = 0;
+}
+
+#else /* SHA2_UNROLL_TRANSFORM */
+
+static void SHA512_Transform(SHA512_CTX* sha, const sha2_word64* data) {
+ sha2_word64 a, b, c, d, e, f, g, h, s0, s1;
+ sha2_word64 T1, T2, *W512 = (sha2_word64*)sha->buffer;
+ int j;
+
+ /* Initialize registers with the prev. intermediate value */
+ a = sha->state[0];
+ b = sha->state[1];
+ c = sha->state[2];
+ d = sha->state[3];
+ e = sha->state[4];
+ f = sha->state[5];
+ g = sha->state[6];
+ h = sha->state[7];
+
+ j = 0;
+ do {
+#if BYTE_ORDER == LITTLE_ENDIAN
+ /* Convert TO host byte order */
+ REVERSE64(*data++, W512[j]);
+ /* Apply the SHA-512 compression function to update a..h */
+ T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + W512[j];
+#else /* BYTE_ORDER == LITTLE_ENDIAN */
+ /* Apply the SHA-512 compression function to update a..h with
copy */
+ T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + (W512[j] =
*data++);
+#endif /* BYTE_ORDER == LITTLE_ENDIAN */
+ T2 = Sigma0_512(a) + Maj(a, b, c);
+ h = g;
+ g = f;
+ f = e;
+ e = d + T1;
+ d = c;
+ c = b;
+ b = a;
+ a = T1 + T2;
+
+ j++;
+ } while (j < 16);
+
+ do {
+ /* Part of the message block expansion: */
+ s0 = W512[(j+1)&0x0f];
+ s0 = sigma0_512(s0);
+ s1 = W512[(j+14)&0x0f];
+ s1 = sigma1_512(s1);
+
+ /* Apply the SHA-512 compression function to update a..h */
+ T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] +
+ (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0);
+ T2 = Sigma0_512(a) + Maj(a, b, c);
+ h = g;
+ g = f;
+ f = e;
+ e = d + T1;
+ d = c;
+ c = b;
+ b = a;
+ a = T1 + T2;
+
+ j++;
+ } while (j < 80);
+
+ /* Compute the current intermediate hash value */
+ sha->state[0] += a;
+ sha->state[1] += b;
+ sha->state[2] += c;
+ sha->state[3] += d;
+ sha->state[4] += e;
+ sha->state[5] += f;
+ sha->state[6] += g;
+ sha->state[7] += h;
+
+ /* Clean up */
+ a = b = c = d = e = f = g = h = T1 = T2 = 0;
+}
+
+#endif /* SHA2_UNROLL_TRANSFORM */
+
+static int
+sha512_block(register Sum_t* p, const void* s, size_t len)
+{
+ Sha512_t* sha = (Sha512_t*)p;
+ sha2_byte* data = (sha2_byte*)s;
+ unsigned int freespace, usedspace;
+
+ if (!len)
+ return 0;
+ usedspace = (sha->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH;
+ if (usedspace > 0) {
+ /* Calculate how much free space is available in the buffer */
+ freespace = SHA512_BLOCK_LENGTH - usedspace;
+
+ if (len >= freespace) {
+ /* Fill the buffer completely and process it */
+ MEMCPY_BCOPY(&sha->buffer[usedspace], data, freespace);
+ ADDINC128(sha->bitcount, freespace << 3);
+ len -= freespace;
+ data += freespace;
+ SHA512_Transform(sha, (sha2_word64*)sha->buffer);
+ } else {
+ /* The buffer is not yet full */
+ MEMCPY_BCOPY(&sha->buffer[usedspace], data, len);
+ ADDINC128(sha->bitcount, len << 3);
+ /* Clean up: */
+ usedspace = freespace = 0;
+ return 0;
+ }
+ }
+ while (len >= SHA512_BLOCK_LENGTH) {
+ /* Process as many complete blocks as we can */
+ SHA512_Transform(sha, (sha2_word64*)data);
+ ADDINC128(sha->bitcount, SHA512_BLOCK_LENGTH << 3);
+ len -= SHA512_BLOCK_LENGTH;
+ data += SHA512_BLOCK_LENGTH;
+ }
+ if (len > 0) {
+ /* There's left-overs, so save 'em */
+ MEMCPY_BCOPY(sha->buffer, data, len);
+ ADDINC128(sha->bitcount, len << 3);
+ }
+ /* Clean up: */
+ usedspace = freespace = 0;
+
+ return 0;
+}
+
+static int
+sha512_init(Sum_t* p)
+{
+ register Sha512_t* sha = (Sha512_t*)p;
+
+ MEMCPY_BCOPY(sha->state, sha512_initial_hash_value,
SHA512_DIGEST_LENGTH);
+ MEMSET_BZERO(sha->buffer, SHA512_BLOCK_LENGTH);
+ sha->bitcount[0] = sha->bitcount[1] = 0;
+
+ return 0;
+}
+
+static Sum_t*
+sha512_open(const Method_t* method, const char* name)
+{
+ Sha512_t* sha;
+
+ if (sha = newof(0, Sha512_t, 1, 0))
+ {
+ sha->method = (Method_t*)method;
+ sha->name = name;
+ sha512_init((Sum_t*)sha);
+ }
+ return (Sum_t*)sha;
+}
+
+static int
+sha512_done(Sum_t* p)
+{
+ Sha512_t* sha = (Sha512_t*)p;
+ unsigned int usedspace;
+ register int i;
+
+ usedspace = (sha->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH;
+#if BYTE_ORDER == LITTLE_ENDIAN
+ /* Convert FROM host byte order */
+ REVERSE64(sha->bitcount[0],sha->bitcount[0]);
+ REVERSE64(sha->bitcount[1],sha->bitcount[1]);
+#endif
+ if (usedspace > 0) {
+ /* Begin padding with a 1 bit: */
+ sha->buffer[usedspace++] = 0x80;
+
+ if (usedspace <= SHA512_SHORT_BLOCK_LENGTH) {
+ /* Set-up for the last transform: */
+ MEMSET_BZERO(&sha->buffer[usedspace],
SHA512_SHORT_BLOCK_LENGTH - usedspace);
+ } else {
+ if (usedspace < SHA512_BLOCK_LENGTH) {
+ MEMSET_BZERO(&sha->buffer[usedspace],
SHA512_BLOCK_LENGTH - usedspace);
+ }
+ /* Do second-to-last transform: */
+ SHA512_Transform(sha, (sha2_word64*)sha->buffer);
+
+ /* And set-up for the last transform: */
+ MEMSET_BZERO(sha->buffer, SHA512_BLOCK_LENGTH - 2);
+ }
+ } else {
+ /* Prepare for final transform: */
+ MEMSET_BZERO(sha->buffer, SHA512_SHORT_BLOCK_LENGTH);
+
+ /* Begin padding with a 1 bit: */
+ *sha->buffer = 0x80;
+ }
+ /* Store the length of input data (in bits): */
+ *(sha2_word64*)&sha->buffer[SHA512_SHORT_BLOCK_LENGTH] =
sha->bitcount[1];
+ *(sha2_word64*)&sha->buffer[SHA512_SHORT_BLOCK_LENGTH+8] =
sha->bitcount[0];
+
+ /* Final transform: */
+ SHA512_Transform(sha, (sha2_word64*)sha->buffer);
+
+#if BYTE_ORDER == LITTLE_ENDIAN
+ {
+ /* Convert TO host byte order */
+ sha2_word64* d = (sha2_word64*)sha->digest;
+ int j;
+ for (j = 0; j < 8; j++) {
+ REVERSE64(sha->state[j],sha->state[j]);
+ *d++ = sha->state[j];
+ }
+ }
+#else
+ MEMCPY_BCOPY(sha->digest, sha->state, SHA512_DIGEST_LENGTH);
+#endif
+
+ /* accumulate the digests */
+ for (i = 0; i < SHA512_DIGEST_LENGTH; i++)
+ sha->digest_sum[i] ^= sha->digest[i];
+
+ /* Clean up state data: */
+ MEMSET_BZERO(&sha->state, sizeof(*sha) - offsetof(Sha512_t, state));
+ usedspace = 0;
+
+ return 0;
+}
+
+static int
+sha512_print(Sum_t* p, Sfio_t* sp, register int flags)
+{
+ register Sha512_t* sha = (Sha512_t*)p;
+ register sha2_byte* d;
+ register sha2_byte* e;
+
+ d = (flags & SUM_TOTAL) ? sha->digest_sum : sha->digest;
+ e = d + SHA512_DIGEST_LENGTH;
+ while (d < e)
+ sfprintf(sp, "%02x", *d++);
+ return 0;
+}
+
+static int
+sha512_data(Sum_t* p, Sumdata_t* data)
+{
+ register Sha512_t* sha = (Sha512_t*)p;
+
+ data->size = SHA512_DIGEST_LENGTH;
+ data->num = 0;
+ data->buf = sha->digest;
+ return 0;
+}
+
+/*** SHA-384: *********************************************************/
+
+#define sha384_description "FIPS SHA-384 secure hash algorithm."
+#define sha384_options "\
+[+(version)?sha-384 (FIPS) 2000-01-01]\
+[+(author)?Aaron D. Gifford]\
+"
+#define sha384_match "sha384|sha-384|SHA384|SHA-384"
+#define sha384_scale 0
+#define sha384_block sha512_block
+#define sha384_done sha512_done
+
+#define sha384_padding md5_pad
+
+#define Sha384_t Sha512_t
+#define SHA384_CTX Sha384_t
+#define SHA384_DIGEST_LENGTH 48
+
+static int
+sha384_init(Sum_t* p)
+{
+ register Sha384_t* sha = (Sha384_t*)p;
+
+ MEMCPY_BCOPY(sha->state, sha384_initial_hash_value,
SHA512_DIGEST_LENGTH);
+ MEMSET_BZERO(sha->buffer, SHA384_BLOCK_LENGTH);
+ sha->bitcount[0] = sha->bitcount[1] = 0;
+
+ return 0;
+}
+
+static Sum_t*
+sha384_open(const Method_t* method, const char* name)
+{
+ Sha384_t* sha;
+
+ if (sha = newof(0, Sha384_t, 1, 0))
+ {
+ sha->method = (Method_t*)method;
+ sha->name = name;
+ sha384_init((Sum_t*)sha);
+ }
+ return (Sum_t*)sha;
+}
+
+static int
+sha384_print(Sum_t* p, Sfio_t* sp, register int flags)
+{
+ register Sha384_t* sha = (Sha384_t*)p;
+ register sha2_byte* d;
+ register sha2_byte* e;
+
+ d = (flags & SUM_TOTAL) ? sha->digest_sum : sha->digest;
+ e = d + SHA384_DIGEST_LENGTH;
+ while (d < e)
+ sfprintf(sp, "%02x", *d++);
+ return 0;
+}
+
+static int
+sha384_data(Sum_t* p, Sumdata_t* data)
+{
+ register Sha384_t* sha = (Sha384_t*)p;
+
+ data->size = SHA384_DIGEST_LENGTH;
+ data->num = 0;
+ data->buf = sha->digest;
+ return 0;
+}
+
+#endif /* _typ_int64_t */