diff options
Diffstat (limited to 'resources/grub/patch/0002-syslinux_parse-add-support-for-vesa-menu.c32.patch')
-rw-r--r-- | resources/grub/patch/0002-syslinux_parse-add-support-for-vesa-menu.c32.patch | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/resources/grub/patch/0002-syslinux_parse-add-support-for-vesa-menu.c32.patch b/resources/grub/patch/0002-syslinux_parse-add-support-for-vesa-menu.c32.patch new file mode 100644 index 0000000..504b277 --- /dev/null +++ b/resources/grub/patch/0002-syslinux_parse-add-support-for-vesa-menu.c32.patch @@ -0,0 +1,199 @@ +From c3b8bd878e97fe5c1b1d6409bcecf70f64e63669 Mon Sep 17 00:00:00 2001 +From: Lunar <lunar@torproject.org> +Date: Sat, 14 Feb 2015 14:14:25 +0100 +Subject: [PATCH] lib/syslinux_parse: add support for (vesa)menu.c32 + +--- + grub-core/lib/syslinux_parse.c | 156 ++++++++++++++++++++++++++--------------- + 1 file changed, 98 insertions(+), 58 deletions(-) + +diff --git a/grub-core/lib/syslinux_parse.c b/grub-core/lib/syslinux_parse.c +index 2c874b1..1012f02 100644 +--- a/grub-core/lib/syslinux_parse.c ++++ b/grub-core/lib/syslinux_parse.c +@@ -840,6 +840,74 @@ simplify_filename (char *str) + } + + static grub_err_t ++print_config (struct output_buffer *outbuf, ++ struct syslinux_menu *menu, ++ const char *filename, const char *basedir) ++{ ++ grub_err_t err; ++ char *new_cwd, *new_target_cwd; ++ ++ new_cwd = get_read_filename (menu, basedir); ++ if (!new_cwd) ++ return grub_errno; ++ new_target_cwd = get_target_filename (menu, basedir); ++ if (!new_target_cwd) ++ return grub_errno; ++ ++ struct syslinux_menu *menuptr; ++ char *newname; ++ int depth = 0; ++ ++ newname = get_read_filename (menu, filename); ++ if (!newname) ++ return grub_errno; ++ simplify_filename (newname); ++ ++ print_string ("#"); ++ print_file (outbuf, menu, filename, NULL); ++ print_string (" "); ++ print (outbuf, newname, grub_strlen (newname)); ++ print_string (":\n"); ++ ++ for (menuptr = menu; menuptr; menuptr = menuptr->parent, depth++) ++ if (grub_strcmp (menuptr->filename, newname) == 0 ++ || depth > 20) ++ break; ++ if (menuptr) ++ { ++ print_string (" syslinux_configfile -r "); ++ print_file (outbuf, menu, "/", NULL); ++ print_string (" -c "); ++ print_file (outbuf, menu, basedir, NULL); ++ print_string (" "); ++ print_file (outbuf, menu, filename, NULL); ++ print_string ("\n"); ++ } ++ else ++ { ++ err = config_file (outbuf, menu->root_read_directory, ++ menu->root_target_directory, new_cwd, new_target_cwd, ++ newname, menu, menu->flavour); ++ if (err == GRUB_ERR_FILE_NOT_FOUND ++ || err == GRUB_ERR_BAD_FILENAME) ++ { ++ grub_errno = err = GRUB_ERR_NONE; ++ print_string ("# File "); ++ err = print (outbuf, newname, grub_strlen (newname)); ++ if (err) ++ return err; ++ print_string (" not found\n"); ++ } ++ if (err) ++ return err; ++ } ++ grub_free (newname); ++ grub_free (new_cwd); ++ grub_free (new_target_cwd); ++ return GRUB_ERR_NONE; ++} ++ ++static grub_err_t + write_entry (struct output_buffer *outbuf, + struct syslinux_menu *menu, + struct syslinux_menuentry *curentry) +@@ -1240,6 +1308,35 @@ write_entry (struct output_buffer *outbuf, + break; + } + ++ if (grub_strcasecmp (basename, "menu.c32") == 0 || ++ grub_strcasecmp (basename, "vesamenu.c32") == 0) ++ { ++ char *ptr; ++ char *end; ++ ++ ptr = curentry->append; ++ if (!ptr) ++ return grub_errno; ++ ++ while (*ptr) ++ { ++ end = ptr; ++ for (end = ptr; *end && !grub_isspace (*end); end++); ++ if (*end) ++ *end++ = '\0'; ++ ++ /* "~" is supposed to be current file, so let's skip it */ ++ if (grub_strcmp (ptr, "~") == 0) ++ continue; ++ err = print_config (outbuf, menu, ptr, ""); ++ if (err != GRUB_ERR_NONE) ++ break; ++ for (ptr = end; *ptr && grub_isspace (*ptr); ptr++); ++ } ++ err = GRUB_ERR_NONE; ++ break; ++ } ++ + /* FIXME: gdb, GFXBoot, Hdt, Ifcpu, Ifplop, Kbdmap, + FIXME: Linux, Lua, Meminfo, rosh, Sanbboot */ + +@@ -1252,70 +1349,13 @@ write_entry (struct output_buffer *outbuf, + } + case KERNEL_CONFIG: + { +- char *new_cwd, *new_target_cwd; + const char *ap; + ap = curentry->append; + if (!ap) + ap = curentry->argument; + if (!ap) + ap = ""; +- new_cwd = get_read_filename (menu, ap); +- if (!new_cwd) +- return grub_errno; +- new_target_cwd = get_target_filename (menu, ap); +- if (!new_target_cwd) +- return grub_errno; +- +- struct syslinux_menu *menuptr; +- char *newname; +- int depth = 0; +- +- newname = get_read_filename (menu, curentry->kernel_file); +- if (!newname) +- return grub_errno; +- simplify_filename (newname); +- +- print_string ("#"); +- print_file (outbuf, menu, curentry->kernel_file, NULL); +- print_string (" "); +- print (outbuf, newname, grub_strlen (newname)); +- print_string (":\n"); +- +- for (menuptr = menu; menuptr; menuptr = menuptr->parent, depth++) +- if (grub_strcmp (menuptr->filename, newname) == 0 +- || depth > 20) +- break; +- if (menuptr) +- { +- print_string (" syslinux_configfile -r "); +- print_file (outbuf, menu, "/", NULL); +- print_string (" -c "); +- print_file (outbuf, menu, ap, NULL); +- print_string (" "); +- print_file (outbuf, menu, curentry->kernel_file, NULL); +- print_string ("\n"); +- } +- else +- { +- err = config_file (outbuf, menu->root_read_directory, +- menu->root_target_directory, new_cwd, new_target_cwd, +- newname, menu, menu->flavour); +- if (err == GRUB_ERR_FILE_NOT_FOUND +- || err == GRUB_ERR_BAD_FILENAME) +- { +- grub_errno = err = GRUB_ERR_NONE; +- print_string ("# File "); +- err = print (outbuf, newname, grub_strlen (newname)); +- if (err) +- return err; +- print_string (" not found\n"); +- } +- if (err) +- return err; +- } +- grub_free (newname); +- grub_free (new_cwd); +- grub_free (new_target_cwd); ++ print_config (outbuf, menu, curentry->kernel_file, ap); + } + break; + case KERNEL_NO_KERNEL: +-- +1.9.1 + |