From 4d902142a5691cd9641b2ad468eb5407c897b433 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Fri, 10 Aug 2012 12:54:04 +0200 Subject: hush: catch errors from execute_binfmt execute_binfmt may return negative return values which hush interprets as 'exit'. Catch this and print an error message instead. Signed-off-by: Sascha Hauer --- common/hush.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'common/hush.c') diff --git a/common/hush.c b/common/hush.c index 288114c6cf..61aac13d1b 100644 --- a/common/hush.c +++ b/common/hush.c @@ -785,12 +785,17 @@ static int run_pipe_real(struct p_context *ctx, struct pipe *pi) remove_quotes(globbuf.gl_pathc, globbuf.gl_pathv); - if (!strcmp(globbuf.gl_pathv[0], "getopt")) + if (!strcmp(globbuf.gl_pathv[0], "getopt")) { ret = builtin_getopt(ctx, child, globbuf.gl_pathc, globbuf.gl_pathv); - else if (!strcmp(globbuf.gl_pathv[0], "exit")) + } else if (!strcmp(globbuf.gl_pathv[0], "exit")) { ret = builtin_exit(ctx, child, globbuf.gl_pathc, globbuf.gl_pathv); - else + } else { ret = execute_binfmt(globbuf.gl_pathc, globbuf.gl_pathv); + if (ret < 0) { + printf("%s: %s\n", globbuf.gl_pathv[0], strerror(-ret)); + ret = 127; + } + } globfree(&globbuf); -- cgit v1.2.3