diff options
author | Dan Fandrich <dan@coneharvesters.com> | 2011-02-20 04:15:43 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2011-02-20 04:15:43 +0100 |
commit | f303bdd918e762f492068f3127b2f7fdac94bd28 (patch) | |
tree | 167b3f86c0c845ff50aacb8a069122bc1479e446 | |
parent | 5369563bf9b9b5406714a65f9199aaa0b6b53fef (diff) | |
download | busybox-w32-f303bdd918e762f492068f3127b2f7fdac94bd28.tar.gz busybox-w32-f303bdd918e762f492068f3127b2f7fdac94bd28.tar.bz2 busybox-w32-f303bdd918e762f492068f3127b2f7fdac94bd28.zip |
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 <dan@coneharvesters.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | util-linux/blockdev.c | 24 |
1 files changed, 18 insertions, 6 deletions
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 @@ | |||
26 | //usage: "\n --getss Get sector size" | 26 | //usage: "\n --getss Get sector size" |
27 | //usage: "\n --getbsz Get block size" | 27 | //usage: "\n --getbsz Get block size" |
28 | //usage: "\n --setbsz BYTES Set block size" | 28 | //usage: "\n --setbsz BYTES Set block size" |
29 | //usage: "\n --getsize Get device size in 512-byte sectors" | 29 | //usage: "\n --getsz Get device size in 512-byte sectors" |
30 | /*//usage: "\n --getsize Get device size in sectors (deprecated)"*/ | ||
30 | //usage: "\n --getsize64 Get device size in bytes" | 31 | //usage: "\n --getsize64 Get device size in bytes" |
31 | //usage: "\n --flushbufs Flush buffers" | 32 | //usage: "\n --flushbufs Flush buffers" |
32 | //usage: "\n --rereadpt Reread partition table" | 33 | //usage: "\n --rereadpt Reread partition table" |
@@ -45,6 +46,7 @@ enum { | |||
45 | 46 | ||
46 | FL_USRARG = 4, /* argument is provided by user */ | 47 | FL_USRARG = 4, /* argument is provided by user */ |
47 | FL_NORESULT = 8, | 48 | FL_NORESULT = 8, |
49 | FL_SCALE512 = 16, | ||
48 | }; | 50 | }; |
49 | 51 | ||
50 | struct bdc { | 52 | struct bdc { |
@@ -86,6 +88,11 @@ static const struct bdc bdcommands[] = { | |||
86 | .flags = ARG_INT + FL_NORESULT + FL_USRARG, | 88 | .flags = ARG_INT + FL_NORESULT + FL_USRARG, |
87 | .argval = 0, | 89 | .argval = 0, |
88 | },{ | 90 | },{ |
91 | .ioc = BLKGETSIZE64, | ||
92 | .name = "getsz", | ||
93 | .flags = ARG_U64 + FL_SCALE512, | ||
94 | .argval = -1, | ||
95 | },{ | ||
89 | .ioc = BLKGETSIZE, | 96 | .ioc = BLKGETSIZE, |
90 | .name = "getsize", | 97 | .name = "getsize", |
91 | .flags = ARG_ULONG, | 98 | .flags = ARG_ULONG, |
@@ -123,7 +130,7 @@ static const struct bdc *find_cmd(const char *s) | |||
123 | } | 130 | } |
124 | 131 | ||
125 | int blockdev_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 132 | int blockdev_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
126 | int blockdev_main(int argc, char **argv) | 133 | int blockdev_main(int argc UNUSED_PARAM, char **argv) |
127 | { | 134 | { |
128 | const struct bdc *bdcmd; | 135 | const struct bdc *bdcmd; |
129 | int fd; | 136 | int fd; |
@@ -134,18 +141,20 @@ int blockdev_main(int argc, char **argv) | |||
134 | uint64_t u64; | 141 | uint64_t u64; |
135 | } ioctl_val_on_stack; | 142 | } ioctl_val_on_stack; |
136 | 143 | ||
137 | if ((unsigned)(argc - 3) > 1) /* must have 2 or 3 args */ | 144 | argv++; |
145 | if (!argv[0] || !argv[1]) /* must have at least 2 args */ | ||
138 | bb_show_usage(); | 146 | bb_show_usage(); |
139 | 147 | ||
140 | bdcmd = find_cmd(*++argv); | 148 | bdcmd = find_cmd(*argv); |
141 | 149 | ||
142 | u64 = (int)bdcmd->argval; | 150 | u64 = (int)bdcmd->argval; |
143 | if (bdcmd->flags & FL_USRARG) | 151 | if (bdcmd->flags & FL_USRARG) |
144 | u64 = xatoi_positive(*++argv); | 152 | u64 = xatoi_positive(*++argv); |
145 | 153 | ||
146 | if (!*++argv || argv[1]) | 154 | argv++; |
155 | if (!argv[0] || argv[1]) | ||
147 | bb_show_usage(); | 156 | bb_show_usage(); |
148 | fd = xopen(*argv, O_RDONLY); | 157 | fd = xopen(argv[0], O_RDONLY); |
149 | 158 | ||
150 | ioctl_val_on_stack.u64 = u64; | 159 | ioctl_val_on_stack.u64 = u64; |
151 | #if BB_BIG_ENDIAN | 160 | #if BB_BIG_ENDIAN |
@@ -173,6 +182,9 @@ int blockdev_main(int argc, char **argv) | |||
173 | /* Fetch it into register(s) */ | 182 | /* Fetch it into register(s) */ |
174 | u64 = ioctl_val_on_stack.u64; | 183 | u64 = ioctl_val_on_stack.u64; |
175 | 184 | ||
185 | if (bdcmd->flags & FL_SCALE512) | ||
186 | u64 >>= 9; | ||
187 | |||
176 | /* Zero- or one-extend the value if needed, then print */ | 188 | /* Zero- or one-extend the value if needed, then print */ |
177 | switch (bdcmd->flags & (ARG_MASK+FL_NORESULT)) { | 189 | switch (bdcmd->flags & (ARG_MASK+FL_NORESULT)) { |
178 | case ARG_INT: | 190 | case ARG_INT: |