diff mbox

[v2] jobs: Handle string-based job descriptors

Message ID 20160606144527.GA23630@gondor.apana.org.au (mailing list archive)
State Accepted
Delegated to: Herbert Xu
Headers show

Commit Message

Herbert Xu June 6, 2016, 2:45 p.m. UTC
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:

---8<---
From: Stephen Kitt <steve@sk2.org>

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>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Comments

Stephen Kitt June 7, 2016, 2:43 p.m. UTC | #1
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 mbox

Patch

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";