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

Reply via email to