]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2005-08-12 Yoshinori K. Okuji <okuji@enbug.org>
authorokuji <okuji@localhost>
Fri, 12 Aug 2005 19:53:33 +0000 (19:53 +0000)
committerokuji <okuji@localhost>
Fri, 12 Aug 2005 19:53:33 +0000 (19:53 +0000)
        * 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.

18 files changed:
ChangeLog
DISTLIST
conf/i386-pc.mk
conf/i386-pc.rmk
conf/powerpc-ieee1275.mk
conf/powerpc-ieee1275.rmk
include/grub/disk.h
include/grub/misc.h
include/grub/normal.h
include/grub/partition.h
kern/disk.c
kern/main.c
kern/misc.c
kern/partition.c
normal/cmdline.c
normal/command.c
normal/menu.c
util/console.c

index 2fc7d05422f1e5b4996a6e45c7e8df7f498b2da9..dfb56600401b9f2ec5f80215f9865796f11934be 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,54 @@
+2005-08-12  Yoshinori K. Okuji  <okuji@enbug.org>
+
+       * 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  <chaac@nic.fi>
 
        * conf/i386-pc.rmk (kernel_img_HEADERS): Added machine/vbe.h.
index 2244eedf1f6ca89bb8273e480bf0af4a9b3f5b73..3e38ebe1da7fdbf83771babce07fc814c266d4fc 100644 (file)
--- 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
index 9f04e6dc848ae20b5ec60ce7edb817810d91eb72..fd41dbb3cd9dc3e4cf70d4fa7e493ff9f6a19e3c 100644 (file)
@@ -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 $@ $<
 
index 2ad6c63951876a5615e115067af5e0cd601748f4..aa5d4f8f61dc372ee104f27405add03f00fbdace 100644 (file)
@@ -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)
 
index 8f81abd10809454183b4d234d148e3e4c314f7e9..c20d1b7110e6778536f46cb211eb1be52b68f840 100644 (file)
@@ -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 $@ $<
 
index ef801ad367864ff9d7fe5da6b11daab4d102e446..b6112e29a60830b64bf9109a7e491b50c7c4ac05 100644 (file)
@@ -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)
 
index e35ed7b15a6b90c378cdff086697fcf60f426191..c579df0e8fc5bb298c752be5b60403fd57c1f159 100644 (file)
@@ -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);
index 94f2bfa985353e61e9c7b60d212bab2478fbb5cf..1f605dd181ffc09a11691e83c5859537013246dd 100644 (file)
@@ -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);
index bdb77b4d9a3d3556235cd5ff2d9e2cc365ff99b1..04926b94027da76e919403e261d656dff242f561 100644 (file)
@@ -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);
index dd6bdb07b906860944530d48b895e8ec02a84da0..255fb9924c0a6b41c97d2f56cb9bfa8cc4e8eee8 100644 (file)
@@ -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);
 
index c459579cc5b12a0d1737c05a4b76cb63f996cab6..02a49b6c9621ee708f2d9aa5a3f8bc78f307c741 100644 (file)
@@ -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
index 3c5689458224355d2b32743bff5c7e69dd44c836..5447033aa5c33f43125700fa9706822c1924fffe 100644 (file)
@@ -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);
index 08e03711baef13de707136842939fd710180cd53..6611dac2ba011d6b123b587a0185510c90870fb2 100644 (file)
@@ -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;
index a2af9b847a044794d16850f50f382ffb7277e623..fd0f512207325ed8867b85a9c6672199c87c1929 100644 (file)
@@ -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;
 }
 
index 8b590353c6d7bdd8de3f914c3d392e537ef585d1..c74a2703804ab670be45dacc820661f70fa284de 100644 (file)
@@ -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;
                
index 90b2e46cd48c9e805ca00225c7c0aa09482b3def..919734852267122220899b8ab34309c0bcafd24c 100644 (file)
@@ -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;
 }
 
index d0c80b9ec4d2d746096ec9a82c214e1fca61f213..4265cd3a09686a0fcb852a66069963be9fe52f5c 100644 (file)
@@ -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);
 
index b938bbc5af0296dc029e926623307eb40cb8769a..ec3c855fcb7475ed6e8b8f9f2803a6efdc206338 100644 (file)
@@ -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,