[ksh93-integration-discuss] ksh93 2007-04-18 beta is out... / was: [Fwd: Re: [ast-users] Trouble with "clear &" in ksh93s+ ...]
Felix Schulte
felix.schulte at gmail.com
Wed Apr 25 06:20:40 PDT 2007
On 4/19/07, Roland Mainz <roland.mainz at nrubsig.org> wrote:
>
> Hi!
>
> ----
>
> ksh93 2007-04-18 beta is out... I'll start updating the
> ksh93-integration prototype005 tree ASAP to get rid of the "clear
> &"-issue...
>
> -------- Original Message --------
patch diff from 20070328 to 20070418 attached
--
_ Felix Schulte
_|_|_ mailto:felix.schulte at gmail.com
(0 0)
ooO--(_)--Ooo
-------------- next part --------------
diff -r -N -u ksh93_2007_03_28/lib/package/ast-ksh.html ksh93_2007_04_18/lib/package/ast-ksh.html
--- ksh93_2007_03_28/lib/package/ast-ksh.html 2007-03-29 19:07:08.000000000 +0200
+++ ksh93_2007_04_18/lib/package/ast-ksh.html 2007-04-18 20:07:29.000000000 +0200
@@ -193,7 +193,9 @@
<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-04-18 --- Release ksh93s+ ---
+07-04-18 A small memory leak with each redirection of a non-builtin has
+ been fixed.
07-03-08 A bug in which set +o output command line options has been fixed.
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.
@@ -1652,6 +1654,10 @@
<P><HR><CENTER><FONT color=red><FONT face=courier><H3><A name="libast changes">libast changes</A></H3></FONT></FONT></CENTER>
<PRE>
+07-04-13 tm/tmxdate.c,tm/tmzone.c: handle [-+]0000 UTC zone offset
+07-04-11 sfio/sfvprintf.c: add %F, propagate SFFMT_UPPER
+07-04-11 sfio/sfcvt.c: handle SFFMT_UPPER => nan/inf vs. NAN/INF
+07-04-02 comp/conf.tab,comp/conf.sh: add C/POSIX <stdint.h> symbols
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_)
@@ -3358,7 +3364,7 @@
<TR>
<TD align=left></TD>
<TD align=center></TD>
-<TD align=right>March 29, 2007</TD>
+<TD align=right>April 18, 2007</TD>
</TR>
</TABLE>
<P>
diff -r -N -u ksh93_2007_03_28/lib/package/ast-ksh.README ksh93_2007_04_18/lib/package/ast-ksh.README
--- ksh93_2007_03_28/lib/package/ast-ksh.README 2007-03-29 19:07:08.000000000 +0200
+++ ksh93_2007_04_18/lib/package/ast-ksh.README 2007-04-18 20:07:28.000000000 +0200
@@ -92,7 +92,9 @@
:::::::: ksh93 ::::::::
-07-03-08 --- Release ksh93s+ ---
+07-04-18 --- Release ksh93s+ ---
+07-04-18 A small memory leak with each redirection of a non-builtin has
+ been fixed.
07-03-08 A bug in which set +o output command line options has been fixed.
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.
@@ -1548,6 +1550,10 @@
:::::::: libast ::::::::
+07-04-13 tm/tmxdate.c,tm/tmzone.c: handle [-+]0000 UTC zone offset
+07-04-11 sfio/sfvprintf.c: add %F, propagate SFFMT_UPPER
+07-04-11 sfio/sfcvt.c: handle SFFMT_UPPER => nan/inf vs. NAN/INF
+07-04-02 comp/conf.tab,comp/conf.sh: add C/POSIX <stdint.h> symbols
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_)
diff -r -N -u ksh93_2007_03_28/lib/package/ast-ksh.ver ksh93_2007_04_18/lib/package/ast-ksh.ver
--- ksh93_2007_03_28/lib/package/ast-ksh.ver 2007-03-28 18:39:59.000000000 +0200
+++ ksh93_2007_04_18/lib/package/ast-ksh.ver 2007-04-18 20:07:27.000000000 +0200
@@ -1 +1 @@
-ast-ksh 2007-03-28 2007-03-28 1
+ast-ksh 2007-04-18 2007-04-18 1
diff -r -N -u ksh93_2007_03_28/src/cmd/ksh93/bltins/print.c ksh93_2007_04_18/src/cmd/ksh93/bltins/print.c
--- ksh93_2007_03_28/src/cmd/ksh93/bltins/print.c 2007-02-14 08:54:57.000000000 +0100
+++ ksh93_2007_04_18/src/cmd/ksh93/bltins/print.c 2007-04-12 20:21:06.000000000 +0200
@@ -561,12 +561,14 @@
case 'e':
case 'f':
case 'g':
- value->f = 0.;
- break;
case 'A':
case 'E':
+ case 'F':
case 'G':
- value->ld = 0.;
+ if(SFFMT_LDOUBLE)
+ value->ld = 0.;
+ else
+ value->d = 0.;
break;
case 'n':
value->ip = &pp->intvar;
@@ -693,8 +695,8 @@
case 'g':
case 'A':
case 'E':
+ case 'F':
case 'G':
- fe->size = sizeof(value->d);
d = sh_strnum(*pp->nextarg,&lastchar,0);
if(SFFMT_LDOUBLE)
{
@@ -702,7 +704,10 @@
fe->size = sizeof(value->ld);
}
else
+ {
value->d = d;
+ fe->size = sizeof(value->d);
+ }
break;
case 'Q':
value->ll = (Sflong_t)strelapsed(*pp->nextarg,&lastchar,1);
diff -r -N -u ksh93_2007_03_28/src/cmd/ksh93/bltins/typeset.c ksh93_2007_04_18/src/cmd/ksh93/bltins/typeset.c
--- ksh93_2007_03_28/src/cmd/ksh93/bltins/typeset.c 2007-03-22 17:19:09.000000000 +0100
+++ ksh93_2007_04_18/src/cmd/ksh93/bltins/typeset.c 2007-04-11 04:36:37.000000000 +0200
@@ -118,7 +118,11 @@
}
#endif
else
+ {
flag = (NV_ASSIGN|NV_EXPORT|NV_IDENT);
+ if(!sh.prefix)
+ sh.prefix = "";
+ }
return(b_common(argv,flag,tdata.sh->var_tree, &tdata));
}
@@ -344,6 +348,8 @@
Shell_t *shp =tp->sh;
if(!sh.prefix)
nvflags |= NV_NOSCOPE;
+ else if(*sh.prefix==0)
+ sh.prefix = 0;
flag &= ~(NV_NOARRAY|NV_NOSCOPE|NV_VARNAME|NV_IDENT);
if(argv[1])
{
@@ -698,6 +704,7 @@
int b_set(int argc,register char *argv[],void *extra)
{
struct tdata tdata;
+ memset(&tdata,0,sizeof(tdata));
tdata.sh = (Shell_t*)extra;
tdata.prefix=0;
if(argv[1])
diff -r -N -u ksh93_2007_03_28/src/cmd/ksh93/include/edit.h ksh93_2007_04_18/src/cmd/ksh93/include/edit.h
--- ksh93_2007_03_28/src/cmd/ksh93/include/edit.h 2007-02-14 08:56:39.000000000 +0100
+++ ksh93_2007_04_18/src/cmd/ksh93/include/edit.h 2007-04-10 16:54:16.000000000 +0200
@@ -60,7 +60,7 @@
#define TABSIZE 8
#define PRSIZE 160
-#define MAXLINE 502 /* longest edit line permitted */
+#define MAXLINE 1024 /* longest edit line permitted */
typedef struct _edit_pos
{
@@ -154,7 +154,7 @@
} Edit_t;
#undef MAXWINDOW
-#define MAXWINDOW 160 /* maximum width window */
+#define MAXWINDOW 300 /* maximum width window */
#define FAST 2
#define SLOW 1
#define ESC cntl('[')
diff -r -N -u ksh93_2007_03_28/src/cmd/ksh93/include/jobs.h ksh93_2007_04_18/src/cmd/ksh93/include/jobs.h
--- ksh93_2007_03_28/src/cmd/ksh93/include/jobs.h 2006-09-14 19:22:11.000000000 +0200
+++ ksh93_2007_04_18/src/cmd/ksh93/include/jobs.h 2007-04-10 23:07:19.000000000 +0200
@@ -64,7 +64,7 @@
pid_t p_fgrp; /* process group when stopped */
short p_job; /* job number of process */
unsigned short p_exit; /* exit value or signal number */
- unsigned char p_flag; /* flags - see below */
+ unsigned short p_flag; /* flags - see below */
int p_env; /* subshell environment number */
#ifdef JOBS
off_t p_name; /* history file offset for command */
diff -r -N -u ksh93_2007_03_28/src/cmd/ksh93/RELEASE ksh93_2007_04_18/src/cmd/ksh93/RELEASE
--- ksh93_2007_03_28/src/cmd/ksh93/RELEASE 2007-03-27 20:54:06.000000000 +0200
+++ ksh93_2007_04_18/src/cmd/ksh93/RELEASE 2007-04-18 16:21:50.000000000 +0200
@@ -1,4 +1,6 @@
-07-03-08 --- Release ksh93s+ ---
+07-04-18 --- Release ksh93s+ ---
+07-04-18 A small memory leak with each redirection of a non-builtin has
+ been fixed.
07-03-08 A bug in which set +o output command line options has been fixed.
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.
diff -r -N -u ksh93_2007_03_28/src/cmd/ksh93/sh/arith.c ksh93_2007_04_18/src/cmd/ksh93/sh/arith.c
--- ksh93_2007_03_28/src/cmd/ksh93/sh/arith.c 2007-03-14 17:02:22.000000000 +0100
+++ ksh93_2007_04_18/src/cmd/ksh93/sh/arith.c 2007-04-12 20:13:29.000000000 +0200
@@ -190,13 +190,13 @@
}
}
*str = 0;
- if(strcmp(*ptr,"Inf")==0)
+ if(strcasecmp(*ptr,"Inf")==0)
{
Inf = 1.0/Zero;
Infnod.nvalue.ldp = &Inf;
np = &Infnod;
}
- else if(strcmp(*ptr,"NaN")==0)
+ else if(strcasecmp(*ptr,"NaN")==0)
{
NaN = 0.0/Zero;
NaNnod.nvalue.ldp = &NaN;
diff -r -N -u ksh93_2007_03_28/src/cmd/ksh93/sh/init.c ksh93_2007_04_18/src/cmd/ksh93/sh/init.c
--- ksh93_2007_03_28/src/cmd/ksh93/sh/init.c 2007-03-14 17:02:29.000000000 +0100
+++ ksh93_2007_04_18/src/cmd/ksh93/sh/init.c 2007-04-11 18:10:20.000000000 +0200
@@ -791,7 +791,11 @@
register int t = 0;
if (s = (const char*)strrchr(path, '/'))
+ {
+ if (*path == '-')
+ t |= SH_TYPE_LOGIN;
s++;
+ }
else
s = path;
if (*s == '-')
@@ -945,7 +949,7 @@
buff[n] = 0;
sh.shpath = strdup(buff);
}
- else if((cp && (last=strrchr(cp,'/')) && sh_type(last+1)) || (argc>0 && (last=strrchr(cp= *argv,'/'))))
+ else if((cp && (sh_type(cp)&SH_TYPE_SH)) || (argc>0 && strchr(cp= *argv,'/')))
{
if(*cp=='/')
sh.shpath = strdup(cp);
@@ -1415,12 +1419,8 @@
nv_offattr(PWDNOD,NV_TAGGED);
path_pwd(0);
}
- if(cp = nv_getval(SHELLNOD))
- {
- cp = path_basename(cp);
- if(sh_type(cp)&SH_TYPE_RESTRICTED)
- sh_onoption(SH_RESTRICTED); /* restricted shell */
- }
+ if((cp = nv_getval(SHELLNOD)) && (sh_type(cp)&SH_TYPE_RESTRICTED))
+ sh_onoption(SH_RESTRICTED); /* restricted shell */
return;
}
diff -r -N -u ksh93_2007_03_28/src/cmd/ksh93/sh/jobs.c ksh93_2007_04_18/src/cmd/ksh93/sh/jobs.c
--- ksh93_2007_03_28/src/cmd/ksh93/sh/jobs.c 2007-03-03 02:42:46.000000000 +0100
+++ ksh93_2007_04_18/src/cmd/ksh93/sh/jobs.c 2007-04-10 23:15:58.000000000 +0200
@@ -59,19 +59,14 @@
unsigned short exitval;
};
-static struct jobsave *job_savelist;
-
/*
* return next on link list of jobsave free list
*/
static struct jobsave *jobsave_create(pid_t pid)
{
- register struct jobsave *jp = job_savelist;
- if(jp)
- {
- job_savelist = jp->next;
+ struct jobsave *jp;
+ if(jp = newof(0,struct jobsave,1,0))
jp->pid = pid;
- }
return(jp);
}
@@ -111,6 +106,7 @@
#define P_DONE 040
#define P_COREDUMP 0100
#define P_DISOWN 0200
+#define P_FG 0400
static int job_chksave(pid_t);
static struct process *job_bypid(pid_t);
@@ -371,12 +367,6 @@
void job_init(int lflag)
{
register int i,ntry=0;
- struct jobsave *jp;
- /* create a jobsave freelist */
- job_savelist = (struct jobsave*)malloc(sh.lim.child_max*sizeof(struct jobsave));
- for(jp=job_savelist,i=1; i < sh.lim.child_max; i++, jp++)
- jp->next = (jp+1);
- jp->next = 0;
job.fd = JOBTTY;
signal(SIGCHLD,job_waitsafe);
# if defined(SIGCLD) && (SIGCLD!=SIGCHLD)
@@ -612,8 +602,9 @@
if(tcsetpgrp(job.fd,sh.pid) !=0)
return;
#endif /* SIGTSTP */
- /* force the following tty_get() to do a tcgetattr() */
- tty_set(-1, 0, NIL(struct termios*));
+ /* force the following tty_get() to do a tcgetattr() unless fg */
+ if(!(pw->p_flag&P_FG))
+ tty_set(-1, 0, NIL(struct termios*));
if(pw && (pw->p_flag&P_SIGNALLED) && pw->p_exit!=SIGHUP)
{
if(tty_get(job.fd,&pw->p_stty) == 0)
@@ -1000,8 +991,7 @@
for(jp=bck.list; jp;jp=jpnext)
{
jpnext = jp->next;
- jp->next = job_savelist;
- job_savelist = jp;
+ free((void*)jp);
}
bck.list = 0;
job.pwlist = NIL(struct process*);
@@ -1382,6 +1372,7 @@
return(1);
}
job.waitall = 1;
+ pw->p_flag |= P_FG;
job_wait(pw->p_pid);
job.waitall = 0;
}
@@ -1603,8 +1594,7 @@
else
bck.list = jp->next;
bck.count--;
- jp->next = job_savelist;
- job_savelist = jp;
+ free((void*)jp);
}
return(r);
}
@@ -1638,8 +1628,7 @@
for(jp=bck.list,bck= *bp; jp; jp=jpnext)
{
jpnext = jp->next;
- jp->next = job_savelist;
- job_savelist = jp;
+ free((void*)jp);
}
free(ptr);
job_unlock();
diff -r -N -u ksh93_2007_03_28/src/cmd/ksh93/sh/main.c ksh93_2007_04_18/src/cmd/ksh93/sh/main.c
--- ksh93_2007_03_28/src/cmd/ksh93/sh/main.c 2007-03-05 23:51:41.000000000 +0100
+++ ksh93_2007_04_18/src/cmd/ksh93/sh/main.c 2007-04-11 18:03:39.000000000 +0200
@@ -269,6 +269,7 @@
if(strmatch(name,e_devfdNN))
{
char *cp;
+ int type;
fdin = (int)strtol(name+8, (char**)0, 10);
if(fstat(fdin,&statb)<0)
errormsg(SH_DICT,ERROR_system(1),e_open,error_info.id);
@@ -277,10 +278,9 @@
* try to undo effect of solaris 2.5+
* change for argv for setuid scripts
*/
- cp = path_basename(*av);
- if(sh_type(cp) && (!(name=nv_getval(L_ARGNOD)) || !sh_type(cp = path_basename(name))))
+ if(((type = sh_type(cp = av[0])) & SH_TYPE_SH) && (!(name = nv_getval(L_ARGNOD)) || !((type = sh_type(cp = name)) & SH_TYPE_SH)))
{
- av[0] = cp;
+ av[0] = (type & SH_TYPE_LOGIN) ? cp : path_basename(cp);
/* exec to change $0 for ps */
execv(pathshell(),av);
/* exec fails */
diff -r -N -u ksh93_2007_03_28/src/cmd/ksh93/sh/xec.c ksh93_2007_04_18/src/cmd/ksh93/sh/xec.c
--- ksh93_2007_03_28/src/cmd/ksh93/sh/xec.c 2007-03-27 20:10:43.000000000 +0200
+++ ksh93_2007_04_18/src/cmd/ksh93/sh/xec.c 2007-04-18 15:17:02.000000000 +0200
@@ -1190,6 +1190,8 @@
}
sh_popcontext(&buff);
sh_iorestore(buff.topfd,jmpval);
+ if(buff.olist)
+ free_list(buff.olist);
if(type&FPIN)
{
job.waitall = waitall;
@@ -2878,6 +2880,8 @@
else
exitset();
sh_popcontext(&buff);
+ if(buff.olist)
+ free_list(buff.olist);
#ifdef SIGTSTP
if(jobwasset)
{
diff -r -N -u ksh93_2007_03_28/src/cmd/ksh93/tests/arith.sh ksh93_2007_04_18/src/cmd/ksh93/tests/arith.sh
--- ksh93_2007_03_28/src/cmd/ksh93/tests/arith.sh 2006-10-24 16:29:06.000000000 +0200
+++ ksh93_2007_04_18/src/cmd/ksh93/tests/arith.sh 2007-04-12 20:16:03.000000000 +0200
@@ -442,25 +442,25 @@
[[ $x == "$((x))" ]] || err_exit '$x !- $((x)) when x is pi'
$SHELL -c "[[ ${x//./} == {14,100}(\d) ]]" 2> /dev/null || err_exit 'pi has less than 14 significant places'
if (( Inf+1 == Inf ))
-then [[ $(printf "%g\n" $((Inf))) == Inf ]] || err_exit 'printf "%g\n" $((Inf) fails'
-# [[ $(printf "%g\n" $((Nan))) == Inf ]] || err_exit 'printf "%g\n" $((Nan) fails'
- [[ $(printf "%g\n" Inf) == Inf ]] || err_exit 'printf "%g\n" Inf fails'
- [[ $(printf "%g\n" NaN) == NaN ]] || err_exit 'printf "%g\n" NaN fails'
- [[ $(print -- $((Inf))) == Inf ]] || err_exit 'print -- $((Inf)) fails'
+then [[ $(printf "%g\n" $((Inf))) == inf ]] || err_exit 'printf "%g\n" $((Inf)) fails'
+# [[ $(printf "%g\n" $((Nan))) == inf ]] || err_exit 'printf "%g\n" $((Nan)) fails'
+ [[ $(printf "%g\n" Inf) == inf ]] || err_exit 'printf "%g\n" Inf fails'
+ [[ $(printf "%g\n" NaN) == nan ]] || err_exit 'printf "%g\n" NaN fails'
+ [[ $(print -- $((Inf))) == inf ]] || err_exit 'print -- $((Inf)) fails'
(( 1.0/0.0 == Inf )) || err_exit '1.0/0.0 != Inf'
- [[ $(print -- $((0.0/0.0))) == NaN ]] || err_exit '0.0/0.0 != NaN'
+ [[ $(print -- $((0.0/0.0))) == nan ]] || err_exit '0.0/0.0 != NaN'
(( Inf*Inf == Inf )) || err_exit 'Inf*Inf != Inf'
(( NaN != NaN )) || err_exit 'NaN == NaN'
(( -5*Inf == -Inf )) || err_exit '-5*Inf != -Inf'
- [[ $(print -- $((sqrt(-1.0)))) == NaN ]]|| err_exit 'sqrt(-1.0) != NaN'
+ [[ $(print -- $((sqrt(-1.0)))) == nan ]]|| err_exit 'sqrt(-1.0) != NaN'
(( pow(1.0,Inf) == 1.0 )) || err_exit 'pow(1.0,Inf) != 1.0'
(( pow(Inf,0.0) == 1.0 )) || err_exit 'pow(Inf,0.0) != 1.0'
- [[ $(print -- $((NaN/Inf))) == NaN ]] || err_exit 'NaN/Inf != NaN'
+ [[ $(print -- $((NaN/Inf))) == nan ]] || err_exit 'NaN/Inf != NaN'
(( 4.0/Inf == 0.0 )) || err_exit '4.0/Inf != 0.0'
else err_exit 'Inf and NaN not working'
fi
unset x y
float x=14.555 y
y=$(printf "%a" x)
-(( x == y )) || err_exit 'output of printf %a not self preserving'
+(( x == y )) || err_exit "output of printf %a not self preserving -- expected $x, got $y"
exit $((Errors))
diff -r -N -u ksh93_2007_03_28/src/cmd/ksh93/tests/attributes.sh ksh93_2007_04_18/src/cmd/ksh93/tests/attributes.sh
--- ksh93_2007_03_28/src/cmd/ksh93/tests/attributes.sh 2007-03-27 20:22:54.000000000 +0200
+++ ksh93_2007_04_18/src/cmd/ksh93/tests/attributes.sh 2007-04-11 04:42:02.000000000 +0200
@@ -208,6 +208,7 @@
{
export foo=hello
typeset -x bar=world
+ [[ $foo == hello ]] || err_exit 'export scoping problem in function'
}
fun
[[ $(export | grep foo) == 'foo=hello' ]] || err_exit 'export not working in functions'
diff -r -N -u ksh93_2007_03_28/src/lib/libast/comp/conf.sh ksh93_2007_04_18/src/lib/libast/comp/conf.sh
--- ksh93_2007_03_28/src/lib/libast/comp/conf.sh 2007-03-06 21:22:41.000000000 +0100
+++ ksh93_2007_04_18/src/lib/libast/comp/conf.sh 2007-04-02 21:43:47.000000000 +0200
@@ -21,7 +21,7 @@
########################################################################
: generate getconf and limits info
#
-# @(#)conf.sh (AT&T Research) 2007-03-06
+# @(#)conf.sh (AT&T Research) 2007-04-02
#
# this script generates these files from the table file in the first arg
# the remaining args are the C compiler name and flags
@@ -70,6 +70,7 @@
#include "FEATURE/common"'
tail='#include "FEATURE/param"'
generated="/* : : generated by $command from $1 : : */"
+hdr=
ifs=${IFS-'
'}
nl='
@@ -189,7 +190,23 @@
IFS=$ifs
break
;;
- *.h) headers=$headers$nl#include$sp'<'$1'>'
+ *.h) case $shell in
+ ksh) f=${1%.h} ;;
+ *) f=`echo $1 | sed 's,\.h$,,'` ;;
+ esac
+ case " $hdr " in
+ *" $f "*)
+ headers=$headers$nl#include$sp'<'$1'>'
+ ;;
+ *" -$f- "*)
+ ;;
+ *) if iffe -n - hdr $f | grep -q _hdr_$f
+ then hdr="$hdr $f"
+ headers=$headers$nl#include$sp'<'$1'>'
+ else hdr="$hdr -$f-"
+ fi
+ ;;
+ esac
;;
*) values=$values$sp$1
case $1 in
@@ -1040,12 +1057,13 @@
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" ;;
+ SIZE_*|U*|*_MAX)
+ f="%${LL}u"
+ t="unsigned _ast_intmax_t"
+ ;;
+ *) f="%${LL}d"
+ t="_ast_intmax_t"
+ ;;
esac
cat > $tmp.c <<!
${head}
@@ -1057,7 +1075,7 @@
int
main()
{
- printf("$f\n", $conf_name);
+ printf("$f\n", ($t)$conf_name);
return 0;
}
!
@@ -1160,6 +1178,16 @@
esac
conf_minmax=0
case $call:$standard:$flags in
+ *:C:*M*)for s in _${standard}_${conf_name} ${values}
+ do case $s in
+ $sym) ;;
+ *) conf_minmax=$s
+ conf_flags="${conf_flags}|CONF_MINMAX_DEF"
+ break
+ ;;
+ esac
+ done
+ ;;
*:C:*) ;;
[CPSX][CSX]:*:*[FM]*)
x=
diff -r -N -u ksh93_2007_03_28/src/lib/libast/comp/conf.tab ksh93_2007_04_18/src/lib/libast/comp/conf.tab
--- ksh93_2007_03_28/src/lib/libast/comp/conf.tab 2007-03-01 08:38:58.000000000 +0100
+++ ksh93_2007_04_18/src/lib/libast/comp/conf.tab 2007-04-02 21:45:47.000000000 +0200
@@ -1,7 +1,7 @@
#
# posix { getconf limits } macro table
#
-# @(#)conf.tab (AT&T Research) 2007-02-14
+# @(#)conf.tab (AT&T Research) 2007-04-01
#
# name standard section call flags [ header ... ] [ value ... ]
#
@@ -412,6 +412,8 @@
PTHREAD_KEYS_MAX C QQ 1 L
PTHREAD_STACK_MIN C QQ 1 L
PTHREAD_THREADS_MAX C QQ 1 L
+PTRDIFF_MAX C XX 1 LMU stdint.h 65535
+PTRDIFF_MIN C XX 1 LMU stdint.h -65535
RAW_SOCKETS POSIX SC 1 FUW
READER_WRITER_LOCKS POSIX SC 1 FUW
REALTIME XOPEN SC 1 FU
@@ -473,10 +475,13 @@
SHM XOPEN SC 1 FSUW
SHRT_MAX C XX 1 L 32767
SHRT_MIN C XX 1 L -32767
+SIG_ATOMIC_MAX C XX 1 L signal.h
+SIG_ATOMIC_MIN C XX 1 L signal.h
+SIGQUEUE_MAX POSIX SC 1 LMU 32
SIGQUEUE_MAX POSIX SC 1 LMU 32
SIGRT_MAX SVID SC 1 0
SIGRT_MIN SVID SC 1 0
-SIZE_MAX C XX 1 LMX UINT_MAX 65535
+SIZE_MAX C XX 1 LMX stdint.h UINT_MAX 65535
SLVM_MAXNODES C QQ 1 L
SOCK_MAXBUF C QQ 1 0
SOFTPOWER C QQ 1 L
@@ -523,7 +528,7 @@
TIMERS POSIX SC 1 CDFUW
TIMER_MAX POSIX SC 1 LMU 32
TMP AST CS 1 MU "/tmp"
-TMP_MAX C SC 1 LMU 33520641
+TMP_MAX C SC 1 LMU 10000
TRACE POSIX SC 1 FUW
TRACE_EVENT_FILTER POSIX SC 1 FUW
TRACE_EVENT_NAME_MAX POSIX SC 1 FUVW
@@ -565,6 +570,10 @@
VERSION_90 POSIX SC 1 FSU
VERSION_93 C XX 1 L
VERSION_93 POSIX SC 1 FSU
+WCHAR_MAX C XX 1 L stddef.h
+WCHAR_MIN C XX 1 L stddef.h
+WINT_MIN C XX 1 L wchar.h
+WINT_MAX C XX 1 L wchar.h
WORD_BIT XOPEN XX 1 L (8*sizeof(int))
XCU_VERSION XOPEN SC 1 CDFSU
XPG2 XOPEN XX 1 FU
diff -r -N -u ksh93_2007_03_28/src/lib/libast/RELEASE ksh93_2007_04_18/src/lib/libast/RELEASE
--- ksh93_2007_03_28/src/lib/libast/RELEASE 2007-03-28 08:15:10.000000000 +0200
+++ ksh93_2007_04_18/src/lib/libast/RELEASE 2007-04-13 19:09:16.000000000 +0200
@@ -1,3 +1,7 @@
+07-04-13 tm/tmxdate.c,tm/tmzone.c: handle [-+]0000 UTC zone offset
+07-04-11 sfio/sfvprintf.c: add %F, propagate SFFMT_UPPER
+07-04-11 sfio/sfcvt.c: handle SFFMT_UPPER => nan/inf vs. NAN/INF
+07-04-02 comp/conf.tab,comp/conf.sh: add C/POSIX <stdint.h> symbols
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_)
diff -r -N -u ksh93_2007_03_28/src/lib/libast/sfio/sfcvt.c ksh93_2007_04_18/src/lib/libast/sfio/sfcvt.c
--- ksh93_2007_03_28/src/lib/libast/sfio/sfcvt.c 2007-01-04 16:54:32.000000000 +0100
+++ ksh93_2007_04_18/src/lib/libast/sfio/sfcvt.c 2007-04-12 21:28:50.000000000 +0200
@@ -26,11 +26,13 @@
** Written by Kiem-Phong Vo and Glenn Fowler (SFFMT_AFORMAT)
*/
-static char *Inf = "Inf", *Zero = "0", *Nan = "NaN";
+static char *lc_inf = "inf", *uc_inf = "INF";
+static char *lc_nan = "nan", *uc_nan = "NAN";
+static char *Zero = "0";
+#define SF_INF ((_Sfi = 3), strncpy(buf, (format & SFFMT_UPPER) ? uc_inf : lc_inf, size))
+#define SF_NAN ((_Sfi = 3), strncpy(buf, (format & SFFMT_UPPER) ? uc_nan : lc_nan, size))
+#define SF_ZERO ((_Sfi = 1), strncpy(buf, Zero, size))
#define SF_INTPART (SF_IDIGITS/2)
-#define SF_INFINITE ((_Sfi = 3), Inf)
-#define SF_ZERO ((_Sfi = 1), Zero)
-#define SF_NAN ((_Sfi = 3), Nan)
#if ! _lib_isnan
#if _lib_fpclassify
@@ -77,7 +79,7 @@
if (n = isinf(dv))
{ if (n < 0)
*sign = 1;
- return SF_INFINITE;
+ return SF_INF;
}
#endif
#if !_ast_fltmax_double
@@ -104,7 +106,7 @@
switch (fpclassify(f))
{
case FP_INFINITE:
- return SF_INFINITE;
+ return SF_INF;
case FP_NAN:
return SF_NAN;
case FP_ZERO:
@@ -120,7 +122,7 @@
if(f < LDBL_MIN)
return SF_ZERO;
if(f > LDBL_MAX)
- return SF_INFINITE;
+ return SF_INF;
if(format & SFFMT_AFORMAT)
{ Sfdouble_t g;
@@ -161,7 +163,7 @@
{
f *= _Sfneg10[v];
if((n += (1<<v)) >= SF_IDIGITS)
- return SF_INFINITE;
+ return SF_INF;
}
} while(f >= (Sfdouble_t)SF_MAXLONG);
}
@@ -176,7 +178,7 @@
n = b-sp;
if((*decpt += (int)n) >= SF_IDIGITS)
- return SF_INFINITE;
+ return SF_INF;
b = sp;
sp = buf + SF_INTPART;
}
@@ -228,7 +230,7 @@
if (n = isinf(f))
{ if (n < 0)
*sign = 1;
- return SF_INFINITE;
+ return SF_INF;
}
#endif
#if _c99_in_the_wild
@@ -248,7 +250,7 @@
switch (fpclassify(f))
{
case FP_INFINITE:
- return SF_INFINITE;
+ return SF_INF;
case FP_NAN:
return SF_NAN;
case FP_ZERO:
@@ -264,7 +266,7 @@
if(f < DBL_MIN)
return SF_ZERO;
if(f > DBL_MAX)
- return SF_INFINITE;
+ return SF_INF;
if(format & SFFMT_AFORMAT)
{ double g;
@@ -303,7 +305,7 @@
else
{ f *= _Sfneg10[v];
if((n += (1<<v)) >= SF_IDIGITS)
- return SF_INFINITE;
+ return SF_INF;
}
} while(f >= (double)SF_MAXLONG);
}
@@ -318,7 +320,7 @@
n = b-sp;
if((*decpt += (int)n) >= SF_IDIGITS)
- return SF_INFINITE;
+ return SF_INF;
b = sp;
sp = buf + SF_INTPART;
}
diff -r -N -u ksh93_2007_03_28/src/lib/libast/sfio/sfvprintf.c ksh93_2007_04_18/src/lib/libast/sfio/sfvprintf.c
--- ksh93_2007_03_28/src/lib/libast/sfio/sfvprintf.c 2007-02-21 20:27:39.000000000 +0100
+++ ksh93_2007_04_18/src/lib/libast/sfio/sfvprintf.c 2007-04-12 21:34:05.000000000 +0200
@@ -124,7 +124,7 @@
int argp, argn; /* arg position and number */
#define SLACK 1024
- char buf[SF_MAXDIGITS+SLACK], tmp[SF_MAXDIGITS], data[SF_GRAIN];
+ char buf[SF_MAXDIGITS+SLACK], tmp[SF_MAXDIGITS+1], data[SF_GRAIN];
int decimal = 0, thousand = 0;
#if _has_multibyte
@@ -1099,7 +1099,7 @@
case 'g': case 'G': /* these ultimately become %e or %f */
case 'a': case 'A':
case 'e': case 'E':
- case 'f':
+ case 'f': case 'F':
#if !_ast_fltmax_double
if(size == sizeof(Sfdouble_t) )
{ v = SFFMT_LDOUBLE;
@@ -1111,28 +1111,28 @@
dval = argv.d;
}
- if(fmt == 'e' || fmt == 'E')
- { n = (precis = precis < 0 ? FPRECIS : precis)+1;
- v |= SFFMT_EFORMAT;
- ep = _sfcvt(dval,tmp,sizeof(tmp), min(n,SF_FDIGITS),
+ if(fmt == 'e' || fmt == 'E' && (v |= SFFMT_UPPER))
+ { v |= SFFMT_EFORMAT;
+ n = (precis = precis < 0 ? FPRECIS : precis)+1;
+ ep = _sfcvt(dval,tmp+1,sizeof(tmp)-1, min(n,SF_FDIGITS),
&decpt, &sign, &n_s, v);
goto e_format;
}
- else if(fmt == 'f' || fmt == 'F')
+ else if(fmt == 'f' || fmt == 'F' && (v |= SFFMT_UPPER))
{ precis = precis < 0 ? FPRECIS : precis;
- ep = _sfcvt(dval,tmp,sizeof(tmp), min(precis,SF_FDIGITS),
+ ep = _sfcvt(dval,tmp+1,sizeof(tmp)-1, min(precis,SF_FDIGITS),
&decpt, &sign, &n_s, v);
goto f_format;
}
- else if(fmt == 'a' || fmt == 'A')
- { if(precis < 0)
- { if(v == SFFMT_LDOUBLE)
+ else if(fmt == 'a' || fmt == 'A' && (v |= SFFMT_UPPER))
+ { v |= SFFMT_AFORMAT;
+ if(precis < 0)
+ { if(v & SFFMT_LDOUBLE)
precis = 2*(sizeof(Sfdouble_t) - 2);
else precis = 2*(sizeof(double) - 2);
}
n = precis + 1;
- v |= SFFMT_AFORMAT | (fmt == 'A' ? SFFMT_UPPER : 0);
- ep = _sfcvt(dval,tmp,sizeof(tmp), min(n,SF_FDIGITS),
+ ep = _sfcvt(dval,tmp+1,sizeof(tmp)-1, min(n,SF_FDIGITS),
&decpt, &sign, &n_s, v);
sp = endsp = buf+1; /* reserve space for sign */
@@ -1144,8 +1144,10 @@
}
else /* 'g' or 'G' format */
{ precis = precis < 0 ? FPRECIS : precis == 0 ? 1 : precis;
+ if(fmt == 'G')
+ v |= SFFMT_UPPER;
v |= SFFMT_EFORMAT;
- ep = _sfcvt(dval,tmp,sizeof(tmp), min(precis,SF_FDIGITS),
+ ep = _sfcvt(dval,tmp+1,sizeof(tmp)-1, min(precis,SF_FDIGITS),
&decpt, &sign, &n_s, v);
if(dval == 0.)
decpt = 1;
@@ -1214,6 +1216,7 @@
if(isalpha(*ep))
{
infinite:
+ flags &= ~SFFMT_ZERO;
endsp = (sp = ep)+sfslen();
ep = endep;
precis = 0;
diff -r -N -u ksh93_2007_03_28/src/lib/libast/tm/tmxdate.c ksh93_2007_04_18/src/lib/libast/tm/tmxdate.c
--- ksh93_2007_03_28/src/lib/libast/tm/tmxdate.c 2006-12-26 23:15:08.000000000 +0100
+++ ksh93_2007_04_18/src/lib/libast/tm/tmxdate.c 2007-04-13 19:07:06.000000000 +0200
@@ -189,8 +189,9 @@
{
if (*s == '.' || *s == '-' || *s == '+')
{
- if (((set|state) & (YEAR|MONTH|HOUR|MINUTE|ZONE)) == (YEAR|MONTH|HOUR|MINUTE) && (zone = tmgoff(s, &t, 0)))
+ if (((set|state) & (YEAR|MONTH|HOUR|MINUTE|ZONE)) == (YEAR|MONTH|HOUR|MINUTE) && (i = tmgoff(s, &t, TM_LOCALZONE)) != TM_LOCALZONE)
{
+ zone = i;
state |= ZONE;
if (!*(s = t))
break;
diff -r -N -u ksh93_2007_03_28/src/lib/libast/tm/tmzone.c ksh93_2007_04_18/src/lib/libast/tm/tmzone.c
--- ksh93_2007_03_28/src/lib/libast/tm/tmzone.c 1998-11-12 06:50:34.000000000 +0100
+++ ksh93_2007_04_18/src/lib/libast/tm/tmzone.c 2007-04-13 19:07:22.000000000 +0200
@@ -56,7 +56,7 @@
static char off[16];
tmset(tm_info.zone);
- if ((*name == '+' || *name == '-') && (fixed.west = tmgoff(name, &e, 0)) && !*e)
+ if ((*name == '+' || *name == '-') && (fixed.west = tmgoff(name, &e, TM_LOCALZONE)) != TM_LOCALZONE && !*e)
{
fixed.standard = fixed.daylight = strncpy(off, name, sizeof(off) - 1);
if (end)
More information about the ksh93-integration-discuss
mailing list