From f303bdd918e762f492068f3127b2f7fdac94bd28 Mon Sep 17 00:00:00 2001 From: Dan Fandrich Date: Sun, 20 Feb 2011 04:15:43 +0100 Subject: blockdev: add --getsz to replace --getsize function old new delta blockdev_main 255 273 +18 bdcommands 160 176 +16 packed_usage 28142 28107 -35 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 34/-35) Total: -1 bytes Signed-off-by: Dan Fandrich Signed-off-by: Denys Vlasenko --- util-linux/blockdev.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'util-linux/blockdev.c') diff --git a/util-linux/blockdev.c b/util-linux/blockdev.c index c2fcaee88..4aed02982 100644 --- a/util-linux/blockdev.c +++ b/util-linux/blockdev.c @@ -26,7 +26,8 @@ //usage: "\n --getss Get sector size" //usage: "\n --getbsz Get block size" //usage: "\n --setbsz BYTES Set block size" -//usage: "\n --getsize Get device size in 512-byte sectors" +//usage: "\n --getsz Get device size in 512-byte sectors" +/*//usage: "\n --getsize Get device size in sectors (deprecated)"*/ //usage: "\n --getsize64 Get device size in bytes" //usage: "\n --flushbufs Flush buffers" //usage: "\n --rereadpt Reread partition table" @@ -45,6 +46,7 @@ enum { FL_USRARG = 4, /* argument is provided by user */ FL_NORESULT = 8, + FL_SCALE512 = 16, }; struct bdc { @@ -85,6 +87,11 @@ static const struct bdc bdcommands[] = { .name = "setbsz", .flags = ARG_INT + FL_NORESULT + FL_USRARG, .argval = 0, + },{ + .ioc = BLKGETSIZE64, + .name = "getsz", + .flags = ARG_U64 + FL_SCALE512, + .argval = -1, },{ .ioc = BLKGETSIZE, .name = "getsize", @@ -123,7 +130,7 @@ static const struct bdc *find_cmd(const char *s) } int blockdev_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; -int blockdev_main(int argc, char **argv) +int blockdev_main(int argc UNUSED_PARAM, char **argv) { const struct bdc *bdcmd; int fd; @@ -134,18 +141,20 @@ int blockdev_main(int argc, char **argv) uint64_t u64; } ioctl_val_on_stack; - if ((unsigned)(argc - 3) > 1) /* must have 2 or 3 args */ + argv++; + if (!argv[0] || !argv[1]) /* must have at least 2 args */ bb_show_usage(); - bdcmd = find_cmd(*++argv); + bdcmd = find_cmd(*argv); u64 = (int)bdcmd->argval; if (bdcmd->flags & FL_USRARG) u64 = xatoi_positive(*++argv); - if (!*++argv || argv[1]) + argv++; + if (!argv[0] || argv[1]) bb_show_usage(); - fd = xopen(*argv, O_RDONLY); + fd = xopen(argv[0], O_RDONLY); ioctl_val_on_stack.u64 = u64; #if BB_BIG_ENDIAN @@ -173,6 +182,9 @@ int blockdev_main(int argc, char **argv) /* Fetch it into register(s) */ u64 = ioctl_val_on_stack.u64; + if (bdcmd->flags & FL_SCALE512) + u64 >>= 9; + /* Zero- or one-extend the value if needed, then print */ switch (bdcmd->flags & (ARG_MASK+FL_NORESULT)) { case ARG_INT: -- cgit v1.2.3