summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--util-linux/losetup.c32
1 files changed, 22 insertions, 10 deletions
diff --git a/util-linux/losetup.c b/util-linux/losetup.c
index bf480e9..2248f2c 100644
--- a/util-linux/losetup.c
+++ b/util-linux/losetup.c
@@ -20,10 +20,11 @@
//kbuild:lib-$(CONFIG_LOSETUP) += losetup.o
//usage:#define losetup_trivial_usage
-//usage: "[-r] [-o OFS] {-f|LOOPDEV} FILE - associate loop devices\n"
-//usage: " losetup -d LOOPDEV - disassociate\n"
-//usage: " losetup -a - show status\n"
-//usage: " losetup -f - show next free loop device"
+//usage: "[-r] [-o OFS] {-f|LOOPDEV} FILE: associate loop devices\n"
+//usage: " losetup -c LOOPDEV: reread file size\n"
+//usage: " losetup -d LOOPDEV: disassociate\n"
+//usage: " losetup -a: show status\n"
+//usage: " losetup -f: show next free loop device"
//usage:#define losetup_full_usage "\n\n"
//usage: " -o OFS Start OFS bytes into FILE"
//usage: "\n -r Read-only"
@@ -50,14 +51,15 @@ int losetup_main(int argc UNUSED_PARAM, char **argv)
char *opt_o;
char dev[LOOP_NAMESIZE];
enum {
- OPT_d = (1 << 0),
- OPT_o = (1 << 1),
- OPT_f = (1 << 2),
- OPT_a = (1 << 3),
- OPT_r = (1 << 4), /* must be last */
+ OPT_c = (1 << 0),
+ OPT_d = (1 << 1),
+ OPT_o = (1 << 2),
+ OPT_f = (1 << 3),
+ OPT_a = (1 << 4),
+ OPT_r = (1 << 5),
};
- opt = getopt32(argv, "^" "do:far" "\0" "?2:d--ofar:a--ofr", &opt_o);
+ opt = getopt32(argv, "^" "cdo:far" "\0" "?2:d--ofar:a--ofr", &opt_o);
argv += optind;
/* LOOPDEV */
@@ -73,6 +75,16 @@ int losetup_main(int argc UNUSED_PARAM, char **argv)
return EXIT_SUCCESS;
}
+ /* -c LOOPDEV */
+ if (opt == OPT_c && argv[0]) {
+ int fd = xopen(argv[0], O_RDONLY);
+#ifndef LOOP_SET_CAPACITY
+# define LOOP_SET_CAPACITY 0x4C07
+#endif
+ xioctl(fd, LOOP_SET_CAPACITY, /*ignored:*/0);
+ return EXIT_SUCCESS;
+ }
+
/* -d LOOPDEV */
if (opt == OPT_d && argv[0]) {
if (del_loop(argv[0]))