Support set -o xtrace/noexec alternates for set -x/-n
authorDan Fandrich <dan@coneharvesters.com>
Sat, 20 Nov 2010 21:05:17 +0000 (13:05 -0800)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 28 Nov 2010 02:56:39 +0000 (03:56 +0100)
Signed-off-by: Dan Fandrich <dan@coneharvesters.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/hush.c

index a710f7cd9f2537fcb7280945ed7dd7b8425567a0..0cc587e195b70a71b62b66b3b9e5d64bc86a1b4b 100644 (file)
@@ -673,9 +673,19 @@ struct function {
  * vi              off
  * xtrace          off
  */
-static const char o_opt_strings[] ALIGN1 = "pipefail\0";
+static const char o_opt_strings[] ALIGN1 =
+       "pipefail\0"
+       "noexec\0"
+#if ENABLE_HUSH_MODE_X
+       "xtrace\0"
+#endif
+       ;
 enum {
        OPT_O_PIPEFAIL,
+       OPT_O_NOEXEC,
+#if ENABLE_HUSH_MODE_X
+       OPT_O_XTRACE,
+#endif
        NUM_OPT_O
 };
 
@@ -734,10 +744,8 @@ struct globals {
         */
        smallint flag_return_in_progress;
 #endif
-       smallint n_mode;
 #if ENABLE_HUSH_MODE_X
-       smallint x_mode;
-# define G_x_mode (G.x_mode)
+# define G_x_mode (G.o_opt[OPT_O_XTRACE])
 #else
 # define G_x_mode 0
 #endif
@@ -7304,7 +7312,7 @@ static int run_and_free_list(struct pipe *pi)
 {
        int rcode = 0;
        debug_printf_exec("run_and_free_list entered\n");
-       if (!G.n_mode) {
+       if (!G.o_opt[OPT_O_NOEXEC]) {
                debug_printf_exec(": run_list: 1st pipe with %d cmds\n", pi->num_cmds);
                rcode = run_list(pi);
        }
@@ -7407,7 +7415,7 @@ static int set_mode(int state, char mode, const char *o_opt)
        int idx;
        switch (mode) {
        case 'n':
-               G.n_mode = state;
+               G.o_opt[OPT_O_NOEXEC] = state;
                break;
        case 'x':
                IF_HUSH_MODE_X(G_x_mode = state;)