From d654cfa0fdf6cf214551e0dd28b9302eee7df2a4 Mon Sep 17 00:00:00 2001 From: gord Date: Mon, 3 May 1999 22:49:53 +0000 Subject: [PATCH] Make menus work again. --- ChangeLog | 11 +++++++++++ grub/asmstub.c | 24 ++++++++++++------------ grub/main.c | 3 ++- shared_src/shared.h | 2 +- 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index d7e04f42e..8134b6b07 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +1999-05-03 Gordon Matzigkeit + + From Pavel Roskin: + * shared_src/shared.h: Redeclare. + + * grub/main.c (main): Use strncpy rather than pointer assignment + to set the config file name. + + * grub/asmstub.c: Make config_file a static array, not a pointer. + Correct the value of VERSION_STRING. + 1999-04-10 Gordon Matzigkeit * debian/rules (build): Install into /lib instead of /share. diff --git a/grub/asmstub.c b/grub/asmstub.c index 29b1b0e6a..6dea78e1a 100644 --- a/grub/asmstub.c +++ b/grub/asmstub.c @@ -60,8 +60,8 @@ int grub_stage2 (void); unsigned long install_partition = 0x20000; unsigned long boot_drive = 0; -char version_string[] = "0.5"; -char *config_file = "/boot/grub/menu.lst"; +char version_string[] = VERSION; +char config_file[128] = "/boot/grub/menu.lst"; /* FIXME: arbitrary */ /* Emulation requirements. */ char *grub_scratch_mem = 0; @@ -123,16 +123,16 @@ grub_stage2 (void) assert (device_map == 0); device_map = malloc (NUM_DISKS * sizeof (char *)); assert (device_map); - + /* Probe devices for creating the device map. */ /* Iniitialize DEVICE_MAP. */ memset (device_map, 0, NUM_DISKS * sizeof (char *)); - + /* Floppies. */ device_map[0] = strdup ("/dev/fd0"); device_map[1] = strdup ("/dev/fd1"); - + /* IDE disks. */ for (i = 0; i < 2; i++) { @@ -156,7 +156,7 @@ grub_stage2 (void) device_map[i + 0x80] = strdup (name); } first_scsi_disk = i + 0x80; - + /* The rest is SCSI disks. */ for (i = 0; i < 8; i++) { @@ -170,7 +170,7 @@ grub_stage2 (void) #endif device_map[i + first_scsi_disk] = name; } - + /* Check some invariants. */ assert ((SCRATCHSEG << 4) == SCRATCHADDR); assert ((BUFFERSEG << 4) == BUFFERADDR); @@ -412,7 +412,7 @@ getkey (void) return c; } #endif - + return getchar (); } @@ -432,7 +432,7 @@ checkkey (void) return c; } #endif - + /* Just pretend they hit the space bar. */ return ' '; } @@ -473,10 +473,10 @@ get_diskinfo (int drive, struct geometry *geometry) /* The unpartitioned device name: /dev/XdX */ char *devname = device_map[drive]; char buf[512]; - + if (! devname) return -1; - + /* Open read/write, or read-only if that failed. */ disks[drive].flags = open (devname, O_RDWR); if (! disks[drive].flags) @@ -489,7 +489,7 @@ get_diskinfo (int drive, struct geometry *geometry) disks[drive].flags = 0; return -1; } - + if (disks[drive].flags) { #ifdef __linux__ diff --git a/grub/main.c b/grub/main.c index 6bcb31645..92cd6bf2b 100644 --- a/grub/main.c +++ b/grub/main.c @@ -130,7 +130,8 @@ main (int argc, char **argv) break; case OPT_CONFIG_FILE: - config_file = strdup (optarg); + strncpy (config_file, optarg, 127); /* FIXME: arbitrary */ + config_file[127] = '\0'; break; case OPT_INSTALL_PARTITION: diff --git a/shared_src/shared.h b/shared_src/shared.h index bc93c206c..6aaddfed8 100644 --- a/shared_src/shared.h +++ b/shared_src/shared.h @@ -280,7 +280,7 @@ typedef enum extern unsigned long install_partition; extern unsigned long boot_drive; extern char version_string[]; -extern char *config_file; +extern char config_file[]; #ifdef GRUB_UTIL /* If not using config file, this variable is set to zero,