hush: small optimization in run_list
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 8 Nov 2016 19:26:11 +0000 (20:26 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 8 Nov 2016 19:26:11 +0000 (20:26 +0100)
I thought gcc can detect this itself. It doesn't.

function                                             old     new   delta
run_list                                            1030    1021      -9

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/hush.c

index a5f059924859737ce904f68cba8d2220e7e4539e..5a36a7692f8458f933a7f540c2efa24805bf33cf 100644 (file)
@@ -8004,20 +8004,21 @@ static int run_list(struct pipe *pi)
                        G.last_bg_pid = pi->cmds[pi->num_cmds - 1].pid;
                        debug_printf_exec(": cmd&: exitcode EXIT_SUCCESS\n");
 /* Check pi->pi_inverted? "! sleep 1 & echo $?": bash says 1. dash and ash says 0 */
-                       G.last_exitcode = rcode = EXIT_SUCCESS;
-                       check_and_run_traps();
+                       rcode = EXIT_SUCCESS;
+                       goto check_traps;
                } else {
 #if ENABLE_HUSH_JOB
                        if (G.run_list_level == 1 && G_interactive_fd) {
                                /* Waits for completion, then fg's main shell */
                                rcode = checkjobs_and_fg_shell(pi);
                                debug_printf_exec(": checkjobs_and_fg_shell exitcode %d\n", rcode);
-                       } else
-#endif
-                       { /* This one just waits for completion */
-                               rcode = checkjobs(pi, 0 /*(no pid to wait for)*/);
-                               debug_printf_exec(": checkjobs exitcode %d\n", rcode);
+                               goto check_traps;
                        }
+#endif
+                       /* This one just waits for completion */
+                       rcode = checkjobs(pi, 0 /*(no pid to wait for)*/);
+                       debug_printf_exec(": checkjobs exitcode %d\n", rcode);
+ check_traps:
                        G.last_exitcode = rcode;
                        check_and_run_traps();
                }