From 5401a55a983213f428c4db60c1864473294587d7 Mon Sep 17 00:00:00 2001 From: tg Date: Sun, 24 Jul 2016 23:07:19 +0000 Subject: [PATCH] =?UTF-8?q?optimise=20away=20code=20for=20a=20case=20that?= =?UTF-8?q?=E2=80=99s=20almost=20unlikely=20to=20happen;=20fix=20pasto(=3F?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exec.c | 30 ++++++++++++------------------ shf.c | 4 ++-- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/exec.c b/exec.c index a3ab278..7447567 100644 --- a/exec.c +++ b/exec.c @@ -23,7 +23,7 @@ #include "sh.h" -__RCSID("$MirOS: src/bin/mksh/exec.c,v 1.175 2016/06/26 00:44:58 tg Exp $"); +__RCSID("$MirOS: src/bin/mksh/exec.c,v 1.176 2016/07/24 23:07:19 tg Exp $"); #ifndef MKSH_DEFAULT_EXECSHELL #define MKSH_DEFAULT_EXECSHELL MKSH_UNIXROOT "/bin/sh" @@ -715,39 +715,33 @@ comexec(struct op *t, struct tbl * volatile tp, const char **ap, struct tbl *ftp; if (!tp->u.fpath) { + fpath_error: rv = (tp->u2.errnov == ENOENT) ? 127 : 126; warningf(true, "%s: %s %s: %s", cp, "can't find", "function definition file", cstrerror(tp->u2.errnov)); break; } - if (include(tp->u.fpath, 0, NULL, false) < 0) { + errno = 0; + if (include(tp->u.fpath, 0, NULL, false) < 0 || + !(ftp = findfunc(cp, hash(cp), false)) || + !(ftp->flag & ISSET)) { + rv = errno; if (!strcmp(cp, Tcat)) { - no_cat_in_FPATH: tp = findcom(Tcat, FC_BI); goto do_call_builtin; } #ifdef MKSH_PRINTF_BUILTIN if (!strcmp(cp, Tprintf)) { - no_printf_in_FPATH: tp = findcom(Tprintf, FC_BI); goto do_call_builtin; } #endif - warningf(true, "%s: %s %s %s: %s", cp, - "can't open", "function definition file", - tp->u.fpath, cstrerror(errno)); - rv = 127; - break; - } - if (!(ftp = findfunc(cp, hash(cp), false)) || - !(ftp->flag & ISSET)) { - if (!strcmp(cp, Tcat)) - goto no_cat_in_FPATH; -#ifdef MKSH_PRINTF_BUILTIN - if (!strcmp(cp, Tprintf)) - goto no_printf_in_FPATH; -#endif + if (rv) { + tp->u2.errnov = rv; + cp = tp->u.fpath; + goto fpath_error; + } warningf(true, "%s: %s %s", cp, "function not defined by", tp->u.fpath); rv = 127; diff --git a/shf.c b/shf.c index 06b6e5c..0974c46 100644 --- a/shf.c +++ b/shf.c @@ -25,7 +25,7 @@ #include "sh.h" -__RCSID("$MirOS: src/bin/mksh/shf.c,v 1.74 2016/05/17 15:36:35 tg Exp $"); +__RCSID("$MirOS: src/bin/mksh/shf.c,v 1.75 2016/07/24 23:07:19 tg Exp $"); /* flags to shf_emptybuf() */ #define EB_READSW 0x01 /* about to switch to reading */ @@ -457,7 +457,7 @@ shf_read(char *buf, ssize_t bsize, struct shf *shf) (unsigned int)shf->flags); if (bsize <= 0) - internal_errorf("%s: %s %zd", "shf_write", "bsize", bsize); + internal_errorf("%s: %s %zd", "shf_read", "bsize", bsize); while (bsize > 0) { if (shf->rnleft == 0 &&