add a new command, blocklist.
This commit is contained in:
parent
161b9f4dde
commit
372831bc72
4 changed files with 94 additions and 0 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
1999-12-30 OKUJI Yoshinori <okuji@gnu.org>
|
||||||
|
|
||||||
|
* stage2/builtins.c (blocklist_func): New function.
|
||||||
|
(builtin_blocklist): New variable.
|
||||||
|
(builtin_table): Added a pointer to BUILTIN_BLOCKLIST.
|
||||||
|
* docs/user-ref.texi (Command-line-specific commands): Added a
|
||||||
|
description about the command "blocklist".
|
||||||
|
|
||||||
1999-12-30 OKUJI Yoshinori <okuji@gnu.org>
|
1999-12-30 OKUJI Yoshinori <okuji@gnu.org>
|
||||||
|
|
||||||
* stage2/disk_io.c (grub_seek): New function.
|
* stage2/disk_io.c (grub_seek): New function.
|
||||||
|
|
1
NEWS
1
NEWS
|
@ -26,6 +26,7 @@ New in 0.5.94:
|
||||||
* The command "install" can now patch a Stage 2 with a different
|
* The command "install" can now patch a Stage 2 with a different
|
||||||
filename from "/boot/grub/menu.lst" even if a Stage 1.5 is used.
|
filename from "/boot/grub/menu.lst" even if a Stage 1.5 is used.
|
||||||
* New program, ``grub-install''.
|
* New program, ``grub-install''.
|
||||||
|
* The command "blocklist" prints the blocklist notation of a file.
|
||||||
|
|
||||||
New in 0.5.93 - 1999-10-30:
|
New in 0.5.93 - 1999-10-30:
|
||||||
* ELF format of FreeBSD kernel is supported.
|
* ELF format of FreeBSD kernel is supported.
|
||||||
|
|
|
@ -738,6 +738,11 @@ partitions exist in one disk.
|
||||||
These commands are usable only in the command line and in menu entries.
|
These commands are usable only in the command line and in menu entries.
|
||||||
If you forget some command, run the command @command{help}.
|
If you forget some command, run the command @command{help}.
|
||||||
|
|
||||||
|
@deffn Command blocklist file
|
||||||
|
Print the blocklist notation of the file @var{file} (@pxref{Blocklist
|
||||||
|
syntax}).
|
||||||
|
@end deffn
|
||||||
|
|
||||||
@deffn Command boot
|
@deffn Command boot
|
||||||
This boots the OS/chain-loader which has been loaded. Only necessary if
|
This boots the OS/chain-loader which has been loaded. Only necessary if
|
||||||
running the fully interactive command line (it is implicit at the end of
|
running the fully interactive command line (it is implicit at the end of
|
||||||
|
|
|
@ -79,6 +79,85 @@ disk_read_print_func (int sector)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* blocklist */
|
||||||
|
static int
|
||||||
|
blocklist_func (char *arg, int flags)
|
||||||
|
{
|
||||||
|
char *dummy = (char *) RAW_ADDR (0x100000);
|
||||||
|
int start_sector;
|
||||||
|
int num_sectors = 0;
|
||||||
|
int num_entries = 0;
|
||||||
|
|
||||||
|
/* Collect contiguous blocks into one entry as many as possible,
|
||||||
|
and print the blocklist notation on the screen. */
|
||||||
|
static void disk_read_blocklist_func (int sector)
|
||||||
|
{
|
||||||
|
if (debug)
|
||||||
|
grub_printf ("[%d]", sector);
|
||||||
|
|
||||||
|
if (num_sectors > 0)
|
||||||
|
{
|
||||||
|
if (start_sector + num_sectors == sector)
|
||||||
|
num_sectors++;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
grub_printf ("%s%d+%d", num_entries ? "," : "",
|
||||||
|
start_sector - part_start, num_sectors);
|
||||||
|
num_entries++;
|
||||||
|
num_sectors = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
start_sector = sector;
|
||||||
|
num_sectors = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Open the file. */
|
||||||
|
if (! grub_open (arg))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* Print the device name. */
|
||||||
|
grub_printf ("(%cd%d",
|
||||||
|
(current_drive & 0x80) ? 'h' : 'f',
|
||||||
|
current_drive & ~0x80);
|
||||||
|
|
||||||
|
if ((current_partition & 0xFF0000) != 0xFF0000)
|
||||||
|
grub_printf (",%d", (current_partition >> 16) & 0xFF);
|
||||||
|
|
||||||
|
if ((current_partition & 0x00FF00) != 0x00FF00)
|
||||||
|
grub_printf (",%c", 'a' + ((current_partition >> 8) & 0xFF));
|
||||||
|
|
||||||
|
grub_printf (")");
|
||||||
|
|
||||||
|
/* Read in the whole file to DUMMY. */
|
||||||
|
disk_read_hook = disk_read_blocklist_func;
|
||||||
|
if (! grub_read (dummy, -1))
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
/* The last entry may not be printed yet. */
|
||||||
|
if (num_sectors > 0)
|
||||||
|
grub_printf ("%s%d+%d", num_entries ? "," : "",
|
||||||
|
start_sector - part_start, num_sectors);
|
||||||
|
|
||||||
|
grub_printf ("\n");
|
||||||
|
|
||||||
|
fail:
|
||||||
|
disk_read_hook = 0;
|
||||||
|
grub_close ();
|
||||||
|
return errnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct builtin builtin_blocklist =
|
||||||
|
{
|
||||||
|
"blocklist",
|
||||||
|
blocklist_func,
|
||||||
|
BUILTIN_CMDLINE,
|
||||||
|
"blocklist FILE",
|
||||||
|
"Print the blocklist notation of the file FILE."
|
||||||
|
};
|
||||||
|
|
||||||
/* boot */
|
/* boot */
|
||||||
static int
|
static int
|
||||||
boot_func (char *arg, int flags)
|
boot_func (char *arg, int flags)
|
||||||
|
@ -2603,6 +2682,7 @@ static struct builtin builtin_uppermem =
|
||||||
/* The table of builtin commands. Sorted in dictionary order. */
|
/* The table of builtin commands. Sorted in dictionary order. */
|
||||||
struct builtin *builtin_table[] =
|
struct builtin *builtin_table[] =
|
||||||
{
|
{
|
||||||
|
&builtin_blocklist,
|
||||||
&builtin_boot,
|
&builtin_boot,
|
||||||
&builtin_cat,
|
&builtin_cat,
|
||||||
&builtin_chainloader,
|
&builtin_chainloader,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue