mirror of
https://git.busybox.net/busybox
synced 2026-02-15 22:16:09 +00:00
fdisk: uncomment -s support
function old new delta bb_BLKGETSIZE_sectors - 191 +191 fdisk_main 4674 4774 +100 packed_usage 35941 35997 +56 .rodata 107069 107089 +20 get_geometry 665 511 -154 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 3/1 up/down: 367/-154) Total: 213 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
705c9b3487
commit
4855fbe6a8
1 changed files with 48 additions and 48 deletions
|
|
@ -22,6 +22,11 @@
|
|||
//config: depends on FDISK
|
||||
//config: depends on !LFS # with LFS no special code is needed
|
||||
//config:
|
||||
//config:config FEATURE_FDISK_BLKSIZE
|
||||
//config: bool "Support -s option to list sizes"
|
||||
//config: default y
|
||||
//config: depends on FDISK
|
||||
//config:
|
||||
//config:config FEATURE_FDISK_WRITABLE
|
||||
//config: bool "Write support"
|
||||
//config: default y
|
||||
|
|
@ -85,12 +90,6 @@
|
|||
|
||||
//kbuild:lib-$(CONFIG_FDISK) += fdisk.o
|
||||
|
||||
/* Looks like someone forgot to add this to config system */
|
||||
//usage:#ifndef ENABLE_FEATURE_FDISK_BLKSIZE
|
||||
//usage:# define ENABLE_FEATURE_FDISK_BLKSIZE 0
|
||||
//usage:# define IF_FEATURE_FDISK_BLKSIZE(a)
|
||||
//usage:#endif
|
||||
//usage:
|
||||
//usage:#define fdisk_trivial_usage
|
||||
//usage: "[-ul" IF_FEATURE_FDISK_BLKSIZE("s") "] "
|
||||
//usage: "[-C CYLINDERS] [-H HEADS] [-S SECTORS] [-b SSZ] DISK"
|
||||
|
|
@ -99,7 +98,9 @@
|
|||
//usage: "\n -u Start and End are in sectors (instead of cylinders)"
|
||||
//usage: "\n -l Show partition table for each DISK, then exit"
|
||||
//usage: IF_FEATURE_FDISK_BLKSIZE(
|
||||
//usage: "\n -s Show partition sizes in kb for each DISK, then exit"
|
||||
//usage: "\n -s Show sizes in kb for each DISK, then exit"
|
||||
//NB: util-linux 2.41.1 says: "-s,--getsz: display device size in 512-byte sectors"
|
||||
//but in fact, util-linux 2.41.1 shows the size in KILOBYTES!
|
||||
//usage: )
|
||||
//usage: "\n -b 2048 (for certain MO disks) use 2048-byte sectors"
|
||||
//usage: "\n -C CYLINDERS Set number of cylinders/heads/sectors"
|
||||
|
|
@ -127,13 +128,6 @@
|
|||
# define inline_if_little_endian /* nothing */
|
||||
#endif
|
||||
|
||||
|
||||
/* Looks like someone forgot to add this to config system */
|
||||
#ifndef ENABLE_FEATURE_FDISK_BLKSIZE
|
||||
# define ENABLE_FEATURE_FDISK_BLKSIZE 0
|
||||
# define IF_FEATURE_FDISK_BLKSIZE(a)
|
||||
#endif
|
||||
|
||||
#define DEFAULT_SECTOR_SIZE 512
|
||||
#define DEFAULT_SECTOR_SIZE_STR "512"
|
||||
#define MAX_SECTOR_SIZE 2048
|
||||
|
|
@ -527,6 +521,7 @@ static sector_t bb_BLKGETSIZE_sectors(int fd)
|
|||
if (ioctl(fd, BLKGETSIZE64, &v64) == 0) {
|
||||
/* Got bytes, convert to 512 byte sectors */
|
||||
v64 >>= 9;
|
||||
//FIXME: should be "v64 /= sector_size" instead?
|
||||
if (v64 != (sector_t)v64) {
|
||||
ret_trunc:
|
||||
/* Not only DOS, but all other partition tables
|
||||
|
|
@ -534,12 +529,12 @@ static sector_t bb_BLKGETSIZE_sectors(int fd)
|
|||
* sector counts or offsets
|
||||
*/
|
||||
bb_simple_error_msg("device has more than 2^32 sectors, can't use all of them");
|
||||
v64 = (uint32_t)-1L;
|
||||
v64 = (sector_t)-1L;
|
||||
}
|
||||
return v64;
|
||||
}
|
||||
/* Needs temp of type long */
|
||||
if (ioctl(fd, BLKGETSIZE, &longsectors)) {
|
||||
if (ioctl(fd, BLKGETSIZE, &longsectors) != 0) {
|
||||
/* Perhaps this is a disk image */
|
||||
off_t sz = lseek(fd, 0, SEEK_END);
|
||||
longsectors = 0;
|
||||
|
|
@ -3062,9 +3057,37 @@ int fdisk_main(int argc UNUSED_PARAM, char **argv)
|
|||
|
||||
close_dev_fd(); /* needed: fd 3 must not stay closed */
|
||||
|
||||
opt = getopt32(argv, "b:+C:+H:+lS:+u" IF_FEATURE_FDISK_BLKSIZE("s"),
|
||||
§or_size, &user_cylinders, &user_heads, &user_sectors);
|
||||
opt = getopt32(argv, "^" "b:+C:+H:+lS:+u"IF_FEATURE_FDISK_BLKSIZE("s")"\0"
|
||||
/* among -s and -l, the last one takes preference */
|
||||
IF_FEATURE_FDISK_BLKSIZE("s-l:l-s"),
|
||||
§or_size, &user_cylinders, &user_heads, &user_sectors);
|
||||
argv += optind;
|
||||
|
||||
#if ENABLE_FEATURE_FDISK_BLKSIZE
|
||||
/* -s ignores -b SECTSIZE, has to be before OPT_b check */
|
||||
if (opt & OPT_s) {
|
||||
int j;
|
||||
|
||||
sector_size = 512;
|
||||
nowarn = 1;
|
||||
if (!argv[0])
|
||||
bb_show_usage();
|
||||
for (j = 0; argv[j]; j++) {
|
||||
unsigned long long size;
|
||||
int fd = xopen(argv[j], O_RDONLY);
|
||||
size = bb_BLKGETSIZE_sectors(fd) / 2;
|
||||
//NB: util-linux 2.41.1 says: "-s,--getsz: display device size in 512-byte sectors"
|
||||
//but in fact, util-linux 2.41.1 shows the size in KILOBYTES!
|
||||
close(fd);
|
||||
if (!argv[1])
|
||||
printf("%llu\n", size);
|
||||
else
|
||||
printf("%s: %llu\n", argv[j], size);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (opt & OPT_b) {
|
||||
/* Ugly: this sector size is really per device,
|
||||
* so cannot be combined with multiple disks,
|
||||
|
|
@ -3084,7 +3107,7 @@ int fdisk_main(int argc UNUSED_PARAM, char **argv)
|
|||
if (user_sectors <= 0 || user_sectors >= 64)
|
||||
user_sectors = 0;
|
||||
if (opt & OPT_u)
|
||||
display_in_cyl_units = 0; // -u
|
||||
display_in_cyl_units = 0;
|
||||
|
||||
#if ENABLE_FEATURE_FDISK_WRITABLE
|
||||
if (opt & OPT_l) {
|
||||
|
|
@ -3103,30 +3126,7 @@ int fdisk_main(int argc UNUSED_PARAM, char **argv)
|
|||
return 0;
|
||||
#if ENABLE_FEATURE_FDISK_WRITABLE
|
||||
}
|
||||
#endif
|
||||
|
||||
#if ENABLE_FEATURE_FDISK_BLKSIZE
|
||||
if (opt & OPT_s) {
|
||||
int j;
|
||||
|
||||
nowarn = 1;
|
||||
if (!argv[0])
|
||||
bb_show_usage();
|
||||
for (j = 0; argv[j]; j++) {
|
||||
unsigned long long size;
|
||||
fd = xopen(argv[j], O_RDONLY);
|
||||
size = bb_BLKGETSIZE_sectors(fd) / 2;
|
||||
close(fd);
|
||||
if (argv[1])
|
||||
printf("%llu\n", size);
|
||||
else
|
||||
printf("%s: %llu\n", argv[j], size);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if ENABLE_FEATURE_FDISK_WRITABLE
|
||||
if (!argv[0] || argv[1])
|
||||
bb_show_usage();
|
||||
|
||||
|
|
@ -3170,10 +3170,10 @@ int fdisk_main(int argc UNUSED_PARAM, char **argv)
|
|||
else
|
||||
sgi_set_bootfile(line_ptr);
|
||||
}
|
||||
#if ENABLE_FEATURE_OSF_LABEL
|
||||
# if ENABLE_FEATURE_OSF_LABEL
|
||||
else
|
||||
bsd_select();
|
||||
#endif
|
||||
# endif
|
||||
break;
|
||||
case 'c':
|
||||
if (LABEL_IS_DOS)
|
||||
|
|
@ -3229,9 +3229,9 @@ int fdisk_main(int argc UNUSED_PARAM, char **argv)
|
|||
bb_putchar('\n');
|
||||
return 0;
|
||||
case 's':
|
||||
#if ENABLE_FEATURE_SUN_LABEL
|
||||
# if ENABLE_FEATURE_SUN_LABEL
|
||||
create_sunlabel();
|
||||
#endif
|
||||
# endif
|
||||
break;
|
||||
case 't':
|
||||
change_sysid();
|
||||
|
|
@ -3245,7 +3245,7 @@ int fdisk_main(int argc UNUSED_PARAM, char **argv)
|
|||
case 'w':
|
||||
write_table(); /* does not return */
|
||||
break;
|
||||
#if ENABLE_FEATURE_FDISK_ADVANCED
|
||||
# if ENABLE_FEATURE_FDISK_ADVANCED
|
||||
case 'x':
|
||||
if (LABEL_IS_SGI) {
|
||||
puts("\n\tSorry, no experts menu for SGI "
|
||||
|
|
@ -3253,7 +3253,7 @@ int fdisk_main(int argc UNUSED_PARAM, char **argv)
|
|||
} else
|
||||
xselect();
|
||||
break;
|
||||
#endif
|
||||
# endif
|
||||
default:
|
||||
unknown_command(c);
|
||||
menu();
|
||||
|
|
|
|||
Loading…
Reference in a new issue