On 8/26/09, Thomas Bächler <[email protected]> wrote:
> The --resolve-alias option prints all module names that match the
> alias given on the commandline and exits. If no valid alias is specified,
> it does nothing.

Why?

I.e. we already have "--verbose --dry-run" for humans, so I assume
this is for scripting purposes.  Which scripts would you like to use
this in?

>  doc/modprobe.sgml |    9 +++++++++
>  modprobe.c        |   35 ++++++++++++++++++++++-------------
>  2 files changed, 31 insertions(+), 13 deletions(-)
>
> diff --git a/doc/modprobe.sgml b/doc/modprobe.sgml
> index fde8ca7..4f8c5ab 100644
> --- a/doc/modprobe.sgml
> +++ b/doc/modprobe.sgml
> @@ -367,6 +367,15 @@
>          </listitem>
>        </varlistentry>
>        <varlistentry>
> +        <term><option>--resolve-alias</option>
> +        </term>
> +        <listitem>
> +          <para>
> +         Resolve all module names matching an alias.

s/Resolve/Print/

> +       </para>
> +        </listitem>
> +      </varlistentry>
> +      <varlistentry>
>          <term><option>-o</option> <option>--name</option>
>          </term>
>          <listitem>
> diff --git a/modprobe.c b/modprobe.c
> index 21a3111..6a0da22 100644
> --- a/modprobe.c
> +++ b/modprobe.c
> @@ -69,7 +69,8 @@ typedef enum
>       mit_ignore_commands = 16,
>       mit_ignore_loaded = 32,
>       mit_strip_vermagic = 64,
> -     mit_strip_modversion = 128
> +     mit_strip_modversion = 128,
> +     mit_resolve_alias = 256
>
>  } modprobe_flags_t;
>
> @@ -1342,20 +1343,23 @@ int do_modprobe(char *modname,
>               if (aliases->next)
>                       err = warn;
>               while (aliases) {
> -                     /* Add the options for this alias. */
> -                     char *opts = NOFAIL(strdup(cmdline_opts));
> -                     opts = add_extra_options(modname,
> -                                              opts, modoptions);
> -
> -                     read_depends(dirname, aliases->module, &list);
> -                     failed |= handle_module(aliases->module,
> -                             &list, newname, opts, modoptions,
> -                             commands, cmdline_opts, err, flags);
> -
> +                     if(flags & mit_resolve_alias) {
> +                             info("%s\n", aliases->module);

I think printf() would be better.

> +                     } else {
> +                             /* Add the options for this alias. */
> +                             char *opts = NOFAIL(strdup(cmdline_opts));
> +                             opts = add_extra_options(modname,
> +                                                      opts, modoptions);
> +
> +                             read_depends(dirname, aliases->module, &list);
> +                             failed |= handle_module(aliases->module,
> +                                     &list, newname, opts, modoptions,
> +                                     commands, cmdline_opts, err, flags);
> +                             INIT_LIST_HEAD(&list);
> +                     }
>                       aliases = aliases->next;
> -                     INIT_LIST_HEAD(&list);
>               }
> -     } else {
> +     } else if(!(flags & mit_resolve_alias)) {
>               if (flags & mit_use_blacklist
>                   && find_blacklist(modname, blacklist))
>                       return failed;

Yay, more special cases and higher nesting levels :-).

How about this instead?

        aliases = apply_blacklist(aliases, blacklist);
+       if(flags & mit_resolve_alias) {
+               while(aliases) {
+                       printf("%s\n", aliases->module);
+                       aliases = aliases->next;
+               }
+               return 0;
+       }

It could be even shorter if you don't mind switching the while() loops
to for() loops as well.

> @@ -1373,6 +1377,7 @@ static struct option options[] = { { "version", 0,
> NULL, 'V' },
>                                  { "show", 0, NULL, 'n' },
>                                  { "dry-run", 0, NULL, 'n' },
>                                  { "show-depends", 0, NULL, 'D' },
> +                                { "resolve-alias", 0, NULL, 'R' },
>                                  { "dirname", 1, NULL, 'd' },
>                                  { "set-version", 1, NULL, 'S' },
>                                  { "config", 1, NULL, 'C' },
> @@ -1453,6 +1458,10 @@ int main(int argc, char *argv[])
>                       flags |= mit_ignore_loaded;
>                       verbose = 1;
>                       break;
> +             case 'R':
> +                     flags |= mit_resolve_alias;
> +                     verbose = 1;
> +                     break;
>               case 'o':
>                       newname = optarg;
>                       break;

Regards
Alan
--
To unsubscribe from this list: send the line "unsubscribe linux-modules" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to