Add progress module to display load progress of files.
* grub-core/lib/progress.c: New file. * grub-core/Makefile.core.def (progress): New module. * grub-core/kern/file.c (grub_file_open): File name added. * (grub_file_read): Progress hook added. * grub-core/fs/cbfs.c (grub_cbfs_read): Likewise. * grub-core/fs/cpio_common.c (grub_cpio_read): Likewise. * grub-core/net/net.c (grub_net_fs_read_real): Likewise. * include/grub/file.h (struct grub_file): Add progress module * members. * include/grub/term.h (struct grub_term_output): Likewise. * grub-core/osdep/unix/emuconsole.c (grub_console_term_output): Terminal velocity added. * grub-core/osdep/windows/emuconsole.c (grub_console_term_output): * Likewise. * grub-core/term/arc/console.c (grub_console_term_output): Likewise. * grub-core/term/efi/console.c (grub_console_term_output): Likewise. * grub-core/term/gfxterm.c (grub_video_term): Likewise. * grub-core/term/i386/coreboot/cbmemc.c (grub_cbmemc_term_output): * Likewise. * grub-core/term/i386/pc/console.c (grub_console_term_output): * Likewise. * grub-core/term/i386/pc/vga_text.c (grub_vga_text_term): Likewise. * grub-core/term/ieee1275/console.c (grub_console_term_output): * Likewise. * grub-core/term/morse.c (grub_audio_term_output): Likewise. * grub-core/term/serial.c (grub_serial_term_output): Likewise. * grub-core/term/spkmodem.c (grub_spkmodem_term_output): Likewise. * grub-core/term/uboot/console.c (uboot_console_term_output): * Likewise.
This commit is contained in:
parent
0d711431c7
commit
84a0e9699f
22 changed files with 205 additions and 7 deletions
|
@ -87,6 +87,9 @@ grub_file_open (const char *name)
|
|||
if (! file)
|
||||
goto fail;
|
||||
|
||||
file->name = grub_strdup (name);
|
||||
grub_errno = GRUB_ERR_NONE;
|
||||
|
||||
file->device = device;
|
||||
|
||||
if (device->disk && file_name[0] != '/')
|
||||
|
@ -131,10 +134,14 @@ grub_file_open (const char *name)
|
|||
return 0;
|
||||
}
|
||||
|
||||
grub_disk_read_hook_t grub_file_progress_hook;
|
||||
|
||||
grub_ssize_t
|
||||
grub_file_read (grub_file_t file, void *buf, grub_size_t len)
|
||||
{
|
||||
grub_ssize_t res;
|
||||
grub_disk_read_hook_t read_hook;
|
||||
void *read_hook_data;
|
||||
|
||||
if (file->offset > file->size)
|
||||
{
|
||||
|
@ -155,7 +162,17 @@ grub_file_read (grub_file_t file, void *buf, grub_size_t len)
|
|||
|
||||
if (len == 0)
|
||||
return 0;
|
||||
read_hook = file->read_hook;
|
||||
read_hook_data = file->read_hook_data;
|
||||
if (!file->read_hook)
|
||||
{
|
||||
file->read_hook = grub_file_progress_hook;
|
||||
file->read_hook_data = file;
|
||||
file->progress_offset = file->offset;
|
||||
}
|
||||
res = (file->fs->read) (file, buf, len);
|
||||
file->read_hook = read_hook;
|
||||
file->read_hook_data = read_hook_data;
|
||||
if (res > 0)
|
||||
file->offset += res;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue