]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[cmdline] Allow ";" as an unconditional command separator
authorMichael Brown <mcb30@ipxe.org>
Mon, 28 Mar 2011 15:32:30 +0000 (16:32 +0100)
committerMichael Brown <mcb30@ipxe.org>
Mon, 28 Mar 2011 15:32:30 +0000 (16:32 +0100)
It is currently possible to construct a sequence of commands to be
executed regardless of success or failure using "|| &&" as the command
separator.  (The "||" captures the failure case, the blank command
converts it to a success case.)

Allow ";" to be used as a more visually appealing (and
space-efficient) alternative.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/core/exec.c

index 7ce3844372195e289b2791c88aae366c2ed481ca..217ed039e8643447add1232f9ca922da72a9e11d 100644 (file)
@@ -142,6 +142,16 @@ static int process_on_failure ( int rc ) {
        return ( rc != 0 );
 }
 
+/**
+ * Process next command regardless of status from previous command
+ *
+ * @v rc               Status of previous command
+ * @ret process                Process next command
+ */
+static int process_always ( int rc __unused ) {
+       return 1;
+}
+
 /**
  * Find command terminator
  *
@@ -166,6 +176,10 @@ static int command_terminator ( char **tokens,
                        /* Short-circuit logical AND */
                        *process_next = process_on_success;
                        return i;
+               } else if ( strcmp ( tokens[i], ";" ) == 0 ) {
+                       /* Process next command unconditionally */
+                       *process_next = process_always;
+                       return i;
                }
        }