add a new command, blocklist.

This commit is contained in:
okuji 1999-12-30 08:21:08 +00:00
parent 161b9f4dde
commit 372831bc72
4 changed files with 94 additions and 0 deletions

View file

@ -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
View file

@ -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.

View file

@ -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

View file

@ -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,