]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - GRUB2/MOD_SRC/grub-2.04/grub-core/commands/menuentry.c
Add muli-languages support for Ventoy menu.
[Ventoy.git] / GRUB2 / MOD_SRC / grub-2.04 / grub-core / commands / menuentry.c
index 9faf2be0f645574c2ca167b6590dcfd0b51426be..cb74cd92eda279857b7dfecb337276190c88b736 100644 (file)
 #include <grub/i18n.h>
 #include <grub/normal.h>
 
+typedef const char * (*get_vmenu_title_pf)(const char *vMenu);
+static get_vmenu_title_pf g_pfvmenu_title = NULL;
+
+
 static const struct grub_arg_option options[] =
   {
     {"class", 1, GRUB_ARG_OPTION_REPEATABLE,
@@ -86,6 +90,8 @@ grub_normal_add_menu_entry (int argc, const char **args,
   char *menu_title = NULL;
   char *menu_sourcecode = NULL;
   char *menu_id = NULL;
+  const char *vmenu = NULL;
+  const char *vaddr = NULL;
   struct grub_menu_entry_class *menu_classes = NULL;
 
   grub_menu_t menu;
@@ -145,7 +151,17 @@ grub_normal_add_menu_entry (int argc, const char **args,
       goto fail;
     }
 
-  menu_title = grub_strdup (args[0]);
+  if (!g_pfvmenu_title) {        
+    vaddr = grub_env_get("VTOY_VMENU_FUNC_ADDR");
+      if (vaddr)
+        g_pfvmenu_title = (get_vmenu_title_pf)(unsigned long)grub_strtoul(vaddr, NULL, 16);
+  }
+
+  if (g_pfvmenu_title && grub_strncmp(args[0], "@VTMENU_", 8) == 0)
+    vmenu = g_pfvmenu_title(args[0] + 1);
+
+  menu_title = grub_strdup (vmenu ? vmenu : args[0]);
   if (! menu_title)
     goto fail;