syslinux/syslinux-4.04-cwd.diff
Steffen Winterfeldt bbba68999e - update to version 4.04
* PXELINUX: Fix handling of unqualified DNS names.
  * PXELINUX: Fix timer bug when PXELINUX might be unloaded
    (Gene Cumm).
  * core/writedec.inc: Fix duplicate declaration and overflow
    (Gene Cumm).
  * GCC 4.5 fixes.
  * sample directory: Fix Makefile include (Gene Cumm).
  * ver.com: New universal DOS/COMBOOT application to display
    version information (includes DRMK) (Gene Cumm).
  * rosh.c32: updated; Using getopt() for internal commands to aid
    parsing options; Fix bugs in ls; add warm reboot and echo
    (Gene Cumm).
  * com32: fix a file descriptor leak.
  * gfxboot.c32: handle TEXT..ENDTEXT; error out on no LABELs
    found (Sebastian Herbszt).
  * Fix booting on non-partitioned devices.
  * MBR, isohybrid: Workaround for a BIOS issue on Acer
    Travelmate and possibly other machines.
  * COM32: Adding ACPI parsing libary
  * HDT: Release 0.4.1 to support ACPI parsing, 
    improved mutli-core/cpu reporting 
  * LUA: Updating to 5.1.4-2
  * SYSLINUX: core/diskstart.inc: Reset DS after checksum in case
    it isn't 0 (Gene Cumm).
  * win64: Script update for additional mingw compiler names
    (Gene Cumm).
  * diag: New directory for diagnostic-related tools.  Add a
    handoff MBR/VBR and geometry display images (Gene Cumm).

OBS-URL: https://build.opensuse.org/package/show/system:install:head/syslinux?expand=0&rev=26
2011-04-19 08:49:59 +00:00

46 lines
1.3 KiB
Diff

diff --git a/com32/gfxboot/gfxboot.c b/com32/gfxboot/gfxboot.c
index 3749920..00d168a 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;