Hi,
Jordan_U pointed out that setparams command doesn't work when a menuentry is executed through menu editor; that is, using Ctrl-x. This is because menu editor commands execute as individual commands, outside function/menuentry scopes. So setparams command does not work as expected. Attached patch fixes this issue by executing menu editor commands with a scope. bvk.chaitanya
# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: bvk.gro...@gmail.com-20101208111311-ot9ui8kuh282ngig # target_branch: file:///home/bvk/Work/grub2/mainline/ # testament_sha1: d37a1d27068bedcc0c24dd75db2e8bf729af2210 # timestamp: 2010-12-08 16:45:05 +0530 # base_revision_id: cjwat...@ubuntu.com-20101204161926-\ # ekabqjnogaeq0een # # Begin patch === modified file 'grub-core/normal/menu_entry.c' --- grub-core/normal/menu_entry.c 2010-11-18 01:08:01 +0000 +++ grub-core/normal/menu_entry.c 2010-12-08 11:13:11 +0000 @@ -1163,37 +1163,35 @@ static int run (struct screen *screen) { - int currline = 0; - char *nextline; + char *script; int errs_before; grub_menu_t menu; - - auto grub_err_t editor_getline (char **line, int cont); - grub_err_t editor_getline (char **line, int cont __attribute__ ((unused))) - { - struct line *linep = screen->lines + currline; - char *p; - - if (currline > screen->num_lines) - { - *line = 0; - return 0; - } - - /* Trim down space characters. */ - for (p = linep->buf + linep->len - 1; - p >= linep->buf && grub_isspace (*p); - p--) - ; - *++p = '\0'; - - linep->len = p - linep->buf; - for (p = linep->buf; grub_isspace (*p); p++) - ; - *line = grub_strdup (p); - currline++; - return 0; - } + char *dummy[1] = { NULL }; + + auto char * editor_getsource (void); + char * editor_getsource (void) + { + int i; + int size = 0; + char *source; + + for (i = 0; i < screen->num_lines; i++) + size += screen->lines[i].len + 1; + + source = grub_malloc (size + 1); + if (! source) + return NULL; + + size = 0; + for (i = 0; i < screen->num_lines; i++) + { + grub_strcpy (source + size, screen->lines[i].buf); + size += screen->lines[i].len; + source[size++] = '\n'; + } + source[size] = '\0'; + return source; + } grub_cls (); grub_printf (" "); @@ -1212,12 +1210,11 @@ } /* Execute the script, line for line. */ - while (currline < screen->num_lines) - { - editor_getline (&nextline, 0); - if (grub_normal_parse_line (nextline, editor_getline)) - break; - } + script = editor_getsource (); + if (! script) + return 0; + grub_script_execute_sourcecode (script, 0, dummy); + grub_free (script); if (errs_before != grub_err_printed_errors) grub_wait_after_message (); # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWTaGGhUAAhFfgFAwcP///1oN Aw6////6UASd62HoKAAAQ1U9I9Hqh6mjIBppk00ZABkYjRpo0A5piZMmjCYJiaYBMAhgjAjANEpt PUmT1NNDQAAAAAGgAAaJqaI9IA0AxAAAAA0AAJJCYQTTJonqaYhlNkST8jRT1NqGZNTG1TKsiJZf YAVSwr8aon9ohhbYYYbxoGISIbr6iYtSCum+QiyTO4Rp3QhghIcgXI+h9PuaHH0/LiCG+zLhVgZm BbWwGY5F5bduqeOeZVWkacDzhuIOPATAgdUmqCXzwDIYXrlF3UETMEczgFpLuoyg1I6CEALWdlJc hQmRpN4eOPhw8uNE5kPtrEr9Wky6c6vdDrwoBM4lbx87YS/jE/Ah5ehuidP6LlpSjY7m9WckyXFK Bpsjf1UqF1sO+7h6zGENBIcavFywzI/D9JrYNIW/WqlBWovmRjV/IopPeL/FfKAj61J2ZfwwFRYC j/qYrUzE6ShFALDqpj8CEgKILL07AI00mycZC7Uf4o1keJGhCd8jcZ4u1G2cpWur2ITx4jozyrYo joqg/kKayptxweFNonJmF2SrUoGqk9sFcrX3auvCQ8yseOux2XPouvReqUC2VKM5byyhML2kYuqV Vdl1yhdgTZtJebU0aSfG9sHRWEd0sWU9GhTOqqm9NIyi4YTxNlOFP11F2bdgq1qwVq34Kox1GhGD OGhfg3U7wFB1i1ygypugzR0BQRRLU2awgCLPbcp44+5jbwOGIKEY3FDMLBbwYAyjUjZd2vY3/99O iOlyU1O5hmbv+2iH42H4IH4OPxtUzMbZr618lnxyWU4MGwqs83VFTru8qXJm8D29F8aUPkrbw0AW Ng2nTU91SPjYjOpflOzuw955Z+Ww6jo20IFDpWaVy85LoeI0Pr+3kKSttO0Lz4ZOqMdyRf6cO3aH yxWuGjtwSJR77WSIqR2GUOuFygmctOzQ3cVojGF37Vx3OPBmBvX3OePus0/Pm+veUKc4SsZ1RVZQ I52mol7DeuIZ+OOjq7su92maHKFahKbH8MYshmWuh7Lj+U9QRqW3PN3bqwRwmYKtLutrVUS73wWz ebdx+rztKHjy7cfAcYYN9Zo8FtRN8U4X9gdEqL+6LPXl1C5u3B+XI345ItPuMV8WsE/91cY7DprT TlnxOItoG9RI/MOaMYUMeGVWYYi5hd79KOcUF29dgTSbJbVsD0FbxAgFYVuB67yR5KWDcJ8029Ie bwNdNTlOrd6+rdZpJ2EidRAwjWvs9ExmRZOINBQel6i2eyuhFmQzJXJkZD1GnHvy2mnktw9CouxN 6Rg1CgE3LzXSCuFlJKxIt6tmbMnER1MnMlpFfksV8V79C+asNiGaQOSfWkY5WIkjx9mv46iq3umK 4LVbDV3pVKTOBqmZNzgVJMoZ2AeR/muN52M/rCOr0pl5uk65XsKcY3NN87i0HNlp7UybETns/aas db206DdsUa7Oy4hRgsC1MyKmUleqnpya1Mqg+C1v3egvkLhA0xIq7SILFvL5rQEkto/06Ll1X20I /o5bdfu804Trb8xErTCM/4u5IpwoSBtDDQqA
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel