diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-01-22 07:21:38 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-01-22 07:21:38 +0000 |
commit | 8e1c71529c2bf38a04d4a117e625e59044a0785a (patch) | |
tree | 2f115293c25e7ee9307f268ec198e2cf486ff070 /util-linux | |
parent | 00cdbd8fc20a4e2e2208f90a2691a3806c931b06 (diff) | |
download | busybox-w32-8e1c71529c2bf38a04d4a117e625e59044a0785a.tar.gz busybox-w32-8e1c71529c2bf38a04d4a117e625e59044a0785a.tar.bz2 busybox-w32-8e1c71529c2bf38a04d4a117e625e59044a0785a.zip |
Convert cmdedit into more generic line input facility
(make history and completion optional at runtime).
Use it for fdisk, as an example.
Some unrelated fixes in fdisk are also here.
Diffstat (limited to 'util-linux')
-rw-r--r-- | util-linux/fdisk.c | 309 | ||||
-rw-r--r-- | util-linux/fdisk_osf.c | 46 |
2 files changed, 172 insertions, 183 deletions
diff --git a/util-linux/fdisk.c b/util-linux/fdisk.c index cc6dfa57a..f15b9af91 100644 --- a/util-linux/fdisk.c +++ b/util-linux/fdisk.c | |||
@@ -202,7 +202,7 @@ static int get_boot(enum action what); | |||
202 | }) | 202 | }) |
203 | 203 | ||
204 | 204 | ||
205 | #define LINE_LENGTH 800 | 205 | #define LINE_LENGTH 80 |
206 | #define pt_offset(b, n) ((struct partition *)((b) + 0x1be + \ | 206 | #define pt_offset(b, n) ((struct partition *)((b) + 0x1be + \ |
207 | (n) * sizeof(struct partition))) | 207 | (n) * sizeof(struct partition))) |
208 | #define sector(s) ((s) & 0x3f) | 208 | #define sector(s) ((s) & 0x3f) |
@@ -291,16 +291,20 @@ write_part_table_flag(char *b) | |||
291 | static char line_buffer[LINE_LENGTH]; | 291 | static char line_buffer[LINE_LENGTH]; |
292 | static char *line_ptr; | 292 | static char *line_ptr; |
293 | 293 | ||
294 | /* read line; return 0 or first char */ | 294 | /* read line; return 0 or first printable char */ |
295 | static int | 295 | static int |
296 | read_line(void) | 296 | read_line(const char *prompt) |
297 | { | 297 | { |
298 | fflush(stdout); /* requested by niles@scyld.com */ | 298 | int sz; |
299 | |||
300 | sz = read_line_input(prompt, line_buffer, LINE_LENGTH, NULL); | ||
301 | if (sz <= 0) | ||
302 | exit(0); /* Ctrl-D or Ctrl-C */ | ||
303 | |||
304 | if (line_buffer[sz-1] == '\n') | ||
305 | line_buffer[--sz] = '\0'; | ||
306 | |||
299 | line_ptr = line_buffer; | 307 | line_ptr = line_buffer; |
300 | if (!fgets(line_buffer, LINE_LENGTH, stdin)) { | ||
301 | /* error or eof */ | ||
302 | bb_error_msg_and_die("\ngot EOF, exiting"); | ||
303 | } | ||
304 | while (*line_ptr && !isgraph(*line_ptr)) | 308 | while (*line_ptr && !isgraph(*line_ptr)) |
305 | line_ptr++; | 309 | line_ptr++; |
306 | return *line_ptr; | 310 | return *line_ptr; |
@@ -309,22 +313,19 @@ read_line(void) | |||
309 | static char | 313 | static char |
310 | read_nonempty(const char *mesg) | 314 | read_nonempty(const char *mesg) |
311 | { | 315 | { |
312 | do { | 316 | while (!read_line(mesg)) /* repeat */; |
313 | fputs(mesg, stdout); | ||
314 | } while (!read_line()); | ||
315 | return *line_ptr; | 317 | return *line_ptr; |
316 | } | 318 | } |
317 | 319 | ||
318 | static char | 320 | static char |
319 | read_maybe_empty(const char *mesg) | 321 | read_maybe_empty(const char *mesg) |
320 | { | 322 | { |
321 | fputs(mesg, stdout); | 323 | if (!read_line(mesg)) { |
322 | if (!read_line()) { | ||
323 | line_ptr = line_buffer; | 324 | line_ptr = line_buffer; |
324 | *line_ptr = '\n'; | 325 | line_ptr[0] = '\n'; |
325 | line_ptr[1] = 0; | 326 | line_ptr[1] = '\0'; |
326 | } | 327 | } |
327 | return *line_ptr; | 328 | return line_ptr[0]; |
328 | } | 329 | } |
329 | 330 | ||
330 | static int | 331 | static int |
@@ -469,9 +470,9 @@ static const struct systypes i386_sys_types[] = { | |||
469 | { "\x16" "Hidden FAT16" }, | 470 | { "\x16" "Hidden FAT16" }, |
470 | { "\x17" "Hidden HPFS/NTFS" }, | 471 | { "\x17" "Hidden HPFS/NTFS" }, |
471 | { "\x1b" "Hidden Win95 FAT32" }, | 472 | { "\x1b" "Hidden Win95 FAT32" }, |
472 | { "\x1c" "Hidden Win95 FAT32 (LBA)" }, | 473 | { "\x1c" "Hidden W95 FAT32 (LBA)" }, |
473 | { "\x1e" "Hidden Win95 FAT16 (LBA)" }, | 474 | { "\x1e" "Hidden W95 FAT16 (LBA)" }, |
474 | { "\x3c" "PartitionMagic recovery" }, | 475 | { "\x3c" "Part.Magic recovery" }, |
475 | { "\x41" "PPC PReP Boot" }, | 476 | { "\x41" "PPC PReP Boot" }, |
476 | { "\x42" "SFS" }, | 477 | { "\x42" "SFS" }, |
477 | { "\x63" "GNU HURD or SysV" }, /* GNU HURD or Mach or Sys V/386 (such as ISC UNIX) */ | 478 | { "\x63" "GNU HURD or SysV" }, /* GNU HURD or Mach or Sys V/386 (such as ISC UNIX) */ |
@@ -485,7 +486,7 @@ static const struct systypes i386_sys_types[] = { | |||
485 | { "\x87" "NTFS volume set" }, | 486 | { "\x87" "NTFS volume set" }, |
486 | { "\x8e" "Linux LVM" }, | 487 | { "\x8e" "Linux LVM" }, |
487 | { "\x9f" "BSD/OS" }, /* BSDI */ | 488 | { "\x9f" "BSD/OS" }, /* BSDI */ |
488 | { "\xa0" "IBM Thinkpad hibernation" }, | 489 | { "\xa0" "Thinkpad hibernation" }, |
489 | { "\xa5" "FreeBSD" }, /* various BSD flavours */ | 490 | { "\xa5" "FreeBSD" }, /* various BSD flavours */ |
490 | { "\xa6" "OpenBSD" }, | 491 | { "\xa6" "OpenBSD" }, |
491 | { "\xa8" "Darwin UFS" }, | 492 | { "\xa8" "Darwin UFS" }, |
@@ -718,71 +719,61 @@ is_dos_partition(int t) | |||
718 | static void | 719 | static void |
719 | menu(void) | 720 | menu(void) |
720 | { | 721 | { |
722 | puts(_("Command Action")); | ||
721 | if (LABEL_IS_SUN) { | 723 | if (LABEL_IS_SUN) { |
722 | puts(_("Command action")); | 724 | puts(_("a\ttoggle a read only flag")); /* sun */ |
723 | puts(_("\ta\ttoggle a read only flag")); /* sun */ | 725 | puts(_("b\tedit bsd disklabel")); |
724 | puts(_("\tb\tedit bsd disklabel")); | 726 | puts(_("c\ttoggle the mountable flag")); /* sun */ |
725 | puts(_("\tc\ttoggle the mountable flag")); /* sun */ | 727 | puts(_("d\tdelete a partition")); |
726 | puts(_("\td\tdelete a partition")); | 728 | puts(_("l\tlist known partition types")); |
727 | puts(_("\tl\tlist known partition types")); | 729 | puts(_("n\tadd a new partition")); |
728 | puts(_("\tm\tprint this menu")); | 730 | puts(_("o\tcreate a new empty DOS partition table")); |
729 | puts(_("\tn\tadd a new partition")); | 731 | puts(_("p\tprint the partition table")); |
730 | puts(_("\to\tcreate a new empty DOS partition table")); | 732 | puts(_("q\tquit without saving changes")); |
731 | puts(_("\tp\tprint the partition table")); | 733 | puts(_("s\tcreate a new empty Sun disklabel")); /* sun */ |
732 | puts(_("\tq\tquit without saving changes")); | 734 | puts(_("t\tchange a partition's system id")); |
733 | puts(_("\ts\tcreate a new empty Sun disklabel")); /* sun */ | 735 | puts(_("u\tchange display/entry units")); |
734 | puts(_("\tt\tchange a partition's system id")); | 736 | puts(_("v\tverify the partition table")); |
735 | puts(_("\tu\tchange display/entry units")); | 737 | puts(_("w\twrite table to disk and exit")); |
736 | puts(_("\tv\tverify the partition table")); | ||
737 | puts(_("\tw\twrite table to disk and exit")); | ||
738 | #if ENABLE_FEATURE_FDISK_ADVANCED | 738 | #if ENABLE_FEATURE_FDISK_ADVANCED |
739 | puts(_("\tx\textra functionality (experts only)")); | 739 | puts(_("x\textra functionality (experts only)")); |
740 | #endif | 740 | #endif |
741 | } else | 741 | } else if (LABEL_IS_SGI) { |
742 | if (LABEL_IS_SGI) { | 742 | puts(_("a\tselect bootable partition")); /* sgi flavour */ |
743 | puts(_("Command action")); | 743 | puts(_("b\tedit bootfile entry")); /* sgi */ |
744 | puts(_("\ta\tselect bootable partition")); /* sgi flavour */ | 744 | puts(_("c\tselect sgi swap partition")); /* sgi flavour */ |
745 | puts(_("\tb\tedit bootfile entry")); /* sgi */ | 745 | puts(_("d\tdelete a partition")); |
746 | puts(_("\tc\tselect sgi swap partition")); /* sgi flavour */ | 746 | puts(_("l\tlist known partition types")); |
747 | puts(_("\td\tdelete a partition")); | 747 | puts(_("n\tadd a new partition")); |
748 | puts(_("\tl\tlist known partition types")); | 748 | puts(_("o\tcreate a new empty DOS partition table")); |
749 | puts(_("\tm\tprint this menu")); | 749 | puts(_("p\tprint the partition table")); |
750 | puts(_("\tn\tadd a new partition")); | 750 | puts(_("q\tquit without saving changes")); |
751 | puts(_("\to\tcreate a new empty DOS partition table")); | 751 | puts(_("s\tcreate a new empty Sun disklabel")); /* sun */ |
752 | puts(_("\tp\tprint the partition table")); | 752 | puts(_("t\tchange a partition's system id")); |
753 | puts(_("\tq\tquit without saving changes")); | 753 | puts(_("u\tchange display/entry units")); |
754 | puts(_("\ts\tcreate a new empty Sun disklabel")); /* sun */ | 754 | puts(_("v\tverify the partition table")); |
755 | puts(_("\tt\tchange a partition's system id")); | 755 | puts(_("w\twrite table to disk and exit")); |
756 | puts(_("\tu\tchange display/entry units")); | 756 | } else if (LABEL_IS_AIX) { |
757 | puts(_("\tv\tverify the partition table")); | 757 | puts(_("o\tcreate a new empty DOS partition table")); |
758 | puts(_("\tw\twrite table to disk and exit")); | 758 | puts(_("q\tquit without saving changes")); |
759 | } else | 759 | puts(_("s\tcreate a new empty Sun disklabel")); /* sun */ |
760 | if (LABEL_IS_AIX) { | 760 | } else { |
761 | puts(_("Command action")); | 761 | puts(_("a\ttoggle a bootable flag")); |
762 | puts(_("\tm\tprint this menu")); | 762 | puts(_("b\tedit bsd disklabel")); |
763 | puts(_("\to\tcreate a new empty DOS partition table")); | 763 | puts(_("c\ttoggle the dos compatibility flag")); |
764 | puts(_("\tq\tquit without saving changes")); | 764 | puts(_("d\tdelete a partition")); |
765 | puts(_("\ts\tcreate a new empty Sun disklabel")); /* sun */ | 765 | puts(_("l\tlist known partition types")); |
766 | } else | 766 | puts(_("n\tadd a new partition")); |
767 | { | 767 | puts(_("o\tcreate a new empty DOS partition table")); |
768 | puts(_("Command action")); | 768 | puts(_("p\tprint the partition table")); |
769 | puts(_("\ta\ttoggle a bootable flag")); | 769 | puts(_("q\tquit without saving changes")); |
770 | puts(_("\tb\tedit bsd disklabel")); | 770 | puts(_("s\tcreate a new empty Sun disklabel")); /* sun */ |
771 | puts(_("\tc\ttoggle the dos compatibility flag")); | 771 | puts(_("t\tchange a partition's system id")); |
772 | puts(_("\td\tdelete a partition")); | 772 | puts(_("u\tchange display/entry units")); |
773 | puts(_("\tl\tlist known partition types")); | 773 | puts(_("v\tverify the partition table")); |
774 | puts(_("\tm\tprint this menu")); | 774 | puts(_("w\twrite table to disk and exit")); |
775 | puts(_("\tn\tadd a new partition")); | ||
776 | puts(_("\to\tcreate a new empty DOS partition table")); | ||
777 | puts(_("\tp\tprint the partition table")); | ||
778 | puts(_("\tq\tquit without saving changes")); | ||
779 | puts(_("\ts\tcreate a new empty Sun disklabel")); /* sun */ | ||
780 | puts(_("\tt\tchange a partition's system id")); | ||
781 | puts(_("\tu\tchange display/entry units")); | ||
782 | puts(_("\tv\tverify the partition table")); | ||
783 | puts(_("\tw\twrite table to disk and exit")); | ||
784 | #if ENABLE_FEATURE_FDISK_ADVANCED | 775 | #if ENABLE_FEATURE_FDISK_ADVANCED |
785 | puts(_("\tx\textra functionality (experts only)")); | 776 | puts(_("x\textra functionality (experts only)")); |
786 | #endif | 777 | #endif |
787 | } | 778 | } |
788 | } | 779 | } |
@@ -793,73 +784,64 @@ menu(void) | |||
793 | static void | 784 | static void |
794 | xmenu(void) | 785 | xmenu(void) |
795 | { | 786 | { |
787 | puts(_("Command Action")); | ||
796 | if (LABEL_IS_SUN) { | 788 | if (LABEL_IS_SUN) { |
797 | puts(_("Command action")); | 789 | puts(_("a\tchange number of alternate cylinders")); /*sun*/ |
798 | puts(_("\ta\tchange number of alternate cylinders")); /*sun*/ | 790 | puts(_("c\tchange number of cylinders")); |
799 | puts(_("\tc\tchange number of cylinders")); | 791 | puts(_("d\tprint the raw data in the partition table")); |
800 | puts(_("\td\tprint the raw data in the partition table")); | 792 | puts(_("e\tchange number of extra sectors per cylinder"));/*sun*/ |
801 | puts(_("\te\tchange number of extra sectors per cylinder"));/*sun*/ | 793 | puts(_("h\tchange number of heads")); |
802 | puts(_("\th\tchange number of heads")); | 794 | puts(_("i\tchange interleave factor")); /*sun*/ |
803 | puts(_("\ti\tchange interleave factor")); /*sun*/ | 795 | puts(_("o\tchange rotation speed (rpm)")); /*sun*/ |
804 | puts(_("\to\tchange rotation speed (rpm)")); /*sun*/ | 796 | puts(_("p\tprint the partition table")); |
805 | puts(_("\tm\tprint this menu")); | 797 | puts(_("q\tquit without saving changes")); |
806 | puts(_("\tp\tprint the partition table")); | 798 | puts(_("r\treturn to main menu")); |
807 | puts(_("\tq\tquit without saving changes")); | 799 | puts(_("s\tchange number of sectors/track")); |
808 | puts(_("\tr\treturn to main menu")); | 800 | puts(_("v\tverify the partition table")); |
809 | puts(_("\ts\tchange number of sectors/track")); | 801 | puts(_("w\twrite table to disk and exit")); |
810 | puts(_("\tv\tverify the partition table")); | 802 | puts(_("y\tchange number of physical cylinders")); /*sun*/ |
811 | puts(_("\tw\twrite table to disk and exit")); | 803 | } else if (LABEL_IS_SGI) { |
812 | puts(_("\ty\tchange number of physical cylinders")); /*sun*/ | 804 | puts(_("b\tmove beginning of data in a partition")); /* !sun */ |
813 | } else | 805 | puts(_("c\tchange number of cylinders")); |
814 | if (LABEL_IS_SGI) { | 806 | puts(_("d\tprint the raw data in the partition table")); |
815 | puts(_("Command action")); | 807 | puts(_("e\tlist extended partitions")); /* !sun */ |
816 | puts(_("\tb\tmove beginning of data in a partition")); /* !sun */ | 808 | puts(_("g\tcreate an IRIX (SGI) partition table"));/* sgi */ |
817 | puts(_("\tc\tchange number of cylinders")); | 809 | puts(_("h\tchange number of heads")); |
818 | puts(_("\td\tprint the raw data in the partition table")); | 810 | puts(_("p\tprint the partition table")); |
819 | puts(_("\te\tlist extended partitions")); /* !sun */ | 811 | puts(_("q\tquit without saving changes")); |
820 | puts(_("\tg\tcreate an IRIX (SGI) partition table"));/* sgi */ | 812 | puts(_("r\treturn to main menu")); |
821 | puts(_("\th\tchange number of heads")); | 813 | puts(_("s\tchange number of sectors/track")); |
822 | puts(_("\tm\tprint this menu")); | 814 | puts(_("v\tverify the partition table")); |
823 | puts(_("\tp\tprint the partition table")); | 815 | puts(_("w\twrite table to disk and exit")); |
824 | puts(_("\tq\tquit without saving changes")); | 816 | } else if (LABEL_IS_AIX) { |
825 | puts(_("\tr\treturn to main menu")); | 817 | puts(_("b\tmove beginning of data in a partition")); /* !sun */ |
826 | puts(_("\ts\tchange number of sectors/track")); | 818 | puts(_("c\tchange number of cylinders")); |
827 | puts(_("\tv\tverify the partition table")); | 819 | puts(_("d\tprint the raw data in the partition table")); |
828 | puts(_("\tw\twrite table to disk and exit")); | 820 | puts(_("e\tlist extended partitions")); /* !sun */ |
829 | } else | 821 | puts(_("g\tcreate an IRIX (SGI) partition table"));/* sgi */ |
830 | if (LABEL_IS_AIX) { | 822 | puts(_("h\tchange number of heads")); |
831 | puts(_("Command action")); | 823 | puts(_("p\tprint the partition table")); |
832 | puts(_("\tb\tmove beginning of data in a partition")); /* !sun */ | 824 | puts(_("q\tquit without saving changes")); |
833 | puts(_("\tc\tchange number of cylinders")); | 825 | puts(_("r\treturn to main menu")); |
834 | puts(_("\td\tprint the raw data in the partition table")); | 826 | puts(_("s\tchange number of sectors/track")); |
835 | puts(_("\te\tlist extended partitions")); /* !sun */ | 827 | puts(_("v\tverify the partition table")); |
836 | puts(_("\tg\tcreate an IRIX (SGI) partition table"));/* sgi */ | 828 | puts(_("w\twrite table to disk and exit")); |
837 | puts(_("\th\tchange number of heads")); | 829 | } else { |
838 | puts(_("\tm\tprint this menu")); | 830 | puts(_("b\tmove beginning of data in a partition")); /* !sun */ |
839 | puts(_("\tp\tprint the partition table")); | 831 | puts(_("c\tchange number of cylinders")); |
840 | puts(_("\tq\tquit without saving changes")); | 832 | puts(_("d\tprint the raw data in the partition table")); |
841 | puts(_("\tr\treturn to main menu")); | 833 | puts(_("e\tlist extended partitions")); /* !sun */ |
842 | puts(_("\ts\tchange number of sectors/track")); | 834 | puts(_("f\tfix partition order")); /* !sun, !aix, !sgi */ |
843 | puts(_("\tv\tverify the partition table")); | ||
844 | puts(_("\tw\twrite table to disk and exit")); | ||
845 | } else { | ||
846 | puts(_("Command action")); | ||
847 | puts(_("\tb\tmove beginning of data in a partition")); /* !sun */ | ||
848 | puts(_("\tc\tchange number of cylinders")); | ||
849 | puts(_("\td\tprint the raw data in the partition table")); | ||
850 | puts(_("\te\tlist extended partitions")); /* !sun */ | ||
851 | puts(_("\tf\tfix partition order")); /* !sun, !aix, !sgi */ | ||
852 | #if ENABLE_FEATURE_SGI_LABEL | 835 | #if ENABLE_FEATURE_SGI_LABEL |
853 | puts(_("\tg\tcreate an IRIX (SGI) partition table"));/* sgi */ | 836 | puts(_("g\tcreate an IRIX (SGI) partition table"));/* sgi */ |
854 | #endif | 837 | #endif |
855 | puts(_("\th\tchange number of heads")); | 838 | puts(_("h\tchange number of heads")); |
856 | puts(_("\tm\tprint this menu")); | 839 | puts(_("p\tprint the partition table")); |
857 | puts(_("\tp\tprint the partition table")); | 840 | puts(_("q\tquit without saving changes")); |
858 | puts(_("\tq\tquit without saving changes")); | 841 | puts(_("r\treturn to main menu")); |
859 | puts(_("\tr\treturn to main menu")); | 842 | puts(_("s\tchange number of sectors/track")); |
860 | puts(_("\ts\tchange number of sectors/track")); | 843 | puts(_("v\tverify the partition table")); |
861 | puts(_("\tv\tverify the partition table")); | 844 | puts(_("w\twrite table to disk and exit")); |
862 | puts(_("\tw\twrite table to disk and exit")); | ||
863 | } | 845 | } |
864 | } | 846 | } |
865 | #endif /* ADVANCED mode */ | 847 | #endif /* ADVANCED mode */ |
@@ -883,7 +865,7 @@ static const char *partition_type(unsigned char type) | |||
883 | const struct systypes *types = get_sys_types(); | 865 | const struct systypes *types = get_sys_types(); |
884 | 866 | ||
885 | for (i = 0; types[i].name; i++) | 867 | for (i = 0; types[i].name; i++) |
886 | if ((unsigned char )types[i].name[0] == type) | 868 | if ((unsigned char)types[i].name[0] == type) |
887 | return types[i].name + 1; | 869 | return types[i].name + 1; |
888 | 870 | ||
889 | return _("Unknown"); | 871 | return _("Unknown"); |
@@ -899,24 +881,29 @@ get_sysid(int i) | |||
899 | ptes[i].part_table->sys_ind); | 881 | ptes[i].part_table->sys_ind); |
900 | } | 882 | } |
901 | 883 | ||
902 | void list_types(const struct systypes *sys) | 884 | static void list_types(const struct systypes *sys) |
903 | { | 885 | { |
904 | unsigned last[4], done = 0, next = 0, size; | 886 | enum { COLS = 3 }; |
887 | |||
888 | unsigned last[COLS]; | ||
889 | unsigned done, next, size; | ||
905 | int i; | 890 | int i; |
906 | 891 | ||
907 | for (i = 0; sys[i].name; i++); | 892 | for (size = 0; sys[size].name; size++) /* */; |
908 | size = i; | ||
909 | 893 | ||
910 | for (i = 3; i >= 0; i--) | 894 | done = 0; |
911 | last[3 - i] = done += (size + i - done) / (i + 1); | 895 | for (i = COLS-1; i >= 0; i--) { |
912 | i = done = 0; | 896 | done += (size + i - done) / (i + 1); |
897 | last[COLS-1 - i] = done; | ||
898 | } | ||
913 | 899 | ||
900 | i = done = next = 0; | ||
914 | do { | 901 | do { |
915 | printf("%c%2x %-15.15s", i ? ' ' : '\n', | 902 | printf("%c%2x %-22.22s", i ? ' ' : '\n', |
916 | (unsigned char)sys[next].name[0], | 903 | (unsigned char)sys[next].name[0], |
917 | partition_type((unsigned char)sys[next].name[0])); | 904 | sys[next].name + 1); |
918 | next = last[i++] + done; | 905 | next = last[i++] + done; |
919 | if (i > 3 || next >= last[i]) { | 906 | if (i >= COLS || next >= last[i]) { |
920 | i = 0; | 907 | i = 0; |
921 | next = ++done; | 908 | next = ++done; |
922 | } | 909 | } |
@@ -2415,10 +2402,12 @@ new_partition(void) | |||
2415 | "an extended partition first\n")); | 2402 | "an extended partition first\n")); |
2416 | } else { | 2403 | } else { |
2417 | char c, line[LINE_LENGTH]; | 2404 | char c, line[LINE_LENGTH]; |
2418 | snprintf(line, sizeof(line), "%s\n %s\n p primary " | 2405 | snprintf(line, sizeof(line), |
2419 | "partition (1-4)\n", | 2406 | "Command action\n" |
2420 | "Command action", (extended_offset ? | 2407 | " %s\n" |
2421 | "l logical (5 or over)" : "e extended")); | 2408 | " p primary partition (1-4)\n", |
2409 | (extended_offset ? | ||
2410 | "l logical (5 or over)" : "e extended")); | ||
2422 | while (1) { | 2411 | while (1) { |
2423 | c = read_nonempty(line); | 2412 | c = read_nonempty(line); |
2424 | if (c == 'p' || c == 'P') { | 2413 | if (c == 'p' || c == 'P') { |
diff --git a/util-linux/fdisk_osf.c b/util-linux/fdisk_osf.c index 16a046ea3..3f56bd27d 100644 --- a/util-linux/fdisk_osf.c +++ b/util-linux/fdisk_osf.c | |||
@@ -308,22 +308,21 @@ bsd_trydev(const char * dev) | |||
308 | static void | 308 | static void |
309 | bsd_menu(void) | 309 | bsd_menu(void) |
310 | { | 310 | { |
311 | puts(_("Command action")); | 311 | puts(_("Command Action")); |
312 | puts(_("\td\tdelete a BSD partition")); | 312 | puts(_("d\tdelete a BSD partition")); |
313 | puts(_("\te\tedit drive data")); | 313 | puts(_("e\tedit drive data")); |
314 | puts(_("\ti\tinstall bootstrap")); | 314 | puts(_("i\tinstall bootstrap")); |
315 | puts(_("\tl\tlist known filesystem types")); | 315 | puts(_("l\tlist known filesystem types")); |
316 | puts(_("\tm\tprint this menu")); | 316 | puts(_("n\tadd a new BSD partition")); |
317 | puts(_("\tn\tadd a new BSD partition")); | 317 | puts(_("p\tprint BSD partition table")); |
318 | puts(_("\tp\tprint BSD partition table")); | 318 | puts(_("q\tquit without saving changes")); |
319 | puts(_("\tq\tquit without saving changes")); | 319 | puts(_("r\treturn to main menu")); |
320 | puts(_("\tr\treturn to main menu")); | 320 | puts(_("s\tshow complete disklabel")); |
321 | puts(_("\ts\tshow complete disklabel")); | 321 | puts(_("t\tchange a partition's filesystem id")); |
322 | puts(_("\tt\tchange a partition's filesystem id")); | 322 | puts(_("u\tchange units (cylinders/sectors)")); |
323 | puts(_("\tu\tchange units (cylinders/sectors)")); | 323 | puts(_("w\twrite disklabel to disk")); |
324 | puts(_("\tw\twrite disklabel to disk")); | ||
325 | #if !defined(__alpha__) | 324 | #if !defined(__alpha__) |
326 | puts(_("\tx\tlink BSD partition to non-BSD partition")); | 325 | puts(_("x\tlink BSD partition to non-BSD partition")); |
327 | #endif | 326 | #endif |
328 | } | 327 | } |
329 | 328 | ||
@@ -633,13 +632,15 @@ xbsd_create_disklabel(void) | |||
633 | static int | 632 | static int |
634 | edit_int(int def, char *mesg) | 633 | edit_int(int def, char *mesg) |
635 | { | 634 | { |
635 | mesg = xasprintf("%s (%d): ", mesg, def); | ||
636 | do { | 636 | do { |
637 | fputs(mesg, stdout); | 637 | if (!read_line(mesg)) |
638 | printf(" (%d): ", def); | 638 | goto ret; |
639 | if (!read_line()) | ||
640 | return def; | ||
641 | } while (!isdigit(*line_ptr)); | 639 | } while (!isdigit(*line_ptr)); |
642 | return atoi(line_ptr); | 640 | def = atoi(line_ptr); |
641 | ret: | ||
642 | free(mesg); | ||
643 | return def; | ||
643 | } | 644 | } |
644 | 645 | ||
645 | static void | 646 | static void |
@@ -718,10 +719,9 @@ xbsd_write_bootstrap(void) | |||
718 | else | 719 | else |
719 | dkbasename = "wd"; | 720 | dkbasename = "wd"; |
720 | 721 | ||
721 | printf(_("Bootstrap: %sboot -> boot%s (%s): "), | 722 | snprintf(path, sizeof(path), "Bootstrap: %sboot -> boot%s (%s): ", |
722 | dkbasename, dkbasename, dkbasename); | 723 | dkbasename, dkbasename, dkbasename); |
723 | if (read_line()) { | 724 | if (read_line(path)) { |
724 | line_ptr[strlen(line_ptr)-1] = '\0'; | ||
725 | dkbasename = line_ptr; | 725 | dkbasename = line_ptr; |
726 | } | 726 | } |
727 | snprintf(path, sizeof(path), "%s/%sboot", bootdir, dkbasename); | 727 | snprintf(path, sizeof(path), "%s/%sboot", bootdir, dkbasename); |