[syslinux:master] gfxboot: pass current working dir to gfxboot core
syslinux-bot for Steffen Winterfeldt
snwint at suse.de
Mon Apr 25 15:29:29 PDT 2011
Commit-ID: a5d27926e87205e1696e94d9a4200894e1d59c03
Gitweb: http://syslinux.zytor.com/commit/a5d27926e87205e1696e94d9a4200894e1d59c03
Author: Steffen Winterfeldt <snwint at suse.de>
AuthorDate: Tue, 19 Apr 2011 15:27:26 +0200
Committer: Sebastian Herbszt <herbszt at gmx.de>
CommitDate: Mon, 25 Apr 2011 23:52:20 +0200
gfxboot: pass current working dir to gfxboot core
Pass current working dir to (and back from) gfxboot core via gfx_config
struct. This way I can implement a chdir() in the gfxboot core without
the need for additional 16-bit comboot calls. gfxboot may change the
directory, so you have to read and apply the current setting in boot() (to
read kernel etc. from right location).
Signed-off-by: Sebastian Herbszt <herbszt at gmx.de>
---
com32/gfxboot/gfxboot.c | 13 +++++++++++++
1 files changed, 13 insertions(+), 0 deletions(-)
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;
More information about the Syslinux-commits
mailing list