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

Reply via email to