From b7332de28c4e51ad0c43a26dbe6c380bc3564a98 Mon Sep 17 00:00:00 2001 From: tg Date: Sun, 19 Apr 2015 14:40:09 +0000 Subject: [PATCH] a bit oksh-inspired getn return value checking, plus some code optimisation --- exec.c | 8 ++++---- jobs.c | 14 +++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/exec.c b/exec.c index b2db371..ba8619b 100644 --- a/exec.c +++ b/exec.c @@ -23,7 +23,7 @@ #include "sh.h" -__RCSID("$MirOS: src/bin/mksh/exec.c,v 1.150 2015/04/19 14:23:26 tg Exp $"); +__RCSID("$MirOS: src/bin/mksh/exec.c,v 1.151 2015/04/19 14:40:08 tg Exp $"); #ifndef MKSH_DEFAULT_EXECSHELL #define MKSH_DEFAULT_EXECSHELL "/bin/sh" @@ -1597,9 +1597,9 @@ do_selectargs(const char **ap, bool print_menu) if (call_builtin(findcom("read", FC_BI), read_args, Tselect, false)) return (NULL); - s = str_val(global("REPLY")); - if (*s && getn(s, &i)) - return ((i >= 1 && i <= argct) ? ap[i - 1] : null); + if (*(s = str_val(global("REPLY")))) + return ((getn(s, &i) && i >= 1 && i <= argct) ? + ap[i - 1] : null); print_menu = true; } } diff --git a/jobs.c b/jobs.c index 6e3a761..8469f83 100644 --- a/jobs.c +++ b/jobs.c @@ -23,7 +23,7 @@ #include "sh.h" -__RCSID("$MirOS: src/bin/mksh/jobs.c,v 1.111 2015/04/19 14:23:26 tg Exp $"); +__RCSID("$MirOS: src/bin/mksh/jobs.c,v 1.112 2015/04/19 14:40:09 tg Exp $"); #if HAVE_KILLPG #define mksh_killpg killpg @@ -1644,8 +1644,7 @@ j_lookup(const char *cp, int *ecodep) size_t len; int job = 0; - if (ksh_isdigit(*cp)) { - getn(cp, &job); + if (ksh_isdigit(*cp) && getn(cp, &job)) { /* Look for last_proc->pid (what $! returns) first... */ for (j = job_list; j != NULL; j = j->next) if (j->last_proc && j->last_proc->pid == job) @@ -1657,11 +1656,10 @@ j_lookup(const char *cp, int *ecodep) for (j = job_list; j != NULL; j = j->next) if (j->pgrp && j->pgrp == job) return (j); - if (ecodep) - *ecodep = JL_NOSUCH; - return (NULL); + goto j_lookup_nosuch; } if (*cp != '%') { + j_lookup_invalid: if (ecodep) *ecodep = JL_INVALID; return (NULL); @@ -1681,7 +1679,8 @@ j_lookup(const char *cp, int *ecodep) case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': - getn(cp, &job); + if (!getn(cp, &job)) + goto j_lookup_invalid; for (j = job_list; j != NULL; j = j->next) if (j->job == job) return (j); @@ -1721,6 +1720,7 @@ j_lookup(const char *cp, int *ecodep) return (last_match); break; } + j_lookup_nosuch: if (ecodep) *ecodep = JL_NOSUCH; return (NULL);