syslinux/syslinux-4.03-cwd.diff
Steffen Winterfeldt 645ce1e6ec - update to version 4.03
* Major code base changes; all filesystem rewritten in C.
    This work was done primarily by Liu Aleaxander (Yuanhan Liu).
  * Better support for booting from MBRs which don't pass
    handover information.
  * EXTLINUX: Try to be smarter about finding the partition
    offset.
  * chain.c32: support chainloading Dell Real Mode Kernel (Gene
    Cumm).
  * chain.c32: fix booting in CHS mode.
  * Fix the -s option to the syslinux/extlinux installer (Arwin
    Vosselman).
  * isohybrid: fix padding of large images (PJ Pandit).
  * SYSLINUX: correctly handle the case where the -d option is
    specified with a non-absolute path, i.e. "syslinux -d
    syslinux" instead of "syslinux -d /syslinux".
  * ISOLINUX: recognize the directory names /boot/syslinux and
    /syslinux, and the filename syslinux.cfg in addition to the
    isolinux-specific names.  Thus, "syslinux.cfg" is now a
    generic name, whereas "isolinux.cfg" or "extlinux.conf" is
    specific to different derivative.
  * chain.c32: support setting alternate config filename for
    stage2 of GRUB Legacy (Gert Hulselmans).
  * whichsys.c32: execute specific command, based on Syslinux
    bootloader variant (Gert Hulselmans).
  * lua.c32: a lot of new bindings added to the "syslinux"
    namespace: VESA, PCI, DMI, kernel loading (Marcel Ritter).
  * btrfs: print a comprehensive error message if compressed or
    encrypted files are encountered (neither is currently

OBS-URL: https://build.opensuse.org/package/show/system:install:head/syslinux?expand=0&rev=25
2011-04-18 16:02:08 +00:00

46 lines
1.3 KiB
Diff

diff --git a/com32/gfxboot/gfxboot.c b/com32/gfxboot/gfxboot.c
index 2323f8e..8cace82 100644
--- a/com32/gfxboot/gfxboot.c
+++ b/com32/gfxboot/gfxboot.c
@@ -100,6 +100,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;
@@ -185,6 +187,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);
@@ -228,6 +231,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]);
@@ -815,6 +822,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;