losetup: implement -r option. Closes 4033.

function                                             old     new   delta
packed_usage                                       28595   28633     +38
losetup_main                                         285     290      +5
singlemount                                          906     908      +2
set_loop                                             674     672      -2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2011-09-12 02:13:47 +02:00
parent dd1061b6a7
commit 13e709c53f
4 changed files with 17 additions and 13 deletions

View File

@@ -8,11 +8,12 @@
*/
//usage:#define losetup_trivial_usage
//usage: "[-o OFS] LOOPDEV FILE - associate loop devices\n"
//usage: "[-r] [-o OFS] LOOPDEV FILE - associate loop devices\n"
//usage: " losetup -d LOOPDEV - disassociate\n"
//usage: " losetup [-f] - show"
//usage:#define losetup_full_usage "\n\n"
//usage: " -o OFS Start OFS bytes into FILE"
//usage: "\n -r Read-only"
//usage: "\n -f Show first free loop device"
//usage:
//usage:#define losetup_notes_usage
@@ -37,11 +38,12 @@ int losetup_main(int argc UNUSED_PARAM, char **argv)
OPT_d = (1 << 0),
OPT_o = (1 << 1),
OPT_f = (1 << 2),
OPT_r = (1 << 3), /* must be last */
};
/* max 2 args, all opts are mutually exclusive */
/* max 2 args, -d,-o,-f opts are mutually exclusive */
opt_complementary = "?2:d--of:o--df:f--do";
opt = getopt32(argv, "do:f", &opt_o);
opt = getopt32(argv, "do:fr", &opt_o);
argv += optind;
if (opt == OPT_o)
@@ -63,12 +65,12 @@ int losetup_main(int argc UNUSED_PARAM, char **argv)
bb_show_usage();
if (argv[1]) {
/* [-o OFS] BLOCKDEV FILE */
if (set_loop(&argv[0], argv[1], offset) < 0)
/* [-r] [-o OFS] BLOCKDEV FILE */
if (set_loop(&argv[0], argv[1], offset, (opt / OPT_r)) < 0)
bb_simple_perror_msg_and_die(argv[0]);
return EXIT_SUCCESS;
}
/* [-o OFS] BLOCKDEV */
/* [-r] [-o OFS] BLOCKDEV */
s = query_loop(argv[0]);
if (!s)
bb_simple_perror_msg_and_die(argv[0]);
@@ -78,7 +80,7 @@ int losetup_main(int argc UNUSED_PARAM, char **argv)
return EXIT_SUCCESS;
}
/* [-o OFS|-f] with no params */
/* [-r] [-o OFS|-f] with no params */
n = 0;
while (1) {
char *s;