bc: convert to "G trick" - this returns bc to zero bss increase
[oweals/busybox.git] / util-linux / losetup.c
index 4424d9cbba1bedf59891d59b0f5752f90a9e2895..6b171d7102d068e927903398c4a8b125f1eb16b5 100644 (file)
@@ -7,17 +7,17 @@
  * Licensed under GPLv2 or later, see file LICENSE in this source tree.
  */
 //config:config LOSETUP
-//config:      bool "losetup"
+//config:      bool "losetup (5.4 kb)"
 //config:      default y
 //config:      select PLATFORM_LINUX
 //config:      help
-//config:        losetup is used to associate or detach a loop device with a regular
-//config:        file or block device, and to query the status of a loop device. This
-//config:        version does not currently support enabling data encryption.
+//config:      losetup is used to associate or detach a loop device with a regular
+//config:      file or block device, and to query the status of a loop device. This
+//config:      version does not currently support enabling data encryption.
 
-//kbuild:lib-$(CONFIG_LOSETUP) += losetup.o
+//applet:IF_LOSETUP(APPLET_NOEXEC(losetup, losetup, BB_DIR_SBIN, BB_SUID_DROP, losetup))
 
-//applet:IF_LOSETUP(APPLET(losetup, BB_DIR_SBIN, BB_SUID_DROP))
+//kbuild:lib-$(CONFIG_LOSETUP) += losetup.o
 
 //usage:#define losetup_trivial_usage
 //usage:       "[-r] [-o OFS] {-f|LOOPDEV} FILE - associate loop devices\n"
@@ -57,8 +57,7 @@ int losetup_main(int argc UNUSED_PARAM, char **argv)
                OPT_r = (1 << 4), /* must be last */
        };
 
-       opt_complementary = "?2:d--ofar:a--ofr";
-       opt = getopt32(argv, "do:far", &opt_o);
+       opt = getopt32(argv, "^" "do:far" "\0" "?2:d--ofar:a--ofr", &opt_o);
        argv += optind;
 
        /* LOOPDEV */
@@ -127,12 +126,37 @@ int losetup_main(int argc UNUSED_PARAM, char **argv)
                        d = *argv++;
 
                if (argv[0]) {
-                       if (set_loop(&d, argv[0], offset, (opt & OPT_r)) < 0)
+                       if (set_loop(&d, argv[0], offset, (opt & OPT_r) ? BB_LO_FLAGS_READ_ONLY : 0) < 0)
                                bb_simple_perror_msg_and_die(argv[0]);
                        return EXIT_SUCCESS;
                }
        }
 
+       /* TODO: util-linux 2.28 shows this when run w/o params:
+        * NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE     DIO
+        * /dev/loop0         0      0         1  0 /PATH/TO/FILE   0
+        *
+        * implemented by reading /sys:
+        *
+        * open("/sys/block", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
+        * newfstatat(3, "loop0/loop/backing_file", {st_mode=S_IFREG|0444, st_size=4096, ...}, 0) = 0
+        * stat("/dev/loop0", {st_mode=S_IFBLK|0660, st_rdev=makedev(7, 0), ...}) = 0
+        * open("/sys/dev/block/7:0/loop/offset", O_RDONLY|O_CLOEXEC) = 5
+        * read(5, "0\n", 4096)                    = 2
+        * open("/sys/dev/block/7:0/loop/sizelimit", O_RDONLY|O_CLOEXEC) = 5
+        * read(5, "0\n", 4096)                    = 2
+        * open("/sys/dev/block/7:0/loop/offset", O_RDONLY|O_CLOEXEC) = 5
+        * read(5, "0\n", 4096)                    = 2
+        * open("/sys/dev/block/7:0/loop/autoclear", O_RDONLY|O_CLOEXEC) = 5
+        * read(5, "1\n", 4096)                    = 2
+        * open("/sys/dev/block/7:0/ro", O_RDONLY|O_CLOEXEC)     = 5
+        * read(5, "0\n", 4096)                    = 2
+        * open("/sys/dev/block/7:0/loop/backing_file", O_RDONLY|O_CLOEXEC) = 5
+        * read(5, "/PATH/TO/FILE", 4096) = 37
+        * open("/sys/dev/block/7:0/loop/dio", O_RDONLY|O_CLOEXEC) = 5
+        * read(5, "0\n", 4096)                    = 2
+        */
+
        bb_show_usage(); /* does not return */
        /*return EXIT_FAILURE;*/
 }