diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2011-09-12 02:13:47 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2011-09-12 08:30:16 +0200 |
commit | 13e709c53f700a18a660feebdf72c613a233bf48 (patch) | |
tree | 248b913b7bb6629b751bbd5a79a7e3c6b55dd1af /util-linux | |
parent | dd1061b6a79b0161597799e825bfefc27993ace5 (diff) | |
download | busybox-13e709c53f700a18a660feebdf72c613a233bf48.tar.gz |
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>
Diffstat (limited to 'util-linux')
-rw-r--r-- | util-linux/losetup.c | 16 | ||||
-rw-r--r-- | util-linux/mount.c | 2 |
2 files changed, 10 insertions, 8 deletions
diff --git a/util-linux/losetup.c b/util-linux/losetup.c index 9b7c49f50..21108d0bf 100644 --- a/util-linux/losetup.c +++ b/util-linux/losetup.c @@ -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; diff --git a/util-linux/mount.c b/util-linux/mount.c index 05e532cda..b51ab1782 100644 --- a/util-linux/mount.c +++ b/util-linux/mount.c @@ -1809,7 +1809,7 @@ static int singlemount(struct mntent *mp, int ignore_busy) if (ENABLE_FEATURE_MOUNT_LOOP && S_ISREG(st.st_mode)) { loopFile = bb_simplify_path(mp->mnt_fsname); mp->mnt_fsname = NULL; // will receive malloced loop dev name - if (set_loop(&mp->mnt_fsname, loopFile, 0) < 0) { + if (set_loop(&mp->mnt_fsname, loopFile, 0, /*ro:*/ 0) < 0) { if (errno == EPERM || errno == EACCES) bb_error_msg(bb_msg_perm_denied_are_you_root); else |