Permalink
Browse files

Update sh from head r340284

  • Loading branch information...
bdrewery committed Nov 14, 2018
1 parent b2b6178 commit 118f2013de428f67ea8b4f714168a91a48989423
Showing with 34 additions and 56 deletions.
  1. +12 −9 external/sh/error.c
  2. +4 −5 external/sh/error.h
  3. +8 −14 external/sh/eval.c
  4. +5 −9 external/sh/exec.c
  5. +1 −3 external/sh/exec.h
  6. +3 −2 external/sh/jobs.c
  7. +1 −14 external/sh/main.c
@@ -36,7 +36,7 @@ static char sccsid[] = "@(#)error.c 8.2 (Berkeley) 5/4/95";
#endif
#endif /* not lint */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD: head/bin/sh/error.c 314436 2017-02-28 23:42:47Z imp $");
__FBSDID("$FreeBSD: head/bin/sh/error.c 340284 2018-11-09 14:58:24Z jilles $");
/*
* Errors and exceptions.
@@ -67,7 +67,7 @@ volatile sig_atomic_t suppressint;
volatile sig_atomic_t intpending;
static void exverror(int, const char *, va_list) __printf0like(2, 0) __dead2;
static void verrorwithstatus(int, const char *, va_list) __printf0like(2, 0) __dead2;
/*
* Called to raise an exception. Since C doesn't include exceptions, we
@@ -154,7 +154,7 @@ warning(const char *msg, ...)
* formatting. It then raises the error exception.
*/
static void
exverror(int cond, const char *msg, va_list ap)
verrorwithstatus(int status, const char *msg, va_list ap)
{
/*
* An interrupt trumps an error. Certain places catch error
@@ -168,14 +168,17 @@ exverror(int cond, const char *msg, va_list ap)
#ifdef DEBUG
if (msg)
TRACE(("exverror(%d, \"%s\") pid=%d\n", cond, msg, getpid()));
TRACE(("verrorwithstatus(%d, \"%s\") pid=%d\n",
status, msg, getpid()));
else
TRACE(("exverror(%d, NULL) pid=%d\n", cond, getpid()));
TRACE(("verrorwithstatus(%d, NULL) pid=%d\n",
status, getpid()));
#endif
if (msg)
vwarning(msg, ap);
flushall();
exraise(cond);
exitstatus = status;
exraise(EXERROR);
}
@@ -184,16 +187,16 @@ error(const char *msg, ...)
{
va_list ap;
va_start(ap, msg);
exverror(EXERROR, msg, ap);
verrorwithstatus(2, msg, ap);
va_end(ap);
}
void
exerror(int cond, const char *msg, ...)
errorwithstatus(int status, const char *msg, ...)
{
va_list ap;
va_start(ap, msg);
exverror(cond, msg, ap);
verrorwithstatus(status, msg, ap);
va_end(ap);
}
@@ -30,7 +30,7 @@
* SUCH DAMAGE.
*
* @(#)error.h 8.2 (Berkeley) 5/4/95
* $FreeBSD: head/bin/sh/error.h 319591 2017-06-04 21:58:02Z jilles $
* $FreeBSD: head/bin/sh/error.h 340284 2018-11-09 14:58:24Z jilles $
*/
/*
@@ -55,9 +55,8 @@ extern volatile sig_atomic_t exception;
/* exceptions */
#define EXINT 0 /* SIGINT received */
#define EXERROR 1 /* a generic error */
#define EXEXEC 2 /* command execution failed */
#define EXEXIT 3 /* call exitshell(exitstatus) */
#define EXERROR 1 /* a generic error with exitstatus */
#define EXEXIT 2 /* call exitshell(exitstatus) */
/*
@@ -83,7 +82,7 @@ void exraise(int) __dead2;
void onint(void) __dead2;
void warning(const char *, ...) __printflike(1, 2);
void error(const char *, ...) __printf0like(1, 2) __dead2;
void exerror(int, const char *, ...) __printf0like(2, 3) __dead2;
void errorwithstatus(int, const char *, ...) __printf0like(2, 3) __dead2;
/*
@@ -36,7 +36,7 @@ static char sccsid[] = "@(#)eval.c 8.9 (Berkeley) 6/8/95";
#endif
#endif /* not lint */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD: head/bin/sh/eval.c 327212 2017-12-26 16:23:18Z jilles $");
__FBSDID("$FreeBSD: head/bin/sh/eval.c 340284 2018-11-09 14:58:24Z jilles $");
#include <paths.h>
#include <signal.h>
@@ -466,12 +466,9 @@ evalredir(union node *n, int flags)
handler = savehandler;
e = exception;
popredir();
if (e == EXERROR || e == EXEXEC) {
if (in_redirect) {
exitstatus = 2;
FORCEINTON;
return;
}
if (e == EXERROR && in_redirect) {
FORCEINTON;
return;
}
longjmp(handler->loc, 1);
} else {
@@ -505,7 +502,7 @@ exphere(union node *redir, struct arglist *fn)
forcelocal++;
savehandler = handler;
if (setjmp(jmploc.loc))
need_longjmp = exception != EXERROR && exception != EXEXEC;
need_longjmp = exception != EXERROR;
else {
handler = &jmploc;
expandarg(redir->nhere.doc, fn, 0);
@@ -669,8 +666,8 @@ evalbackcmd(union node *n, struct backcmd *result)
forcelocal++;
savehandler = handler;
if (setjmp(jmploc.loc)) {
if (exception == EXERROR || exception == EXEXEC)
exitstatus = 2;
if (exception == EXERROR)
/* nothing */;
else if (exception != 0) {
handler = savehandler;
forcelocal--;
@@ -1089,8 +1086,6 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd)
e = exception;
if (e == EXINT)
exitstatus = SIGINT+128;
else if (e != EXEXIT)
exitstatus = 2;
goto cmddone;
}
handler = &jmploc;
@@ -1139,8 +1134,7 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd)
if (cmdentry.u.index != EXECCMD)
popredir();
if (e != -1) {
if ((e != EXERROR && e != EXEXEC)
|| cmdentry.special)
if (e != EXERROR || cmdentry.special)
exraise(e);
popfilesupto(savetopfile);
if (flags != EV_BACKCMD)
@@ -36,7 +36,7 @@ static char sccsid[] = "@(#)exec.c 8.4 (Berkeley) 6/8/95";
#endif
#endif /* not lint */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD: head/bin/sh/exec.c 336320 2018-07-15 21:55:17Z jilles $");
__FBSDID("$FreeBSD: head/bin/sh/exec.c 340284 2018-11-09 14:58:24Z jilles $");
#include <sys/types.h>
#include <sys/stat.h>
@@ -91,7 +91,6 @@ struct tblentry {
static struct tblentry *cmdtable[CMDTABLESIZE];
static int cmdtable_cd = 0; /* cmdtable contains cd-dependent entries */
int exerrno = 0; /* Last exec error */
static void tryexec(char *, char **, char **);
@@ -134,13 +133,10 @@ shellexec(char **argv, char **envp, const char *path, int idx)
}
/* Map to POSIX errors */
if (e == ENOENT || e == ENOTDIR) {
exerrno = 127;
exerror(EXEXEC, "%s: not found", argv[0]);
} else {
exerrno = 126;
exerror(EXEXEC, "%s: %s", argv[0], strerror(e));
}
if (e == ENOENT || e == ENOTDIR)
errorwithstatus(127, "%s: not found", argv[0]);
else
errorwithstatus(126, "%s: %s", argv[0], strerror(e));
}
@@ -30,7 +30,7 @@
* SUCH DAMAGE.
*
* @(#)exec.h 8.3 (Berkeley) 6/8/95
* $FreeBSD: head/bin/sh/exec.h 336320 2018-07-15 21:55:17Z jilles $
* $FreeBSD: head/bin/sh/exec.h 339822 2018-10-27 20:17:57Z jilles $
*/
/* values of cmdtype */
@@ -61,8 +61,6 @@ struct cmdentry {
#define DO_ERR 0x01 /* prints errors */
#define DO_NOFUNC 0x02 /* don't return shell functions, for command */
extern int exerrno; /* last exec error */
void shellexec(char **, char **, const char *, int) __dead2;
char *padvance(const char **, const char **, const char *);
void find_command(const char *, struct cmdentry *, int, const char *);
@@ -36,7 +36,7 @@ static char sccsid[] = "@(#)jobs.c 8.5 (Berkeley) 5/4/95";
#endif
#endif /* not lint */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD: head/bin/sh/jobs.c 328818 2018-02-02 22:53:58Z jilles $");
__FBSDID("$FreeBSD: head/bin/sh/jobs.c 340284 2018-11-09 14:58:24Z jilles $");
#include <sys/ioctl.h>
#include <sys/param.h>
@@ -73,6 +73,7 @@ __FBSDID("$FreeBSD: head/bin/sh/jobs.c 328818 2018-02-02 22:53:58Z jilles $");
#include "mystring.h"
#include "var.h"
#include "builtins.h"
#include "eval.h"
/*
@@ -1005,7 +1006,7 @@ vforkexecshell(struct job *jp, char **argv, char **envp, const char *path, int i
if (pid == 0) {
TRACE(("Child shell %d\n", (int)getpid()));
if (setjmp(jmploc.loc))
_exit(exception == EXEXEC ? exerrno : 2);
_exit(exitstatus);
if (pip != NULL) {
close(pip[0]);
if (pip[1] != 1) {
@@ -44,7 +44,7 @@ static char sccsid[] = "@(#)main.c 8.6 (Berkeley) 5/28/95";
#endif
#endif /* not lint */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD: head/bin/sh/main.c 336320 2018-07-15 21:55:17Z jilles $");
__FBSDID("$FreeBSD: head/bin/sh/main.c 340284 2018-11-09 14:58:24Z jilles $");
#include <stdio.h>
#include <signal.h>
@@ -105,19 +105,6 @@ main(int argc, char *argv[])
initcharset();
state = 0;
if (setjmp(main_handler.loc)) {
switch (exception) {
case EXEXEC:
exitstatus = exerrno;
break;
case EXERROR:
exitstatus = 2;
break;
default:
break;
}
if (state == 0 || iflag == 0 || ! rootshell ||
exception == EXEXIT)
exitshell(exitstatus);

0 comments on commit 118f201

Please sign in to comment.