# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: address@hidden # target_branch: ../break-cmd/ # testament_sha1: 360118bc11567754dfb6d434f4f714b856ac320e # timestamp: 2010-05-05 16:19:44 +0530 # base_revision_id: address@hidden # vp7j1j0otn99h0xn # # Begin patch === modified file 'conf/tests.rmk' --- conf/tests.rmk 2010-05-05 10:04:26 +0000 +++ conf/tests.rmk 2010-05-05 10:49:31 +0000 @@ -77,6 +77,9 @@ check_SCRIPTS += grub_script_break grub_script_break_SOURCES = tests/grub_script_break.in +check_SCRIPTS += grub_script_continue +grub_script_continue_SOURCES = tests/grub_script_continue.in + # List of tests to execute on "make check" # SCRIPTED_TESTS = example_scripted_test # SCRIPTED_TESTS += example_grub_script_test @@ -95,6 +98,7 @@ SCRIPTED_TESTS += grub_script_comments SCRIPTED_TESTS += grub_script_functions SCRIPTED_TESTS += grub_script_break +SCRIPTED_TESTS += grub_script_continue # dependencies between tests and testing-tools $(SCRIPTED_TESTS): grub-shell grub-shell-tester === modified file 'script/execute.c' --- script/execute.c 2010-05-05 10:04:26 +0000 +++ script/execute.c 2010-05-05 10:49:31 +0000 @@ -30,13 +30,13 @@ is sizeof (int) * 3, and one extra for a possible -ve sign. */ #define ERRNO_DIGITS_MAX (sizeof (int) * 3 + 1) +static unsigned long is_continue; static unsigned long active_loops; static unsigned long active_breaks; static struct grub_script_scope *scope = 0; grub_err_t -grub_script_break (grub_command_t cmd __attribute__((unused)), - int argc, char *argv[]) +grub_script_break (grub_command_t cmd, int argc, char *argv[]) { char *p = 0; unsigned long count; @@ -50,6 +50,8 @@ return grub_error (GRUB_ERR_BAD_ARGUMENT, "bad break"); active_breaks = count; + is_continue = grub_strcmp (cmd->name, "break") ? 1 : 0; + return GRUB_ERR_NONE; } @@ -408,6 +410,9 @@ result = 0; for (i = 0; i < argcount; i++) { + if (is_continue && active_breaks == 1) + active_breaks = 0; + if (! active_breaks) { grub_script_env_set (cmdfor->name->str, args[i]); @@ -441,14 +446,17 @@ result = grub_script_execute_cmd (cmdwhile->list); + if (active_breaks == 1 && is_continue) + active_breaks = 0; + if (active_breaks) - { - active_breaks--; - break; - } + break; } while (1); /* XXX Put a check for ^C here */ + if (active_breaks) + active_breaks--; + active_loops--; return result; } === modified file 'script/main.c' --- script/main.c 2010-05-05 10:04:26 +0000 +++ script/main.c 2010-05-05 10:49:31 +0000 @@ -52,6 +52,8 @@ grub_parser_register ("grub", &grub_sh_parser); grub_register_command ("break", grub_script_break, N_("[n]"), N_("Exit from loops")); + grub_register_command ("continue", grub_script_break, + N_("[n]"), N_("Continue loops")); } GRUB_MOD_FINI(sh) === added file 'tests/grub_script_continue.in' --- tests/grub_script_continue.in 1970-01-01 00:00:00 +0000 +++ tests/grub_script_continue.in 2010-05-05 10:49:31 +0000 @@ -0,0 +1,86 @@ +#! @builddir@/grub-shell-tester +# +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +# continue without any arguments +for i in 1 2 3 4 5 6 7 8 9 10 +do + if test "$i" = 5 + then + continue + fi + echo $i +done + +# continue with one +for i in 1 2 3 4 5 6 7 8 9 10 +do + if test "$i" = 5 + then + continue 1 + fi + echo $i +done + +# continue with loop count +for i in 1 2 3 4 5 +do + for j in a b c d e f + do + if test "$i" = 3 + then + if test "$j" = d + then + continue 2 + fi + echo "$i $j" + fi + done +done + +# continue into middle loop +for i in 1 2 3 4 5 +do + for j in a b c d e f + do + if test "$i" = 3 + then + if test "$j" = d + then + continue 1 + fi + echo "$i $j" + fi + done +done + +# while and until loops +a= +while test "$a" != "aaaaaaa" +do + a="a$a" + for i in 1 2 3 4 + do + b= + until test "$b" = "bbbbb" + do + b="b$b" + if test "$i" = 3; then echo "continue 2"; continue 2; fi + echo "$a $i $b" + done + done +done + # Begin bundle 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