Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37508529
en ru br
Репозитории ALT
S:4.04-alt19
D:3.61-alt1
5.1: 3.63-alt4
4.1: 3.36-alt2
4.0: 3.36-alt2
3.0: 2.11-alt1
www.altlinux.org/Changes

Группа :: Система/Ядро и оборудование
Пакет: syslinux

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: syslinux-4.04-cwd.diff
Скачать


diff --git a/com32/gfxboot/gfxboot.c b/com32/gfxboot/gfxboot.c
index 9a39e79..35d180a 100644
--- a/com32/gfxboot/gfxboot.c
+++ b/com32/gfxboot/gfxboot.c
@@ -102,6 +102,8 @@ typedef struct __attribute__ ((packed)) {
   				//    0: GFX_CB_MENU_INIT accepts 32 bit addresses
   				//    1: knows about xmem_start, xmem_end
   uint16_t reserved_1;		// 62:
+  uint32_t gfxboot_cwd;		// 64: if set, points to current gfxboot working directory relative
+				//     to syslinux working directory
 } gfx_config_t;
 
 
@@ -181,6 +183,7 @@ int main(int argc, char **argv)
 {
   int menu_index;
   const union syslinux_derivative_info *sdi;
+  char working_dir[256];
 
   openconsole(&dev_stdcon_r, &dev_stdcon_w);
 
@@ -224,6 +227,10 @@ int main(int argc, char **argv)
     return 0;
   }
 
+  if(getcwd(working_dir, sizeof working_dir)) {
+    gfx_config.gfxboot_cwd = (uint32_t) working_dir;
+  }
+
   if(gfx_init(argv[1])) {
     printf("Error setting up gfxboot\n");
     if(argc > 2) show_message(argv[2]);
@@ -806,6 +813,12 @@ void boot(int index)
   int i, label_len;
   unsigned ipapp;
   const struct syslinux_ipappend_strings *ipappend;
+  char *gfxboot_cwd = (char *) gfx_config.gfxboot_cwd;
+
+  if(gfxboot_cwd) {
+    chdir(gfxboot_cwd);
+    gfx_config.gfxboot_cwd = 0;
+  }
 
   for(menu_ptr = menu; menu_ptr; menu_ptr = menu_ptr->next, index--) {
     if(!index) break;
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin