Make /sbin/grub use a config file.
This commit is contained in:
parent
4cf606a18e
commit
d61ce9f2a4
7 changed files with 179 additions and 43 deletions
8
AUTHORS
8
AUTHORS
|
@ -4,6 +4,12 @@ VaX#n8 (real name unknown) wrote shared_src/fsys_ext2fs.c.
|
||||||
|
|
||||||
Heiko Schroeder rewrote shared_src/stage1.S to be more readable.
|
Heiko Schroeder rewrote shared_src/stage1.S to be more readable.
|
||||||
|
|
||||||
|
The following authors assigned copyright on their work to the Free
|
||||||
|
Software Foundation:
|
||||||
|
|
||||||
Gordon Matzigkeit adopted GRUB into the GNU Project. He fixed several
|
Gordon Matzigkeit adopted GRUB into the GNU Project. He fixed several
|
||||||
bugs, added symbolic link support to shared_src/fsys_ext2fs.c, and
|
bugs, added symbolic link support to shared_src/fsys_ext2fs.c, and
|
||||||
implemented the grub configuration program.
|
began the implementation of /sbin/grub.
|
||||||
|
|
||||||
|
OKUJI Yoshinori contributed many bugfixes and new features, such as
|
||||||
|
working LBA support, and /sbin/grub support for configuration files.
|
||||||
|
|
54
ChangeLog
54
ChangeLog
|
@ -1,3 +1,57 @@
|
||||||
|
1999-03-27 Gordon Matzigkeit <gord@trick.fig.org>
|
||||||
|
|
||||||
|
* grub/main.c (usage): Display defaults for stage2 options.
|
||||||
|
|
||||||
|
* grub/asmstub.c [NO_REMAPPING_LIBC_FUNCTIONS]: Rename to
|
||||||
|
WITHOUT_LIBC_STUBS.
|
||||||
|
* grub/main.c: Likewise.
|
||||||
|
* shared_src/shared.h: Likewise.
|
||||||
|
|
||||||
|
1999-03-27 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
|
* grub/asmstub.c (set_attrib): Use inch and addch, instead of
|
||||||
|
chgat, because chgat doesn't work as expected.
|
||||||
|
|
||||||
|
1999-03-26 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
|
* grub/asmstub.c (grub_stage2) [HAVE_LIBCURSES]: Call nodelay.
|
||||||
|
(checkkey) [HAVE_LIBCURSES]: If getting an input character, then
|
||||||
|
ungetch it, because checkkey shouldn't modify the input queue.
|
||||||
|
|
||||||
|
Use file descriptors instead of file pointers to support
|
||||||
|
>4GB disks in Linux.
|
||||||
|
|
||||||
|
* grub/asmstub.c (grub_stage2): Call close instead of fclose.
|
||||||
|
(get_diskinfo): Call open instead of fopen.
|
||||||
|
(biosdisk) [__linux__]: Use _llseek instead of lseek.
|
||||||
|
(biosdisk): Call read instead of fread.
|
||||||
|
|
||||||
|
Add options so that the user can specify the config file.
|
||||||
|
|
||||||
|
* grub/Makefile.am (CPPFLAGS): Use -fwritable-strings, because
|
||||||
|
grub assumes that all strings resides at the data section.
|
||||||
|
|
||||||
|
* grub/main.c: Define NO_REMAPPING_LIBC_FUNCTIONS before including
|
||||||
|
shared.h.
|
||||||
|
(OPT_CONFIG_FILE): New macro.
|
||||||
|
(OPT_INSTALL_PARTITION): Likewise.
|
||||||
|
(OPT_BOOT_DRIVE): Likewise.
|
||||||
|
(longopts): Add new options, config-file, install-partition and
|
||||||
|
boot-drive.
|
||||||
|
(usage): Add the documentation for them.
|
||||||
|
(main): Add handling code for OPT_CONFIG_FILE, OPT_INSTALL_PARTITION
|
||||||
|
and OPT_BOOT_DRIVE.
|
||||||
|
|
||||||
|
* grub/asmstub.c: Define NO_REMAPPING_LIBC_FUNCTIONS before including
|
||||||
|
shared.h.
|
||||||
|
(config_file): Make it char * instead of char [].
|
||||||
|
(getrtsecs): Return current time instead of 0xff.
|
||||||
|
|
||||||
|
* shared_src/shared.h [NO_REMAPPING_LIBC_FUNCTIONS]: Don't define
|
||||||
|
libc-API-compatible function names.
|
||||||
|
(config_file): Change the prototype from char [] to char *.
|
||||||
|
(grub_putchar): Renamed from putchar.
|
||||||
|
|
||||||
1999-03-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
1999-03-25 OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
|
||||||
|
|
||||||
* char_io.c (get_cmdline): Call cl_setcpos even if lpos == llen,
|
* char_io.c (get_cmdline): Call cl_setcpos even if lpos == llen,
|
||||||
|
|
|
@ -2,7 +2,7 @@ EXTRA_PROGRAMS = grub
|
||||||
sbin_PROGRAMS = $(sbingrub)
|
sbin_PROGRAMS = $(sbingrub)
|
||||||
CLEANFILES = $(EXTRA_PROGRAMS)
|
CLEANFILES = $(EXTRA_PROGRAMS)
|
||||||
|
|
||||||
COMPILE = $(CC) -DGRUB_UTIL=1 $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
COMPILE = $(CC) -DGRUB_UTIL=1 -fwritable-strings $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
||||||
INCLUDES = -I$(top_srcdir)/shared_src
|
INCLUDES = -I$(top_srcdir)/shared_src
|
||||||
|
|
||||||
grub_SOURCES = main.c asmstub.c
|
grub_SOURCES = main.c asmstub.c
|
||||||
|
|
|
@ -74,7 +74,7 @@ EXTRA_PROGRAMS = grub
|
||||||
sbin_PROGRAMS = $(sbingrub)
|
sbin_PROGRAMS = $(sbingrub)
|
||||||
CLEANFILES = $(EXTRA_PROGRAMS)
|
CLEANFILES = $(EXTRA_PROGRAMS)
|
||||||
|
|
||||||
COMPILE = $(CC) -DGRUB_UTIL=1 $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
COMPILE = $(CC) -DGRUB_UTIL=1 -fwritable-strings $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
||||||
INCLUDES = -I$(top_srcdir)/shared_src
|
INCLUDES = -I$(top_srcdir)/shared_src
|
||||||
|
|
||||||
grub_SOURCES = main.c asmstub.c
|
grub_SOURCES = main.c asmstub.c
|
||||||
|
|
|
@ -18,30 +18,31 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Try to use glibc's transparant LFS support. */
|
||||||
|
#define _LARGEFILE_SOURCE 1
|
||||||
|
|
||||||
/* Simulator entry point. */
|
/* Simulator entry point. */
|
||||||
int grub_stage2 (void);
|
int grub_stage2 (void);
|
||||||
|
|
||||||
#include "shared.h"
|
|
||||||
/* We want to prevent any circularararity in our stubs, as well as
|
/* We want to prevent any circularararity in our stubs, as well as
|
||||||
libc name clashes. */
|
libc name clashes. */
|
||||||
#undef NULL
|
#define WITHOUT_LIBC_STUBS 1
|
||||||
#undef bcopy
|
#include "shared.h"
|
||||||
#undef bzero
|
|
||||||
#undef getc
|
|
||||||
#undef isspace
|
|
||||||
#undef printf
|
|
||||||
#undef putchar
|
|
||||||
#undef strncat
|
|
||||||
#undef strstr
|
|
||||||
#undef tolower
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
# include <sys/ioctl.h> /* ioctl */
|
# include <sys/ioctl.h> /* ioctl */
|
||||||
# include <linux/hdreg.h> /* HDIO_GETGEO */
|
# include <linux/hdreg.h> /* HDIO_GETGEO */
|
||||||
|
/* FIXME: only include if libc doesn't have large file support. */
|
||||||
|
# include <unistd.h>
|
||||||
|
# include <linux/unistd.h> /* _llseek */
|
||||||
#endif /* __linux__ */
|
#endif /* __linux__ */
|
||||||
|
|
||||||
/* Simulated memory sizes. */
|
/* Simulated memory sizes. */
|
||||||
|
@ -59,7 +60,7 @@ int grub_stage2 (void);
|
||||||
unsigned long install_partition = 0x20000;
|
unsigned long install_partition = 0x20000;
|
||||||
unsigned long boot_drive = 0;
|
unsigned long boot_drive = 0;
|
||||||
char version_string[] = "0.5";
|
char version_string[] = "0.5";
|
||||||
char config_file[] = "/boot/grub/menu.lst";
|
char *config_file = "/boot/grub/menu.lst";
|
||||||
|
|
||||||
/* Emulation requirements. */
|
/* Emulation requirements. */
|
||||||
char *grub_scratch_mem = 0;
|
char *grub_scratch_mem = 0;
|
||||||
|
@ -128,6 +129,7 @@ grub_stage2 (void)
|
||||||
nonl ();
|
nonl ();
|
||||||
scrollok (stdscr, TRUE);
|
scrollok (stdscr, TRUE);
|
||||||
keypad (stdscr, TRUE);
|
keypad (stdscr, TRUE);
|
||||||
|
nodelay (stdscr, TRUE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Set our stack, and go for it. */
|
/* Set our stack, and go for it. */
|
||||||
|
@ -138,10 +140,10 @@ grub_stage2 (void)
|
||||||
endwin ();
|
endwin ();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Close off the file pointers we used. */
|
/* Close off the file descriptors we used. */
|
||||||
for (i = 0; i < NUM_DISKS; i ++)
|
for (i = 0; i < NUM_DISKS; i ++)
|
||||||
if (disks[i].flags)
|
if (disks[i].flags)
|
||||||
fclose ((FILE *) disks[i].flags);
|
close ((FILE *) disks[i].flags);
|
||||||
|
|
||||||
/* Release memory. */
|
/* Release memory. */
|
||||||
free (disks);
|
free (disks);
|
||||||
|
@ -275,7 +277,8 @@ get_mmap_entry (struct mmar_desc *desc, int cont)
|
||||||
int
|
int
|
||||||
getrtsecs (void)
|
getrtsecs (void)
|
||||||
{
|
{
|
||||||
return 0xff;
|
/* FIXME: exact value is not important, so just return time_t for now. */
|
||||||
|
return time (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -346,9 +349,15 @@ int
|
||||||
checkkey (void)
|
checkkey (void)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBCURSES
|
#ifdef HAVE_LIBCURSES
|
||||||
return getch ();
|
int c;
|
||||||
|
c = getch ();
|
||||||
|
/* If C is not ERR, then put it back in the input queue. */
|
||||||
|
if (c != ERR)
|
||||||
|
ungetch (c); /* FIXME: ncurses-1.9.9g ungetch is buggy. */
|
||||||
|
return c;
|
||||||
#else
|
#else
|
||||||
return getchar ();
|
/* Just pretend they hit the space bar.
|
||||||
|
return ' ';
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -358,7 +367,13 @@ void
|
||||||
set_attrib (int attr)
|
set_attrib (int attr)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBCURSES
|
#ifdef HAVE_LIBCURSES
|
||||||
|
/* FIXME: I don't know why, but chgat doesn't work as expected, so
|
||||||
|
use this dirty way... - okuji */
|
||||||
|
chtype ch = inch ();
|
||||||
|
addch ((ch & A_CHARTEXT) | attr);
|
||||||
|
# if 0
|
||||||
chgat (1, attr, 0, NULL);
|
chgat (1, attr, 0, NULL);
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,7 +385,7 @@ get_diskinfo (int drive, struct geometry *geometry)
|
||||||
{
|
{
|
||||||
/* FIXME: this function is truly horrid. We try opening the device,
|
/* FIXME: this function is truly horrid. We try opening the device,
|
||||||
then severely abuse the GEOMETRY->flags field to pass a file
|
then severely abuse the GEOMETRY->flags field to pass a file
|
||||||
pointer to biosdisk. Thank God nobody's looking at this comment,
|
descriptor to biosdisk. Thank God nobody's looking at this comment,
|
||||||
or my reputation would be ruined. --Gord */
|
or my reputation would be ruined. --Gord */
|
||||||
|
|
||||||
/* See if we have a cached device. */
|
/* See if we have a cached device. */
|
||||||
|
@ -412,16 +427,15 @@ get_diskinfo (int drive, struct geometry *geometry)
|
||||||
devname[8] = '\0';
|
devname[8] = '\0';
|
||||||
|
|
||||||
/* Open read/write, or read-only if that failed. */
|
/* Open read/write, or read-only if that failed. */
|
||||||
disks[drive].flags = (int) fopen (devname, "r+");
|
disks[drive].flags = open (devname, O_RDWR);
|
||||||
if (! disks[drive].flags)
|
if (! disks[drive].flags)
|
||||||
disks[drive].flags = (int) fopen (devname, "r");
|
disks[drive].flags = open (devname, O_RDONLY);
|
||||||
|
|
||||||
if (disks[drive].flags)
|
if (disks[drive].flags)
|
||||||
{
|
{
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
struct hd_geometry hdg;
|
struct hd_geometry hdg;
|
||||||
if (! ioctl (fileno ((FILE *) disks[drive].flags),
|
if (! ioctl (disks[drive].flags, HDIO_GETGEO, &hdg))
|
||||||
HDIO_GETGEO, &hdg))
|
|
||||||
{
|
{
|
||||||
/* Got the geometry, so save it. */
|
/* Got the geometry, so save it. */
|
||||||
disks[drive].cylinders = hdg.cylinders;
|
disks[drive].cylinders = hdg.cylinders;
|
||||||
|
@ -462,19 +476,32 @@ biosdisk (int subfunc, int drive, struct geometry *geometry,
|
||||||
int sector, int nsec, int segment)
|
int sector, int nsec, int segment)
|
||||||
{
|
{
|
||||||
char *buf;
|
char *buf;
|
||||||
FILE *fp;
|
int fd = geometry->flags;
|
||||||
|
|
||||||
/* Get the file pointer from the geometry, and make sure it matches. */
|
/* Get the file pointer from the geometry, and make sure it matches. */
|
||||||
fp = (FILE *) geometry->flags;
|
if (fd == -1 || fd != disks[drive].flags)
|
||||||
if (! fp || fp != (FILE *) disks[drive].flags)
|
|
||||||
return BIOSDISK_ERROR_GEOMETRY;
|
return BIOSDISK_ERROR_GEOMETRY;
|
||||||
|
|
||||||
/* Seek to the specified location. */
|
/* Seek to the specified location. */
|
||||||
if (fseek (fp, sector * SECTOR_SIZE, SEEK_SET))
|
#ifdef __linux__
|
||||||
return -1;
|
/* FIXME: only use this section if libc doesn't have large file support */
|
||||||
|
{
|
||||||
|
loff_t offset, result;
|
||||||
|
_syscall5 (int, _llseek, uint, fd, ulong, hi, ulong, lo,
|
||||||
|
loff_t *, res, uint, wh);
|
||||||
|
|
||||||
|
offset = (loff_t) sector * (loff_t) SECTOR_SIZE;
|
||||||
|
if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET))
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (lseek (fd, sector * SECTOR_SIZE, SEEK_SET))
|
||||||
|
return -1;
|
||||||
|
#endif /* __linux__ */
|
||||||
|
|
||||||
buf = (char *) (segment << 4);
|
buf = (char *) (segment << 4);
|
||||||
if (fread (buf, nsec * SECTOR_SIZE, 1, fp) != 1)
|
/* FIXME: handle EINTR */
|
||||||
|
if (read (fd, buf, nsec * SECTOR_SIZE, fp) != nsec * SECTOR_SIZE)
|
||||||
return -1;
|
return -1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
63
grub/main.c
63
grub/main.c
|
@ -24,12 +24,24 @@ int grub_stage2 (void);
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
#define WITHOUT_LIBC_STUBS 1
|
||||||
|
#include "shared.h"
|
||||||
|
|
||||||
char *program_name = 0;
|
char *program_name = 0;
|
||||||
|
static int default_boot_drive;
|
||||||
|
static int default_install_partition;
|
||||||
|
static char *default_config_file;
|
||||||
|
|
||||||
#define OPT_HELP -2
|
#define OPT_HELP -2
|
||||||
#define OPT_VERSION -3
|
#define OPT_VERSION -3
|
||||||
#define OPT_HOLD -4
|
#define OPT_HOLD -4
|
||||||
|
#define OPT_CONFIG_FILE -5
|
||||||
|
#define OPT_INSTALL_PARTITION -6
|
||||||
|
#define OPT_BOOT_DRIVE -7
|
||||||
#define OPTSTRING ""
|
#define OPTSTRING ""
|
||||||
|
|
||||||
static struct option longopts[] =
|
static struct option longopts[] =
|
||||||
|
@ -37,6 +49,9 @@ static struct option longopts[] =
|
||||||
{"help", no_argument, 0, OPT_HELP},
|
{"help", no_argument, 0, OPT_HELP},
|
||||||
{"version", no_argument, 0, OPT_VERSION},
|
{"version", no_argument, 0, OPT_VERSION},
|
||||||
{"hold", no_argument, 0, OPT_HOLD},
|
{"hold", no_argument, 0, OPT_HOLD},
|
||||||
|
{"config-file", required_argument, 0, OPT_CONFIG_FILE},
|
||||||
|
{"install-partition", required_argument, 0, OPT_INSTALL_PARTITION},
|
||||||
|
{"boot-drive", required_argument, 0, OPT_BOOT_DRIVE},
|
||||||
{0},
|
{0},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -53,11 +68,15 @@ Usage: %s [OPTION]...\n\
|
||||||
\n\
|
\n\
|
||||||
Enter the GRand Unified Bootloader command shell.\n\
|
Enter the GRand Unified Bootloader command shell.\n\
|
||||||
\n\
|
\n\
|
||||||
--help display this message and exit\n\
|
--boot-drive=DRIVE specify stage2 boot_drive [default=0x%x]\n\
|
||||||
--hold wait forever so that a debugger may be attached\n\
|
--config-file=FILE specify stage2 config_file [default=%s]\n\
|
||||||
--version print version information and exit\n\
|
--help display this message and exit\n\
|
||||||
|
--hold wait until a debugger will attach\n\
|
||||||
|
--install-partition=PAR specify stage2 install_partition [default=0x%x]\n\
|
||||||
|
--version print version information and exit\n\
|
||||||
",
|
",
|
||||||
program_name);
|
program_name, default_boot_drive, default_config_file,
|
||||||
|
default_install_partition);
|
||||||
|
|
||||||
exit (status);
|
exit (status);
|
||||||
}
|
}
|
||||||
|
@ -69,6 +88,12 @@ main (int argc, char **argv)
|
||||||
int c;
|
int c;
|
||||||
int hold = 0;
|
int hold = 0;
|
||||||
program_name = argv[0];
|
program_name = argv[0];
|
||||||
|
default_boot_drive = boot_drive;
|
||||||
|
default_install_partition = install_partition;
|
||||||
|
if (config_file)
|
||||||
|
default_config_file = config_file;
|
||||||
|
else
|
||||||
|
default_config_file = "NONE";
|
||||||
|
|
||||||
/* Parse command-line options. */
|
/* Parse command-line options. */
|
||||||
do
|
do
|
||||||
|
@ -80,10 +105,6 @@ main (int argc, char **argv)
|
||||||
/* Fall through the bottom of the loop. */
|
/* Fall through the bottom of the loop. */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OPT_HOLD:
|
|
||||||
hold = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case OPT_HELP:
|
case OPT_HELP:
|
||||||
usage (0);
|
usage (0);
|
||||||
break;
|
break;
|
||||||
|
@ -93,6 +114,32 @@ main (int argc, char **argv)
|
||||||
exit (0);
|
exit (0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case OPT_HOLD:
|
||||||
|
hold = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OPT_CONFIG_FILE:
|
||||||
|
config_file = strdup (optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OPT_INSTALL_PARTITION:
|
||||||
|
install_partition = strtoul (optarg, 0, 16);
|
||||||
|
if (install_partition == ULONG_MAX)
|
||||||
|
{
|
||||||
|
perror ("strtoul");
|
||||||
|
exit (1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OPT_BOOT_DRIVE:
|
||||||
|
boot_drive = strtoul (optarg, 0, 0);
|
||||||
|
if (boot_drive == ULONG_MAX)
|
||||||
|
{
|
||||||
|
perror ("strtoul");
|
||||||
|
exit (1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
usage (1);
|
usage (1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,8 +201,9 @@ extern char *grub_scratch_mem;
|
||||||
#define DISP_UP 0x18
|
#define DISP_UP 0x18
|
||||||
#define DISP_DOWN 0x19
|
#define DISP_DOWN 0x19
|
||||||
|
|
||||||
/* Remap some libc-API-compatible function names so that we can use
|
/* Remap some libc-API-compatible function names so that we prevent
|
||||||
them alongside their libc counterparts. */
|
circularararity. */
|
||||||
|
#ifndef WITHOUT_LIBC_STUBS
|
||||||
#define bcopy grub_bcopy
|
#define bcopy grub_bcopy
|
||||||
#define bzero grub_bzero
|
#define bzero grub_bzero
|
||||||
#define isspace grub_isspace
|
#define isspace grub_isspace
|
||||||
|
@ -212,6 +213,7 @@ extern char *grub_scratch_mem;
|
||||||
#define strncat grub_strncat
|
#define strncat grub_strncat
|
||||||
#define strstr grub_strstr
|
#define strstr grub_strstr
|
||||||
#define tolower grub_tolower
|
#define tolower grub_tolower
|
||||||
|
#endif /* WITHOUT_LIBC_STUBS */
|
||||||
|
|
||||||
|
|
||||||
#ifndef ASM_FILE
|
#ifndef ASM_FILE
|
||||||
|
@ -276,7 +278,7 @@ typedef enum
|
||||||
extern unsigned long install_partition;
|
extern unsigned long install_partition;
|
||||||
extern unsigned long boot_drive;
|
extern unsigned long boot_drive;
|
||||||
extern char version_string[];
|
extern char version_string[];
|
||||||
extern char config_file[];
|
extern char *config_file;
|
||||||
|
|
||||||
#ifndef STAGE1_5
|
#ifndef STAGE1_5
|
||||||
/* GUI interface variables. */
|
/* GUI interface variables. */
|
||||||
|
@ -413,7 +415,7 @@ void gotoxy (int x, int y);
|
||||||
|
|
||||||
/* Displays an ASCII character. IBM displays will translate some
|
/* Displays an ASCII character. IBM displays will translate some
|
||||||
characters to special graphical ones (see the DISP_* constants). */
|
characters to special graphical ones (see the DISP_* constants). */
|
||||||
void putchar (int c);
|
void grub_putchar (int c);
|
||||||
|
|
||||||
/* Wait for a keypress, and return its packed BIOS/ASCII key code.
|
/* Wait for a keypress, and return its packed BIOS/ASCII key code.
|
||||||
Use ASCII_CHAR(ret) to extract the ASCII code. */
|
Use ASCII_CHAR(ret) to extract the ASCII code. */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue