From 8de3495c7bb146400233a36092740e94237b199a Mon Sep 17 00:00:00 2001 From: okuji Date: Fri, 12 Aug 2005 19:53:33 +0000 Subject: [PATCH] 2005-08-12 Yoshinori K. Okuji * DISTLIST: Added normal/completion.c. * normal/completion.c: New file. * term/i386/pc/console.c (grub_console_getwh): New function. (grub_console_term): Assign grub_console_getwh to getwh. * normal/cmdline.c (grub_tab_complete): Removed. Now the same function is defined in normal/completion.c as grub_normal_do_completion. (grub_cmdline_get): Use grub_normal_do_completion instead of grub_tab_complete. * kern/partition.c (grub_partition_map_iterate): Return 1 if HOOK returns non-zero, otherwise return 0. (grub_partition_iterate): First, probe the partition map. Then, call ITERATE only for this partition map. * kern/misc.c (grub_strncmp): Rewritten. * kern/disk.c (grub_disk_dev_iterate): Return 1 if P->ITERATE returns non-zero. Otherwise return 0. * include/grub/partition.h (grub_partition_map_iterate): Return int instead of void. * include/grub/normal.h (grub_normal_do_completion): New prototype. * include/grub/misc.h (grub_strncmp): Change the type of N to grub_size_t. * include/grub/disk.h (grub_disk_dev_iterate): Return int instead of void. * normal/menu.c (draw_border): Cast GRUB_TERM_BORDER_WIDTH to unsigned explictly before comparing it with I. * kern/main.c (grub_env_write_root): Add the attribute unused into VAR. * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Added normal/completion.c. (normal_mod_SOURCES): Likewise. * conf/i386-pc.rmk (grub_emu_SOURCES): Likewise. (normal_mod_SOURCES): Likewise. * normal/command.c (grub_iterate_commands): If ITERATE returns non-zero, return one immediately. --- ChangeLog | 51 +++++++ DISTLIST | 1 + conf/i386-pc.mk | 51 +++++-- conf/i386-pc.rmk | 9 +- conf/powerpc-ieee1275.mk | 47 ++++-- conf/powerpc-ieee1275.rmk | 8 +- include/grub/disk.h | 2 +- include/grub/misc.h | 2 +- include/grub/normal.h | 1 + include/grub/partition.h | 2 +- kern/disk.c | 6 +- kern/main.c | 3 +- kern/misc.c | 10 +- kern/partition.c | 26 +++- normal/cmdline.c | 300 +------------------------------------- normal/command.c | 5 +- normal/menu.c | 4 +- util/console.c | 12 ++ 18 files changed, 192 insertions(+), 348 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2fc7d0542..dfb566004 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,54 @@ +2005-08-12 Yoshinori K. Okuji + + * DISTLIST: Added normal/completion.c. + + * normal/completion.c: New file. + + * term/i386/pc/console.c (grub_console_getwh): New function. + (grub_console_term): Assign grub_console_getwh to getwh. + + * normal/cmdline.c (grub_tab_complete): Removed. Now the same + function is defined in normal/completion.c as + grub_normal_do_completion. + (grub_cmdline_get): Use grub_normal_do_completion instead of + grub_tab_complete. + + * kern/partition.c (grub_partition_map_iterate): Return 1 if HOOK + returns non-zero, otherwise return 0. + (grub_partition_iterate): First, probe the partition map. Then, + call ITERATE only for this partition map. + + * kern/misc.c (grub_strncmp): Rewritten. + + * kern/disk.c (grub_disk_dev_iterate): Return 1 if P->ITERATE + returns non-zero. Otherwise return 0. + + * include/grub/partition.h (grub_partition_map_iterate): Return + int instead of void. + + * include/grub/normal.h (grub_normal_do_completion): New prototype. + + * include/grub/misc.h (grub_strncmp): Change the type of N to + grub_size_t. + + * include/grub/disk.h (grub_disk_dev_iterate): Return int instead + of void. + + * normal/menu.c (draw_border): Cast GRUB_TERM_BORDER_WIDTH to + unsigned explictly before comparing it with I. + + * kern/main.c (grub_env_write_root): Add the attribute unused into + VAR. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Added + normal/completion.c. + (normal_mod_SOURCES): Likewise. + * conf/i386-pc.rmk (grub_emu_SOURCES): Likewise. + (normal_mod_SOURCES): Likewise. + + * normal/command.c (grub_iterate_commands): If ITERATE returns + non-zero, return one immediately. + 2005-08-09 Vesa Jaaskelainen * conf/i386-pc.rmk (kernel_img_HEADERS): Added machine/vbe.h. diff --git a/DISTLIST b/DISTLIST index 2244eedf1..3e38ebe1d 100644 --- a/DISTLIST +++ b/DISTLIST @@ -152,6 +152,7 @@ normal/powerpc/setjmp.S normal/arg.c normal/cmdline.c normal/command.c +normal/completion.c normal/context.c normal/main.c normal/menu.c diff --git a/conf/i386-pc.mk b/conf/i386-pc.mk index 9f04e6dc8..fd41dbb3c 100644 --- a/conf/i386-pc.mk +++ b/conf/i386-pc.mk @@ -253,7 +253,8 @@ kernel_img_HEADERS = arg.h boot.h device.h disk.h dl.h elf.h env.h err.h \ file.h fs.h kernel.h loader.h misc.h mm.h net.h partition.h \ pc_partition.h rescue.h symbol.h term.h types.h \ machine/biosdisk.h machine/boot.h machine/console.h machine/init.h \ - machine/memory.h machine/loader.h machine/time.h machine/vga.h + machine/memory.h machine/loader.h machine/time.h machine/vga.h \ + machine/vbe.h kernel_img_CFLAGS = $(COMMON_CFLAGS) kernel_img_ASFLAGS = $(COMMON_ASFLAGS) kernel_img_LDFLAGS = -nostdlib -Wl,-N,-Ttext,8200 @@ -681,16 +682,17 @@ grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c \ kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c \ kern/file.c kern/fs.c kern/loader.c kern/main.c kern/misc.c \ kern/partition.c kern/rescue.c kern/term.c \ - normal/arg.c normal/cmdline.c normal/command.c normal/context.c \ - normal/main.c normal/menu.c normal/menu_entry.c \ + normal/arg.c normal/cmdline.c normal/command.c \ + normal/completion.c normal/context.c normal/main.c \ + normal/menu.c normal/menu_entry.c \ partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \ util/console.c util/grub-emu.c util/misc.c \ util/i386/pc/biosdisk.c util/i386/pc/getroot.c \ util/i386/pc/misc.c -CLEANFILES += grub-emu grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_i386_pc_halt.o grub_emu-commands_i386_pc_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_i386_pc_misc.o -MOSTLYCLEANFILES += grub_emu-commands_boot.d grub_emu-commands_cat.d grub_emu-commands_cmp.d grub_emu-commands_configfile.d grub_emu-commands_default.d grub_emu-commands_help.d grub_emu-commands_terminal.d grub_emu-commands_ls.d grub_emu-commands_timeout.d grub_emu-commands_i386_pc_halt.d grub_emu-commands_i386_pc_reboot.d grub_emu-disk_loopback.d grub_emu-fs_ext2.d grub_emu-fs_fat.d grub_emu-fs_fshelp.d grub_emu-fs_hfs.d grub_emu-fs_iso9660.d grub_emu-fs_jfs.d grub_emu-fs_minix.d grub_emu-fs_ufs.d grub_emu-kern_device.d grub_emu-kern_disk.d grub_emu-kern_dl.d grub_emu-kern_env.d grub_emu-kern_err.d grub_emu-kern_file.d grub_emu-kern_fs.d grub_emu-kern_loader.d grub_emu-kern_main.d grub_emu-kern_misc.d grub_emu-kern_partition.d grub_emu-kern_rescue.d grub_emu-kern_term.d grub_emu-normal_arg.d grub_emu-normal_cmdline.d grub_emu-normal_command.d grub_emu-normal_context.d grub_emu-normal_main.d grub_emu-normal_menu.d grub_emu-normal_menu_entry.d grub_emu-partmap_amiga.d grub_emu-partmap_apple.d grub_emu-partmap_pc.d grub_emu-partmap_sun.d grub_emu-util_console.d grub_emu-util_grub_emu.d grub_emu-util_misc.d grub_emu-util_i386_pc_biosdisk.d grub_emu-util_i386_pc_getroot.d grub_emu-util_i386_pc_misc.d +CLEANFILES += grub-emu grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_i386_pc_halt.o grub_emu-commands_i386_pc_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_completion.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_i386_pc_misc.o +MOSTLYCLEANFILES += grub_emu-commands_boot.d grub_emu-commands_cat.d grub_emu-commands_cmp.d grub_emu-commands_configfile.d grub_emu-commands_default.d grub_emu-commands_help.d grub_emu-commands_terminal.d grub_emu-commands_ls.d grub_emu-commands_timeout.d grub_emu-commands_i386_pc_halt.d grub_emu-commands_i386_pc_reboot.d grub_emu-disk_loopback.d grub_emu-fs_ext2.d grub_emu-fs_fat.d grub_emu-fs_fshelp.d grub_emu-fs_hfs.d grub_emu-fs_iso9660.d grub_emu-fs_jfs.d grub_emu-fs_minix.d grub_emu-fs_ufs.d grub_emu-kern_device.d grub_emu-kern_disk.d grub_emu-kern_dl.d grub_emu-kern_env.d grub_emu-kern_err.d grub_emu-kern_file.d grub_emu-kern_fs.d grub_emu-kern_loader.d grub_emu-kern_main.d grub_emu-kern_misc.d grub_emu-kern_partition.d grub_emu-kern_rescue.d grub_emu-kern_term.d grub_emu-normal_arg.d grub_emu-normal_cmdline.d grub_emu-normal_command.d grub_emu-normal_completion.d grub_emu-normal_context.d grub_emu-normal_main.d grub_emu-normal_menu.d grub_emu-normal_menu_entry.d grub_emu-partmap_amiga.d grub_emu-partmap_apple.d grub_emu-partmap_pc.d grub_emu-partmap_sun.d grub_emu-util_console.d grub_emu-util_grub_emu.d grub_emu-util_misc.d grub_emu-util_i386_pc_biosdisk.d grub_emu-util_i386_pc_getroot.d grub_emu-util_i386_pc_misc.d -grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_i386_pc_halt.o grub_emu-commands_i386_pc_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_i386_pc_misc.o +grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_i386_pc_halt.o grub_emu-commands_i386_pc_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_completion.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_i386_pc_misc.o $(BUILD_CC) -o $@ $^ $(BUILD_LDFLAGS) $(grub_emu_LDFLAGS) grub_emu-commands_boot.o: commands/boot.c @@ -981,6 +983,14 @@ grub_emu-normal_command.d: normal/command.c -include grub_emu-normal_command.d +grub_emu-normal_completion.o: normal/completion.c + $(BUILD_CC) -Inormal -I$(srcdir)/normal $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $< + +grub_emu-normal_completion.d: normal/completion.c + set -e; $(BUILD_CC) -Inormal -I$(srcdir)/normal $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -M $< | sed 's,completion\.o[ :]*,grub_emu-normal_completion.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@ + +-include grub_emu-normal_completion.d + grub_emu-normal_context.o: normal/context.c $(BUILD_CC) -Inormal -I$(srcdir)/normal $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $< @@ -1689,10 +1699,10 @@ linux_mod_CFLAGS = $(COMMON_CFLAGS) # For normal.mod. normal_mod_SOURCES = normal/arg.c normal/cmdline.c normal/command.c \ - normal/context.c normal/main.c normal/menu.c \ - normal/menu_entry.c normal/i386/setjmp.S -CLEANFILES += normal.mod mod-normal.o mod-normal.c pre-normal.o normal_mod-normal_arg.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_context.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_menu_entry.o normal_mod-normal_i386_setjmp.o def-normal.lst und-normal.lst -MOSTLYCLEANFILES += normal_mod-normal_arg.d normal_mod-normal_cmdline.d normal_mod-normal_command.d normal_mod-normal_context.d normal_mod-normal_main.d normal_mod-normal_menu.d normal_mod-normal_menu_entry.d normal_mod-normal_i386_setjmp.d + normal/completion.c normal/context.c normal/main.c \ + normal/menu.c normal/menu_entry.c normal/i386/setjmp.S +CLEANFILES += normal.mod mod-normal.o mod-normal.c pre-normal.o normal_mod-normal_arg.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_completion.o normal_mod-normal_context.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_menu_entry.o normal_mod-normal_i386_setjmp.o def-normal.lst und-normal.lst +MOSTLYCLEANFILES += normal_mod-normal_arg.d normal_mod-normal_cmdline.d normal_mod-normal_command.d normal_mod-normal_completion.d normal_mod-normal_context.d normal_mod-normal_main.d normal_mod-normal_menu.d normal_mod-normal_menu_entry.d normal_mod-normal_i386_setjmp.d DEFSYMFILES += def-normal.lst UNDSYMFILES += und-normal.lst @@ -1701,7 +1711,7 @@ normal.mod: pre-normal.o mod-normal.o $(LD) -r -d -o $@ $^ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@ -pre-normal.o: normal_mod-normal_arg.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_context.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_menu_entry.o normal_mod-normal_i386_setjmp.o +pre-normal.o: normal_mod-normal_arg.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_completion.o normal_mod-normal_context.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_menu_entry.o normal_mod-normal_i386_setjmp.o -rm -f $@ $(LD) -r -d -o $@ $^ @@ -1775,6 +1785,25 @@ fs-command.lst: normal/command.c genfslist.sh set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -E $< | sh $(srcdir)/genfslist.sh normal > $@ || (rm -f $@; exit 1) +normal_mod-normal_completion.o: normal/completion.c + $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $< + +normal_mod-normal_completion.d: normal/completion.c + set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -M $< | sed 's,completion\.o[ :]*,normal_mod-normal_completion.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@ + +-include normal_mod-normal_completion.d + +CLEANFILES += cmd-completion.lst fs-completion.lst +COMMANDFILES += cmd-completion.lst +FSFILES += fs-completion.lst + +cmd-completion.lst: normal/completion.c gencmdlist.sh + set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -E $< | sh $(srcdir)/gencmdlist.sh normal > $@ || (rm -f $@; exit 1) + +fs-completion.lst: normal/completion.c genfslist.sh + set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -E $< | sh $(srcdir)/genfslist.sh normal > $@ || (rm -f $@; exit 1) + + normal_mod-normal_context.o: normal/context.c $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $< diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk index 2ad6c6395..aa5d4f8f6 100644 --- a/conf/i386-pc.rmk +++ b/conf/i386-pc.rmk @@ -86,8 +86,9 @@ grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c \ kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c \ kern/file.c kern/fs.c kern/loader.c kern/main.c kern/misc.c \ kern/partition.c kern/rescue.c kern/term.c \ - normal/arg.c normal/cmdline.c normal/command.c normal/context.c \ - normal/main.c normal/menu.c normal/menu_entry.c \ + normal/arg.c normal/cmdline.c normal/command.c \ + normal/completion.c normal/context.c normal/main.c \ + normal/menu.c normal/menu_entry.c \ partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \ util/console.c util/grub-emu.c util/misc.c \ util/i386/pc/biosdisk.c util/i386/pc/getroot.c \ @@ -162,8 +163,8 @@ linux_mod_CFLAGS = $(COMMON_CFLAGS) # For normal.mod. normal_mod_SOURCES = normal/arg.c normal/cmdline.c normal/command.c \ - normal/context.c normal/main.c normal/menu.c \ - normal/menu_entry.c normal/i386/setjmp.S + normal/completion.c normal/context.c normal/main.c \ + normal/menu.c normal/menu_entry.c normal/i386/setjmp.S normal_mod_CFLAGS = $(COMMON_CFLAGS) normal_mod_ASFLAGS = $(COMMON_ASFLAGS) diff --git a/conf/powerpc-ieee1275.mk b/conf/powerpc-ieee1275.mk index 8f81abd10..c20d1b711 100644 --- a/conf/powerpc-ieee1275.mk +++ b/conf/powerpc-ieee1275.mk @@ -73,16 +73,17 @@ grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c \ kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c \ kern/file.c kern/fs.c kern/loader.c kern/main.c kern/misc.c \ kern/partition.c kern/rescue.c kern/term.c \ - normal/arg.c normal/cmdline.c normal/command.c normal/context.c \ + normal/arg.c normal/cmdline.c normal/command.c \ + normal/completion.c normal/context.c \ normal/main.c normal/menu.c normal/menu_entry.c \ partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \ util/console.c util/grub-emu.c util/misc.c \ util/i386/pc/biosdisk.c util/i386/pc/getroot.c \ util/powerpc/ieee1275/misc.c -CLEANFILES += grub-emu grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_ieee1275_halt.o grub_emu-commands_ieee1275_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_powerpc_ieee1275_misc.o -MOSTLYCLEANFILES += grub_emu-commands_boot.d grub_emu-commands_cat.d grub_emu-commands_cmp.d grub_emu-commands_configfile.d grub_emu-commands_default.d grub_emu-commands_help.d grub_emu-commands_terminal.d grub_emu-commands_ls.d grub_emu-commands_timeout.d grub_emu-commands_ieee1275_halt.d grub_emu-commands_ieee1275_reboot.d grub_emu-disk_loopback.d grub_emu-fs_ext2.d grub_emu-fs_fat.d grub_emu-fs_fshelp.d grub_emu-fs_hfs.d grub_emu-fs_iso9660.d grub_emu-fs_jfs.d grub_emu-fs_minix.d grub_emu-fs_ufs.d grub_emu-kern_device.d grub_emu-kern_disk.d grub_emu-kern_dl.d grub_emu-kern_env.d grub_emu-kern_err.d grub_emu-kern_file.d grub_emu-kern_fs.d grub_emu-kern_loader.d grub_emu-kern_main.d grub_emu-kern_misc.d grub_emu-kern_partition.d grub_emu-kern_rescue.d grub_emu-kern_term.d grub_emu-normal_arg.d grub_emu-normal_cmdline.d grub_emu-normal_command.d grub_emu-normal_context.d grub_emu-normal_main.d grub_emu-normal_menu.d grub_emu-normal_menu_entry.d grub_emu-partmap_amiga.d grub_emu-partmap_apple.d grub_emu-partmap_pc.d grub_emu-partmap_sun.d grub_emu-util_console.d grub_emu-util_grub_emu.d grub_emu-util_misc.d grub_emu-util_i386_pc_biosdisk.d grub_emu-util_i386_pc_getroot.d grub_emu-util_powerpc_ieee1275_misc.d +CLEANFILES += grub-emu grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_ieee1275_halt.o grub_emu-commands_ieee1275_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_completion.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_powerpc_ieee1275_misc.o +MOSTLYCLEANFILES += grub_emu-commands_boot.d grub_emu-commands_cat.d grub_emu-commands_cmp.d grub_emu-commands_configfile.d grub_emu-commands_default.d grub_emu-commands_help.d grub_emu-commands_terminal.d grub_emu-commands_ls.d grub_emu-commands_timeout.d grub_emu-commands_ieee1275_halt.d grub_emu-commands_ieee1275_reboot.d grub_emu-disk_loopback.d grub_emu-fs_ext2.d grub_emu-fs_fat.d grub_emu-fs_fshelp.d grub_emu-fs_hfs.d grub_emu-fs_iso9660.d grub_emu-fs_jfs.d grub_emu-fs_minix.d grub_emu-fs_ufs.d grub_emu-kern_device.d grub_emu-kern_disk.d grub_emu-kern_dl.d grub_emu-kern_env.d grub_emu-kern_err.d grub_emu-kern_file.d grub_emu-kern_fs.d grub_emu-kern_loader.d grub_emu-kern_main.d grub_emu-kern_misc.d grub_emu-kern_partition.d grub_emu-kern_rescue.d grub_emu-kern_term.d grub_emu-normal_arg.d grub_emu-normal_cmdline.d grub_emu-normal_command.d grub_emu-normal_completion.d grub_emu-normal_context.d grub_emu-normal_main.d grub_emu-normal_menu.d grub_emu-normal_menu_entry.d grub_emu-partmap_amiga.d grub_emu-partmap_apple.d grub_emu-partmap_pc.d grub_emu-partmap_sun.d grub_emu-util_console.d grub_emu-util_grub_emu.d grub_emu-util_misc.d grub_emu-util_i386_pc_biosdisk.d grub_emu-util_i386_pc_getroot.d grub_emu-util_powerpc_ieee1275_misc.d -grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_ieee1275_halt.o grub_emu-commands_ieee1275_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_powerpc_ieee1275_misc.o +grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-commands_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_ieee1275_halt.o grub_emu-commands_ieee1275_reboot.o grub_emu-disk_loopback.o grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_ufs.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o grub_emu-normal_completion.o grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_powerpc_ieee1275_misc.o $(BUILD_CC) -o $@ $^ $(BUILD_LDFLAGS) $(grub_emu_LDFLAGS) grub_emu-commands_boot.o: commands/boot.c @@ -373,6 +374,14 @@ grub_emu-normal_command.d: normal/command.c -include grub_emu-normal_command.d +grub_emu-normal_completion.o: normal/completion.c + $(BUILD_CC) -Inormal -I$(srcdir)/normal $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $< + +grub_emu-normal_completion.d: normal/completion.c + set -e; $(BUILD_CC) -Inormal -I$(srcdir)/normal $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -M $< | sed 's,completion\.o[ :]*,grub_emu-normal_completion.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@ + +-include grub_emu-normal_completion.d + grub_emu-normal_context.o: normal/context.c $(BUILD_CC) -Inormal -I$(srcdir)/normal $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $< @@ -1179,11 +1188,10 @@ linux_mod_CFLAGS = $(COMMON_CFLAGS) # For normal.mod. normal_mod_SOURCES = normal/arg.c normal/cmdline.c normal/command.c \ - normal/context.c normal/main.c normal/menu.c \ - normal/menu_entry.c \ - normal/powerpc/setjmp.S -CLEANFILES += normal.mod mod-normal.o mod-normal.c pre-normal.o normal_mod-normal_arg.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_context.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_menu_entry.o normal_mod-normal_powerpc_setjmp.o def-normal.lst und-normal.lst -MOSTLYCLEANFILES += normal_mod-normal_arg.d normal_mod-normal_cmdline.d normal_mod-normal_command.d normal_mod-normal_context.d normal_mod-normal_main.d normal_mod-normal_menu.d normal_mod-normal_menu_entry.d normal_mod-normal_powerpc_setjmp.d + normal/completion.c normal/context.c normal/main.c \ + normal/menu.c normal/menu_entry.c normal/powerpc/setjmp.S +CLEANFILES += normal.mod mod-normal.o mod-normal.c pre-normal.o normal_mod-normal_arg.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_completion.o normal_mod-normal_context.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_menu_entry.o normal_mod-normal_powerpc_setjmp.o def-normal.lst und-normal.lst +MOSTLYCLEANFILES += normal_mod-normal_arg.d normal_mod-normal_cmdline.d normal_mod-normal_command.d normal_mod-normal_completion.d normal_mod-normal_context.d normal_mod-normal_main.d normal_mod-normal_menu.d normal_mod-normal_menu_entry.d normal_mod-normal_powerpc_setjmp.d DEFSYMFILES += def-normal.lst UNDSYMFILES += und-normal.lst @@ -1192,7 +1200,7 @@ normal.mod: pre-normal.o mod-normal.o $(LD) -r -d -o $@ $^ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@ -pre-normal.o: normal_mod-normal_arg.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_context.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_menu_entry.o normal_mod-normal_powerpc_setjmp.o +pre-normal.o: normal_mod-normal_arg.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_completion.o normal_mod-normal_context.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_menu_entry.o normal_mod-normal_powerpc_setjmp.o -rm -f $@ $(LD) -r -d -o $@ $^ @@ -1266,6 +1274,25 @@ fs-command.lst: normal/command.c genfslist.sh set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -E $< | sh $(srcdir)/genfslist.sh normal > $@ || (rm -f $@; exit 1) +normal_mod-normal_completion.o: normal/completion.c + $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $< + +normal_mod-normal_completion.d: normal/completion.c + set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -M $< | sed 's,completion\.o[ :]*,normal_mod-normal_completion.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@ + +-include normal_mod-normal_completion.d + +CLEANFILES += cmd-completion.lst fs-completion.lst +COMMANDFILES += cmd-completion.lst +FSFILES += fs-completion.lst + +cmd-completion.lst: normal/completion.c gencmdlist.sh + set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -E $< | sh $(srcdir)/gencmdlist.sh normal > $@ || (rm -f $@; exit 1) + +fs-completion.lst: normal/completion.c genfslist.sh + set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -E $< | sh $(srcdir)/genfslist.sh normal > $@ || (rm -f $@; exit 1) + + normal_mod-normal_context.o: normal/context.c $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $< diff --git a/conf/powerpc-ieee1275.rmk b/conf/powerpc-ieee1275.rmk index ef801ad36..b6112e29a 100644 --- a/conf/powerpc-ieee1275.rmk +++ b/conf/powerpc-ieee1275.rmk @@ -43,7 +43,8 @@ grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c \ kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c \ kern/file.c kern/fs.c kern/loader.c kern/main.c kern/misc.c \ kern/partition.c kern/rescue.c kern/term.c \ - normal/arg.c normal/cmdline.c normal/command.c normal/context.c \ + normal/arg.c normal/cmdline.c normal/command.c \ + normal/completion.c normal/context.c \ normal/main.c normal/menu.c normal/menu_entry.c \ partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \ util/console.c util/grub-emu.c util/misc.c \ @@ -117,9 +118,8 @@ linux_mod_CFLAGS = $(COMMON_CFLAGS) # For normal.mod. normal_mod_SOURCES = normal/arg.c normal/cmdline.c normal/command.c \ - normal/context.c normal/main.c normal/menu.c \ - normal/menu_entry.c \ - normal/powerpc/setjmp.S + normal/completion.c normal/context.c normal/main.c \ + normal/menu.c normal/menu_entry.c normal/powerpc/setjmp.S normal_mod_CFLAGS = $(COMMON_CFLAGS) normal_mod_ASFLAGS = $(COMMON_ASFLAGS) diff --git a/include/grub/disk.h b/include/grub/disk.h index e35ed7b15..c579df0e8 100644 --- a/include/grub/disk.h +++ b/include/grub/disk.h @@ -114,7 +114,7 @@ void grub_disk_cache_invalidate_all (void); void EXPORT_FUNC(grub_disk_dev_register) (grub_disk_dev_t dev); void EXPORT_FUNC(grub_disk_dev_unregister) (grub_disk_dev_t dev); -void EXPORT_FUNC(grub_disk_dev_iterate) (int (*hook) (const char *name)); +int EXPORT_FUNC(grub_disk_dev_iterate) (int (*hook) (const char *name)); grub_disk_t EXPORT_FUNC(grub_disk_open) (const char *name); void EXPORT_FUNC(grub_disk_close) (grub_disk_t disk); diff --git a/include/grub/misc.h b/include/grub/misc.h index 94f2bfa98..1f605dd18 100644 --- a/include/grub/misc.h +++ b/include/grub/misc.h @@ -43,7 +43,7 @@ void *EXPORT_FUNC(memcpy) (void *dest, const void *src, grub_size_t n); int EXPORT_FUNC(grub_memcmp) (const void *s1, const void *s2, grub_size_t n); int EXPORT_FUNC(grub_strcmp) (const char *s1, const char *s2); -int EXPORT_FUNC(grub_strncmp) (const char *s1, const char *s2, int c); +int EXPORT_FUNC(grub_strncmp) (const char *s1, const char *s2, grub_size_t n); int EXPORT_FUNC(grub_strncasecmp) (const char *s1, const char *s2, int c); char *EXPORT_FUNC(grub_strchr) (const char *s, int c); char *EXPORT_FUNC(grub_strrchr) (const char *s, int c); diff --git a/include/grub/normal.h b/include/grub/normal.h index bdb77b4d9..04926b940 100644 --- a/include/grub/normal.h +++ b/include/grub/normal.h @@ -178,6 +178,7 @@ grub_context_t grub_context_get (void); grub_menu_t grub_context_get_current_menu (void); grub_menu_t grub_context_push_menu (grub_menu_t menu); void grub_context_pop_menu (void); +char *grub_normal_do_completion (char *buf, int *restore); #ifdef GRUB_UTIL void grub_normal_init (void); diff --git a/include/grub/partition.h b/include/grub/partition.h index dd6bdb07b..255fb9924 100644 --- a/include/grub/partition.h +++ b/include/grub/partition.h @@ -76,7 +76,7 @@ grub_err_t EXPORT_FUNC(grub_partition_iterate) (struct grub_disk *disk, int (*hook) (const grub_partition_t partition)); char *EXPORT_FUNC(grub_partition_get_name) (const grub_partition_t partition); -void EXPORT_FUNC(grub_partition_map_iterate) (int (*hook) (const grub_partition_map_t partmap)); +int EXPORT_FUNC(grub_partition_map_iterate) (int (*hook) (const grub_partition_map_t partmap)); void EXPORT_FUNC(grub_partition_map_register) (grub_partition_map_t partmap); diff --git a/kern/disk.c b/kern/disk.c index c459579cc..02a49b6c9 100644 --- a/kern/disk.c +++ b/kern/disk.c @@ -194,14 +194,16 @@ grub_disk_dev_unregister (grub_disk_dev_t dev) } } -void +int grub_disk_dev_iterate (int (*hook) (const char *name)) { grub_disk_dev_t p; for (p = grub_disk_dev_list; p; p = p->next) if ((p->iterate) (hook)) - break; + return 1; + + return 0; } grub_disk_t diff --git a/kern/main.c b/kern/main.c index 3c5689458..5447033aa 100644 --- a/kern/main.c +++ b/kern/main.c @@ -60,7 +60,8 @@ grub_load_modules (void) /* Write hook for the environment variables of root. Remove surrounding parentheses, if any. */ static char * -grub_env_write_root (struct grub_env_var *var, const char *val) +grub_env_write_root (struct grub_env_var *var __attribute__ ((unused)), + const char *val) { /* XXX Is it better to check the existence of the device? */ grub_size_t len = grub_strlen (val); diff --git a/kern/misc.c b/kern/misc.c index 08e03711b..6611dac2b 100644 --- a/kern/misc.c +++ b/kern/misc.c @@ -191,18 +191,18 @@ grub_strcmp (const char *s1, const char *s2) } int -grub_strncmp (const char *s1, const char *s2, int c) +grub_strncmp (const char *s1, const char *s2, grub_size_t n) { - int p = 1; - - while (*s1 && *s2 && p < c) + if (n == 0) + return 0; + + while (*s1 && *s2 && --n) { if (*s1 != *s2) return (int) *s1 - (int) *s2; s1++; s2++; - p++; } return (int) *s1 - (int) *s2; diff --git a/kern/partition.c b/kern/partition.c index a2af9b847..fd0f51220 100644 --- a/kern/partition.c +++ b/kern/partition.c @@ -42,14 +42,16 @@ grub_partition_map_unregister (grub_partition_map_t partmap) } } -void +int grub_partition_map_iterate (int (*hook) (const grub_partition_map_t partmap)) { grub_partition_map_t p; for (p = grub_partition_map_list; p; p = p->next) if (hook (p)) - break; + return 1; + + return 0; } grub_partition_t @@ -85,23 +87,35 @@ grub_err_t grub_partition_iterate (struct grub_disk *disk, int (*hook) (const grub_partition_t partition)) { - auto int part_map_iterate (const grub_partition_map_t partmap); + grub_partition_map_t partmap = 0; - int part_map_iterate (const grub_partition_map_t partmap) + auto int part_map_iterate (const grub_partition_map_t p); + auto int part_map_iterate_hook (const grub_partition_t partition); + + int part_map_iterate_hook (const grub_partition_t partition __attribute__ ((unused))) { - grub_err_t err = partmap->iterate (disk, hook); + return 1; + } + + int part_map_iterate (const grub_partition_map_t p) + { + grub_err_t err = p->iterate (disk, part_map_iterate_hook); - if (err == GRUB_ERR_BAD_PART_TABLE) + if (err != GRUB_ERR_NONE) { /* Continue to next partition map type. */ grub_errno = GRUB_ERR_NONE; return 0; } + partmap = p; return 1; } grub_partition_map_iterate (part_map_iterate); + if (partmap) + partmap->iterate (disk, hook); + return grub_errno; } diff --git a/normal/cmdline.c b/normal/cmdline.c index 8b590353c..c74a27038 100644 --- a/normal/cmdline.c +++ b/normal/cmdline.c @@ -133,304 +133,6 @@ grub_history_replace (int pos, char *s) hist_lines[pos] = grub_strdup (s); } -/* Try to complete the string in BUF, return the characters that - should be added to the string. This command outputs the possible - completions, in that case set RESTORE to 1 so the caller can - restore the prompt. */ -static char * -grub_tab_complete (char *buf, int *restore) -{ - char *pos = buf; - char *path; - - char *found = 0; - int begin; - int end; - int len; - int numfound = 0; - - /* The disk that is used for grub_partition_iterate. */ - grub_device_t partdev; - - /* String that is added when matched. */ - char *matchstr; - - auto void print_simple_completion (char *comp); - auto void print_partition_completion (char *comp); - auto int NESTED_FUNC_ATTR add_completion (const char *comp, const char *match, - const char *what, - void (*print_completion) (char *)); - auto int iterate_commands (grub_command_t cmd); - auto int iterate_dev (const char *devname); - auto int iterate_part (const grub_partition_t p); - auto int iterate_dir (const char *filename, int dir); - - - - void print_simple_completion (char *comp) - { - grub_printf (" %s", comp); - } - - void print_partition_completion (char *comp) - { - grub_print_partinfo (partdev, comp); - grub_errno = 0; - } - - /* Add a string to the list of possible completions. COMP is the - string that should be added. If this string completely matches - add the string MATCH to the input after adding COMP. The string - WHAT contains a discription of the kind of data that is added. - Use PRINT_COMPLETION to show the completions if there are - multiple matches. XXX: Because of a bug in gcc it is required to - use __regparm__ in some cases. */ - - int NESTED_FUNC_ATTR add_completion (const char *comp, const char *match, - const char *what, - void (*print_completion) (char *)) - { - /* Bug in strncmp then len ==0. */ - if (!len || grub_strncmp (pos, comp, len) == 0) - { - numfound++; - - if (numfound == 1) - { - begin = len; - found = grub_strdup (comp); - end = grub_strlen (found); - matchstr = (char *) match; - } - /* Multiple matches found, print the first instead of completing. */ - else if (numfound == 2) - { - grub_printf ("\nPossible %s are:\n", what); - print_completion (found); - } - - if (numfound > 1) - { - char *s1 = found; - const char *s2 = comp; - int cnt = 0; - - print_completion ((char *) comp); - - /* Find out how many characters match. */ - while ((cnt < end) && *s1 && *s2 && (*s1 == *s2)) - { - s1++; - s2++; - cnt++; - } - end = cnt; - } - } - - return 0; - } - - int iterate_part (const grub_partition_t p) - { - add_completion (grub_partition_get_name (p), ")", "partitions", - print_partition_completion); - return 0; - } - - int iterate_dir (const char *filename, int dir) - { - if (!dir) - add_completion (filename, " ", "files", print_simple_completion); - else - { - char fname[grub_strlen (filename) + 2]; - grub_strcpy (fname, filename); - grub_sprintf (fname, "%s/", filename); - add_completion (fname, "", "files", print_simple_completion); - } - return 0; - } - - int iterate_dev (const char *devname) - { - grub_device_t dev; - - /* Complete the partition part. */ - dev = grub_device_open (devname); - - if (dev) - { - if (dev->disk && dev->disk->has_partitions) - add_completion (devname, ",", "disks", print_simple_completion); - else - add_completion (devname, ")", "disks", print_simple_completion); - } - - grub_errno = GRUB_ERR_NONE; - return 0; - } - - int iterate_commands (grub_command_t cmd) - { - if (grub_command_find (cmd->name)) - { - if (cmd->flags & GRUB_COMMAND_FLAG_CMDLINE) - add_completion (cmd->name, " ", "commands", - print_simple_completion); - } - return 0; - } - - /* Remove blank space on the beginning of the line. */ - while (*pos == ' ') - pos++; - - /* Check if the string is a command or path. */ - path = grub_strchr (pos, ' '); - - if (!path) - { - /* Tab complete a command. */ - len = grub_strlen (pos); - - grub_iterate_commands (iterate_commands); - } - else - { - pos = path; - - /* Remove blank space on the beginning of the line. */ - while (*pos == ' ') - pos++; - - /* Check if this is a completion for a device name. */ - if (*pos == '(' && !grub_strchr (pos, ')')) - { - /* Check if this is a device or partition. */ - char *partition = grub_strchr (++pos, ','); - - if (!partition) - { - /* Complete the disk part. */ - len = grub_strlen (pos); - grub_disk_dev_iterate (iterate_dev); - if (grub_errno) - goto fail; - } - else - { - *partition = '\0'; - - /* Complete the partition part. */ - partdev = grub_device_open (pos); - *partition = ','; - grub_errno = GRUB_ERR_NONE; - - if (partdev) - { - if (partdev->disk && partdev->disk->has_partitions) - { - pos = partition + 1; - len = grub_strlen (pos); - - grub_partition_iterate (partdev->disk, iterate_part); - if (grub_errno) - grub_errno = 0; - } - - grub_device_close (partdev); - } - else - goto fail; - } - } - else - { - char *device = grub_file_get_device_name (pos); - grub_device_t dev; - grub_fs_t fs; - - dev = grub_device_open (device); - if (!dev) - goto fail; - - fs = grub_fs_probe (dev); - if (grub_errno) - goto fail; - - pos = grub_strrchr (pos, '/'); - if (pos) - { - char *dir; - char *dirfile; - pos++; - len = grub_strlen (pos); - - dir = grub_strchr (path, '/'); - if (!dir) - { - *restore = 0; - return 0; - } - - dir = grub_strdup (dir); - - /* Cut away the filename part. */ - dirfile = grub_strrchr (dir, '/'); - dirfile[1] = '\0'; - - /* Tab complete a file. */ - (fs->dir) (dev, dir, iterate_dir); - if (dev) - grub_device_close (dev); - - grub_free (device); - grub_free (dir); - - if (grub_errno) - goto fail; - } - else - { - found = grub_strdup ("/"); - matchstr = ""; - numfound = 1; - begin = 0; - end = 1; - } - } - - } - - /* If more than one match is found those matches will be printed and - the prompt should be restored. */ - if (numfound > 1) - *restore = 1; - else - *restore = 0; - - /* Return the part that matches. */ - if (end && found) - { - char *insert; - insert = grub_malloc (end - begin + 1 + sizeof (matchstr)); - grub_strncpy (insert, found + begin, end - begin); - insert[end - begin] = '\0'; - if (numfound == 1) - grub_strcat (insert, matchstr); - grub_free (found); - - return insert; - } - - fail: - grub_free (found); - grub_errno = GRUB_ERR_NONE; - - return 0; -} - void grub_cmdline_run (int nested) { @@ -607,7 +309,7 @@ grub_cmdline_get (const char *prompt, char cmdline[], unsigned max_len, buf[lpos] = '\0'; - insert = grub_tab_complete (buf, &restore); + insert = grub_normal_do_completion (buf, &restore); /* Restore the original string. */ buf[lpos] = backup; diff --git a/normal/command.c b/normal/command.c index 90b2e46cd..919734852 100644 --- a/normal/command.c +++ b/normal/command.c @@ -173,8 +173,11 @@ int grub_iterate_commands (int (*iterate) (grub_command_t)) { grub_command_t cmd; + for (cmd = grub_command_list; cmd; cmd = cmd->next) - iterate (cmd); + if (iterate (cmd)) + return 1; + return 0; } diff --git a/normal/menu.c b/normal/menu.c index d0c80b9ec..4265cd3a0 100644 --- a/normal/menu.c +++ b/normal/menu.c @@ -33,7 +33,7 @@ draw_border (void) grub_gotoxy (GRUB_TERM_MARGIN, GRUB_TERM_TOP_BORDER_Y); grub_putcode (GRUB_TERM_DISP_UL); - for (i = 0; i < GRUB_TERM_BORDER_WIDTH - 2; i++) + for (i = 0; i < (unsigned) GRUB_TERM_BORDER_WIDTH - 2; i++) grub_putcode (GRUB_TERM_DISP_HLINE); grub_putcode (GRUB_TERM_DISP_UR); @@ -47,7 +47,7 @@ draw_border (void) grub_gotoxy (GRUB_TERM_MARGIN, GRUB_TERM_TOP_BORDER_Y + GRUB_TERM_NUM_ENTRIES + 1); grub_putcode (GRUB_TERM_DISP_LL); - for (i = 0; i < GRUB_TERM_BORDER_WIDTH - 2; i++) + for (i = 0; i < (unsigned) GRUB_TERM_BORDER_WIDTH - 2; i++) grub_putcode (GRUB_TERM_DISP_HLINE); grub_putcode (GRUB_TERM_DISP_LR); diff --git a/util/console.c b/util/console.c index b938bbc5a..ec3c855fc 100644 --- a/util/console.c +++ b/util/console.c @@ -217,6 +217,17 @@ grub_ncurses_getxy (void) return (x << 8) | y; } +static grub_uint16_t +grub_ncurses_getwh (void) +{ + int x; + int y; + + getmaxyx (stdscr, y, x); + + return (x << 8) | y; +} + static void grub_ncurses_gotoxy (grub_uint8_t x, grub_uint8_t y) { @@ -275,6 +286,7 @@ static struct grub_term grub_ncurses_term = .checkkey = grub_ncurses_checkkey, .getkey = grub_ncurses_getkey, .getxy = grub_ncurses_getxy, + .getwh = grub_ncurses_getwh, .gotoxy = grub_ncurses_gotoxy, .cls = grub_ncurses_cls, .setcolorstate = grub_ncurses_setcolorstate,