Message ID | 20160606144527.GA23630@gondor.apana.org.au (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Herbert Xu |
Headers | show |
On Mon, 6 Jun 2016 22:45:27 +0800, Herbert Xu <herbert@gondor.apana.org.au> wrote: > On Fri, Jun 03, 2016 at 09:54:31AM +0200, Stephen Kitt wrote: > > When looking for a job using a string descriptor, e.g. > > > > fg %man > > > > the relevant loop in src/jobs.c only ever exits to the err label. With > > this patch, when the end condition is reached, we check whether a job > > was found, and if so, set things up to exit correctly via gotit. > > Multiple matches are already caught using the test in the match block. > > > > Signed-off-by: Stephen Kitt <steve@sk2.org> > > Thanks for the patch. I'd prefer to move that logic out of the > loop, like this: [...] > - while (1) { > - if (!jp) > - goto err; > + while (jp) { [...] That is indeed much better, thanks! Regards, Stephen
diff --git a/src/jobs.c b/src/jobs.c index 3997863..4f02e38 100644 --- a/src/jobs.c +++ b/src/jobs.c @@ -714,9 +714,7 @@ check: } found = 0; - while (1) { - if (!jp) - goto err; + while (jp) { if (match(jp->ps[0].cmd, p)) { if (found) goto err; @@ -726,6 +724,10 @@ check: jp = jp->prev_job; } + if (!found) + goto err; + jp = found; + gotit: #if JOBS err_msg = "job %s not created under job control";