diff --git a/src/cmd/ksh93/bltins/typeset.c b/src/cmd/ksh93/bltins/typeset.c index dcaa072f9..72f099075 100644 --- a/src/cmd/ksh93/bltins/typeset.c +++ b/src/cmd/ksh93/bltins/typeset.c @@ -1229,7 +1229,7 @@ int b_builtin(int argc,char *argv[],Shbltin_t *context) { if(nv_isattr(np,BLT_SPC)) errmsg = "restricted name"; - addr = (Shbltin_f)np->nvalue.bfp; + addr = funptr(np); } if(!dlete && !addr && !(np=sh_addbuiltin(arg,(Shbltin_f)0 ,0))) errmsg = "not found"; diff --git a/src/cmd/ksh93/include/name.h b/src/cmd/ksh93/include/name.h index 0afd8f49c..70b9797b8 100644 --- a/src/cmd/ksh93/include/name.h +++ b/src/cmd/ksh93/include/name.h @@ -149,7 +149,7 @@ struct Ufunction #define is_abuiltin(n) (nv_isattr(n,NV_BLTIN|NV_INTEGER)==NV_BLTIN) #define is_afunction(n) (nv_isattr(n,NV_FUNCTION|NV_REF)==NV_FUNCTION) #define nv_funtree(n) ((n)->nvalue.rp->ptree) -#define funptr(n) ((n)->nvalue.bfp) +#define funptr(n) ((Shbltin_f)(n)->nvalue.bfp) /* NAMNOD MACROS */ /* ... for attributes */ diff --git a/src/cmd/ksh93/sh/arith.c b/src/cmd/ksh93/sh/arith.c index 0fc66b0d0..85f1f64f5 100644 --- a/src/cmd/ksh93/sh/arith.c +++ b/src/cmd/ksh93/sh/arith.c @@ -406,7 +406,7 @@ static Sfdouble_t arith(const char **ptr, struct lval *lvalue, int type, Sfdoubl char lastbase=0, *val = xp, oerrno = errno; lvalue->eflag = 0; errno = 0; - if(!sh_isoption(sh.bltindata.bnode==SYSLET ? SH_LETOCTAL : SH_POSIX)) + if(!sh_isoption(sh.bltinfun==b_let ? SH_LETOCTAL : SH_POSIX)) { /* Skip leading zeros to avoid parsing as octal */ while(*val=='0' && isdigit(val[1])) @@ -529,7 +529,7 @@ static Sfdouble_t arith(const char **ptr, struct lval *lvalue, int type, Sfdoubl Sfdouble_t sh_strnum(register const char *str, char** ptr, int mode) { register Sfdouble_t d; - char base = (sh_isoption(sh.bltindata.bnode==SYSLET ? SH_LETOCTAL : SH_POSIX) ? 0 : 10), *last; + char base = (sh_isoption(sh.bltinfun==b_let ? SH_LETOCTAL : SH_POSIX) ? 0 : 10), *last; if(*str==0) { d = 0.0; diff --git a/src/cmd/ksh93/sh/fault.c b/src/cmd/ksh93/sh/fault.c index 6e0ce38c8..18b438085 100644 --- a/src/cmd/ksh93/sh/fault.c +++ b/src/cmd/ksh93/sh/fault.c @@ -534,7 +534,7 @@ void sh_exit(register int xno) register int sig=0; register Sfio_t* pool; /* POSIX requires exit status >= 2 for error in 'test'/'[' */ - if(xno == 1 && (sh.bltindata.bnode==SYSTEST || sh.bltindata.bnode==SYSBRACKET)) + if(xno==1 && sh.bltinfun==b_test) sh.exitval = 2; else sh.exitval = xno; diff --git a/src/cmd/ksh93/sh/nvdisc.c b/src/cmd/ksh93/sh/nvdisc.c index dc6924b92..26bf7a694 100644 --- a/src/cmd/ksh93/sh/nvdisc.c +++ b/src/cmd/ksh93/sh/nvdisc.c @@ -1113,7 +1113,7 @@ Namval_t *sh_addbuiltin(const char *path, Shbltin_f bltin, void *extra) int offset=staktell(); if(extra==(void*)1) name = path; - else if((name = path_basename(path))==path && bltin!=(Shbltin_f)SYSTYPESET->nvalue.bfp && (nq=nv_bfsearch(name,sh.bltin_tree,(Namval_t**)0,&cp))) + else if((name = path_basename(path))==path && bltin!=b_typeset && (nq=nv_bfsearch(name,sh.bltin_tree,(Namval_t**)0,&cp))) path = name = stakptr(offset); else if(sh.bltin_dir && extra!=(void*)1) { @@ -1152,7 +1152,7 @@ Namval_t *sh_addbuiltin(const char *path, Shbltin_f bltin, void *extra) if(nv_isattr(np,BLT_SPC)) return(np); if(!bltin) - bltin = (Shbltin_f)np->nvalue.bfp; + bltin = funptr(np); if(np->nvenv) dtdelete(sh.bltin_tree,np); if(extra == (void*)1) diff --git a/src/cmd/ksh93/sh/nvtype.c b/src/cmd/ksh93/sh/nvtype.c index 72332632d..e5869a949 100644 --- a/src/cmd/ksh93/sh/nvtype.c +++ b/src/cmd/ksh93/sh/nvtype.c @@ -799,7 +799,7 @@ void nv_addtype(Namval_t *np, const char *optstr, Optdisc_t *op, size_t optsz) #endif /* SHOPT_NAMESPACE */ if((bp=nv_search(name,sh.fun_tree,NV_NOSCOPE)) && !bp->nvalue.ip) nv_delete(bp,sh.fun_tree,0); - bp = sh_addbuiltin(name, (Shbltin_f)mp->nvalue.bfp, (void*)cp); + bp = sh_addbuiltin(name, funptr(mp), cp); nv_onattr(bp,nv_isattr(mp,NV_PUBLIC)); nv_onattr(np, NV_RDONLY); } diff --git a/src/cmd/ksh93/sh/parse.c b/src/cmd/ksh93/sh/parse.c index 744e5b55e..02550800c 100644 --- a/src/cmd/ksh93/sh/parse.c +++ b/src/cmd/ksh93/sh/parse.c @@ -241,7 +241,7 @@ static void check_typedef(struct comnod *tp, char intypeset) dcl_tree = dtopen(&_Nvdisc, Dtoset); dtview(sh.bltin_tree, dcl_tree); } - nv_onattr(sh_addbuiltin(cp, (Shbltin_f)SYSTRUE->nvalue.bfp, NIL(void*)), NV_BLTIN|BLT_DCL); + nv_onattr(sh_addbuiltin(cp, b_true, NIL(void*)), NV_BLTIN|BLT_DCL); } } /* @@ -1563,7 +1563,7 @@ static Shnode_t *simple(Lex_t *lexp,int flag, struct ionod *io) cmdarg++; else if(np==SYSEXEC || np==SYSREDIR) lexp->inexec = 1; - else if(np->nvalue.bfp==(Nambfp_f)b_getopts) + else if(funptr(np)==b_getopts) opt_get |= FOPTGET; } } diff --git a/src/cmd/ksh93/sh/path.c b/src/cmd/ksh93/sh/path.c index 29016ee4c..9e8f4ba15 100644 --- a/src/cmd/ksh93/sh/path.c +++ b/src/cmd/ksh93/sh/path.c @@ -821,7 +821,7 @@ Pathcomp_t *path_absolute(register const char *name, Pathcomp_t *pp, int flag) sh_addlib(dll,stakptr(m),oldpp); if(dll && (addr=(Shbltin_f)dlllook(dll,stakptr(n))) && - (!(np = sh_addbuiltin(stakptr(PATH_OFFSET),NiL,NiL)) || np->nvalue.bfp!=(Nambfp_f)addr) && + (!(np = sh_addbuiltin(stakptr(PATH_OFFSET),NiL,NiL)) || funptr(np)!=addr) && (np = sh_addbuiltin(stakptr(PATH_OFFSET),addr,NiL))) { np->nvenv = dll; @@ -869,7 +869,7 @@ Pathcomp_t *path_absolute(register const char *name, Pathcomp_t *pp, int flag) if(np) { n = np->nvflag; - np = sh_addbuiltin(stakptr(PATH_OFFSET),(Shbltin_f)np->nvalue.bfp,nv_context(np)); + np = sh_addbuiltin(stakptr(PATH_OFFSET),funptr(np),nv_context(np)); np->nvflag = n; } } diff --git a/src/cmd/ksh93/sh/xec.c b/src/cmd/ksh93/sh/xec.c index dd42b8b57..68bb5a9b6 100644 --- a/src/cmd/ksh93/sh/xec.c +++ b/src/cmd/ksh93/sh/xec.c @@ -394,7 +394,7 @@ static int p_comarg(register struct comnod *com) bp->ptr = nv_context(np); bp->data = com->comstate; bp->flags = SH_END_OPTIM; - ((Shbltin_f)funptr(np))(0,(char**)0, bp); + (funptr(np))(0, NIL(char**), bp); bp->ptr = save_ptr; bp->data = save_data; } @@ -1046,7 +1046,7 @@ int sh_exec(register const Shnode_t *t, int flags) else if(checkopt(com,'a')) flgs |= NV_IARRAY; } - if(np && np->nvalue.bfp==SYSTYPESET->nvalue.bfp) + if(np && funptr(np)==b_typeset) { /* command calls b_typeset(); treat as a typeset variant */ flgs |= NV_UNATTR; /* unset previous attributes before assigning */ @@ -1297,7 +1297,7 @@ int sh_exec(register const Shnode_t *t, int flags) error_info.id = *com; if(argn) sh.exitval = 0; - sh.bltinfun = (Shbltin_f)funptr(np); + sh.bltinfun = funptr(np); bp->bnode = np; bp->vnode = nq; bp->ptr = nv_context(np); @@ -3303,7 +3303,7 @@ int sh_fun(Namval_t *np, Namval_t *nq, char *argv[]) opt_info.index = opt_info.offset = 0; opt_info.disc = 0; sh.exitval = 0; - sh.exitval = ((Shbltin_f)funptr(np))(n,argv,bp); + sh.exitval = (funptr(np))(n,argv,bp); } sh_popcontext(buffp); if(jmpval>SH_JMPCMD)