summaryrefslogtreecommitdiff
path: root/util-linux
diff options
context:
space:
mode:
authorDenys Vlasenko2011-09-12 02:13:47 +0200
committerDenys Vlasenko2011-09-12 08:30:16 +0200
commit13e709c53f700a18a660feebdf72c613a233bf48 (patch)
tree248b913b7bb6629b751bbd5a79a7e3c6b55dd1af /util-linux
parentdd1061b6a79b0161597799e825bfefc27993ace5 (diff)
downloadbusybox-13e709c53f700a18a660feebdf72c613a233bf48.zip
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.c16
-rw-r--r--util-linux/mount.c2
2 files changed, 10 insertions, 8 deletions
diff --git a/util-linux/losetup.c b/util-linux/losetup.c
index 9b7c49f..21108d0 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 05e532c..b51ab17 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