On Wed, Mar 6, 2013 at 12:39 PM, Bernhard Reutner-Fischer <[email protected]> wrote: > On 5 March 2013 01:33:12 Mandeep Singh Baines <[email protected]> wrote: >> >> Added -a support. Also made sure -f works as follows: >> >> losetup [-r] [-o offset] {-f|loopdev} file >> >> Removed support for 'losetup -r' with no arguments. > > > What is the scripts/bloat-o-meter output for this patch? > Thanks,
Neat. I didn't even know about this tool. On ARM A15: $ scripts/bloat-o-meter busybox.orig busybox.new function old new delta .rodata 126857 126853 -4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-4) Total: -4 bytes Regards, Mandeep >> >> >> Signed-off-by: Mandeep Singh Baines <[email protected]> >> --- >> util-linux/losetup.c | 116 >> +++++++++++++++++++++++++++++---------------------- >> 1 file changed, 65 insertions(+), 51 deletions(-) >> >> diff --git a/util-linux/losetup.c b/util-linux/losetup.c >> index 21108d0..c697633 100644 >> --- a/util-linux/losetup.c >> +++ b/util-linux/losetup.c >> @@ -8,16 +8,16 @@ >> */ >> >> //usage:#define losetup_trivial_usage >> -//usage: "[-r] [-o OFS] LOOPDEV FILE - associate loop devices\n" >> +//usage: "[-r] [-o OFS] {-f|LOOPDEV} FILE - associate loop >> devices\n" >> //usage: " losetup -d LOOPDEV - disassociate\n" >> -//usage: " losetup [-f] - show" >> +//usage: " losetup -a - show status of all\n" >> +//usage: " losetup -f - show next available" >> //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: "\n -f Show/find first free loop device" >> //usage: >> //usage:#define losetup_notes_usage >> -//usage: "No arguments will display all current associations.\n" >> //usage: "One argument (losetup /dev/loop1) will display the >> current association\n" >> //usage: "(if any), or disassociate it (with -d). The display >> shows the offset\n" >> //usage: "and filename of the file the loop device is currently >> bound to.\n\n" >> @@ -31,77 +31,91 @@ int losetup_main(int argc, char **argv) >> MAIN_EXTERNALLY_VISIBLE; >> int losetup_main(int argc UNUSED_PARAM, char **argv) >> { >> unsigned opt; >> - int n; >> char *opt_o; >> - unsigned long long offset = 0; >> + char dev[LOOP_NAMESIZE]; >> enum { >> OPT_d = (1 << 0), >> OPT_o = (1 << 1), >> OPT_f = (1 << 2), >> - OPT_r = (1 << 3), /* must be last */ >> + OPT_a = (1 << 3), >> + OPT_r = (1 << 4), /* must be last */ >> }; >> >> - /* max 2 args, -d,-o,-f opts are mutually exclusive */ >> - opt_complementary = "?2:d--of:o--df:f--do"; >> - opt = getopt32(argv, "do:fr", &opt_o); >> + opt_complementary = "?2:d--ofar:a--ofr"; >> + opt = getopt32(argv, "do:far", &opt_o); >> argv += optind; >> >> - if (opt == OPT_o) >> - offset = xatoull(opt_o); >> + /* LOOPDEV */ >> + if (!opt && argv[0] && !argv[1]) { >> + char *s; >> >> + s = query_loop(argv[0]); >> + if (!s) >> + bb_simple_perror_msg_and_die(argv[0]); >> + printf("%s: %s\n", argv[0], s); >> + if (ENABLE_FEATURE_CLEAN_UP) >> + free(s); >> + return EXIT_SUCCESS; >> + } >> + >> + /* -d LOOPDEV */ >> if (opt == OPT_d) { >> - /* -d BLOCKDEV */ >> - if (!argv[0] || argv[1]) >> - bb_show_usage(); >> if (del_loop(argv[0])) >> bb_simple_perror_msg_and_die(argv[0]); >> return EXIT_SUCCESS; >> } >> >> - if (argv[0]) { >> - char *s; >> - >> - if (opt == OPT_f) /* -f should not have arguments */ >> - bb_show_usage(); >> + /* -a */ >> + if (opt == OPT_a) { >> + int n; >> + for (n = 0; n < 10; n++) { >> + char *s; >> >> - if (argv[1]) { >> - /* [-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; >> + sprintf(dev, LOOP_FORMAT, n); >> + s = query_loop(dev); >> + if (s) { >> + printf("%s: %s\n", dev, s); >> + if (ENABLE_FEATURE_CLEAN_UP) >> + free(s); >> + } >> } >> - /* [-r] [-o OFS] BLOCKDEV */ >> - s = query_loop(argv[0]); >> - if (!s) >> - bb_simple_perror_msg_and_die(argv[0]); >> - printf("%s: %s\n", argv[0], s); >> - if (ENABLE_FEATURE_CLEAN_UP) >> - free(s); >> return EXIT_SUCCESS; >> } >> >> - /* [-r] [-o OFS|-f] with no params */ >> - n = 0; >> - while (1) { >> + /* contains -f */ >> + if (opt & OPT_f) { >> char *s; >> - char dev[LOOP_NAMESIZE]; >> + int n = 0; >> >> - sprintf(dev, LOOP_FORMAT, n); >> - s = query_loop(dev); >> - n++; >> - if (!s) { >> - if (n > 9 && errno && errno != ENXIO) >> - return EXIT_SUCCESS; >> - if (opt == OPT_f) { >> - puts(dev); >> - return EXIT_SUCCESS; >> - } >> - } else { >> - if (opt != OPT_f) >> - printf("%s: %s\n", dev, s); >> - if (ENABLE_FEATURE_CLEAN_UP) >> + do { >> + sprintf(dev, LOOP_FORMAT, n); >> + s = query_loop(dev); >> + if (s && ENABLE_FEATURE_CLEAN_UP) >> free(s); >> + } while (s); >> + if ((opt == OPT_f) && !argv[0]) { >> + puts(dev); >> + return EXIT_SUCCESS; >> } >> } >> - return EXIT_SUCCESS; >> + >> + /* [-r] [-o OFS] {-f|LOOPDEV} FILE */ >> + if (argv[0] && ((opt & OPT_f) || argv[1])) { >> + unsigned long long offset = 0; >> + char *d = dev; >> + >> + if (opt == OPT_o) >> + offset = xatoull(opt_o); >> + if (opt != OPT_f) >> + d = *(argv++); >> + >> + if (argv[0]) { >> + if (set_loop(&d, argv[0], offset, (opt / OPT_r)) < >> 0) >> + bb_simple_perror_msg_and_die(argv[0]); >> + return EXIT_SUCCESS; >> + } >> + } >> + >> + bb_show_usage(); >> + return EXIT_FAILURE; >> } >> -- >> 1.7.12.4 >> >> _______________________________________________ >> busybox mailing list >> [email protected] >> http://lists.busybox.net/mailman/listinfo/busybox > > > > Sent with AquaMail for Android > http://www.aqua-mail.com > > _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
