Patchwork [1/5] qemu-option: add alias support

login
register
mail settings
Submitter Luiz Capitulino
Date July 10, 2012, 7:50 p.m.
Message ID <1341949831-13547-2-git-send-email-lcapitulino@redhat.com>
Download mbox | patch
Permalink /patch/170266/
State New
Headers show

Comments

Luiz Capitulino - July 10, 2012, 7:50 p.m.
It allows for specifying an alias for each option name, see next commits
examples.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
 qemu-option.c | 9 ++++++++-
 qemu-option.h | 1 +
 2 files changed, 9 insertions(+), 1 deletion(-)
Markus Armbruster - July 11, 2012, 7 a.m.
Luiz Capitulino <lcapitulino@redhat.com> writes:

> It allows for specifying an alias for each option name, see next commits
> examples.
>
> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
> ---
>  qemu-option.c | 9 ++++++++-
>  qemu-option.h | 1 +
>  2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/qemu-option.c b/qemu-option.c
> index bb3886c..59a1f6e 100644
> --- a/qemu-option.c
> +++ b/qemu-option.c
> @@ -616,6 +616,7 @@ static void opt_set(QemuOpts *opts, const char *name, const char *value,
>                      bool prepend, Error **errp)
>  {
>      QemuOpt *opt;
> +    const char *optname;
>      const QemuOptDesc *desc = opts->list->desc;
>      Error *local_err = NULL;
>      int i;
> @@ -624,18 +625,24 @@ static void opt_set(QemuOpts *opts, const char *name, const char *value,
>          if (strcmp(desc[i].name, name) == 0) {
>              break;
>          }
> +        if (desc[i].alias && strcmp(desc[i].alias, name) == 0) {
> +            break;
> +        }
>      }
>      if (desc[i].name == NULL) {
>          if (i == 0) {
>              /* empty list -> allow any */;
> +            optname = name;
>          } else {
>              error_set(errp, QERR_INVALID_PARAMETER, name);
>              return;
>          }
> +    } else {
> +        optname = desc[i].name;
>      }
>  
>      opt = g_malloc0(sizeof(*opt));
> -    opt->name = g_strdup(name);
> +    opt->name = g_strdup(optname);
>      opt->opts = opts;
>      if (prepend) {
>          QTAILQ_INSERT_HEAD(&opts->head, opt, next);

What about qemu_opt_set_bool() and qemu_opts_validate()?  Don't they
need alias support as well?

By the way, I really dislike qemu_opt_set_bool() duplicating
qemu_opt_set().  Shame on commit f02b77c9.

> diff --git a/qemu-option.h b/qemu-option.h
> index 951dec3..7106d2f 100644
> --- a/qemu-option.h
> +++ b/qemu-option.h
> @@ -94,6 +94,7 @@ enum QemuOptType {
>  
>  typedef struct QemuOptDesc {
>      const char *name;
> +    const char *alias;
>      enum QemuOptType type;
>      const char *help;
>  } QemuOptDesc;
Luiz Capitulino - July 11, 2012, 12:51 p.m.
On Wed, 11 Jul 2012 09:00:59 +0200
Markus Armbruster <armbru@redhat.com> wrote:

> Luiz Capitulino <lcapitulino@redhat.com> writes:
> 
> > It allows for specifying an alias for each option name, see next commits
> > examples.
> >
> > Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
> > ---
> >  qemu-option.c | 9 ++++++++-
> >  qemu-option.h | 1 +
> >  2 files changed, 9 insertions(+), 1 deletion(-)
> >
> > diff --git a/qemu-option.c b/qemu-option.c
> > index bb3886c..59a1f6e 100644
> > --- a/qemu-option.c
> > +++ b/qemu-option.c
> > @@ -616,6 +616,7 @@ static void opt_set(QemuOpts *opts, const char *name, const char *value,
> >                      bool prepend, Error **errp)
> >  {
> >      QemuOpt *opt;
> > +    const char *optname;
> >      const QemuOptDesc *desc = opts->list->desc;
> >      Error *local_err = NULL;
> >      int i;
> > @@ -624,18 +625,24 @@ static void opt_set(QemuOpts *opts, const char *name, const char *value,
> >          if (strcmp(desc[i].name, name) == 0) {
> >              break;
> >          }
> > +        if (desc[i].alias && strcmp(desc[i].alias, name) == 0) {
> > +            break;
> > +        }
> >      }
> >      if (desc[i].name == NULL) {
> >          if (i == 0) {
> >              /* empty list -> allow any */;
> > +            optname = name;
> >          } else {
> >              error_set(errp, QERR_INVALID_PARAMETER, name);
> >              return;
> >          }
> > +    } else {
> > +        optname = desc[i].name;
> >      }
> >  
> >      opt = g_malloc0(sizeof(*opt));
> > -    opt->name = g_strdup(name);
> > +    opt->name = g_strdup(optname);
> >      opt->opts = opts;
> >      if (prepend) {
> >          QTAILQ_INSERT_HEAD(&opts->head, opt, next);
> 
> What about qemu_opt_set_bool() and qemu_opts_validate()?  Don't they
> need alias support as well?

Oh, you're right, thanks for catching this.

> By the way, I really dislike qemu_opt_set_bool() duplicating
> qemu_opt_set().  Shame on commit f02b77c9.

Yeah, I'll fix the duplication.

> 
> > diff --git a/qemu-option.h b/qemu-option.h
> > index 951dec3..7106d2f 100644
> > --- a/qemu-option.h
> > +++ b/qemu-option.h
> > @@ -94,6 +94,7 @@ enum QemuOptType {
> >  
> >  typedef struct QemuOptDesc {
> >      const char *name;
> > +    const char *alias;
> >      enum QemuOptType type;
> >      const char *help;
> >  } QemuOptDesc;
>

Patch

diff --git a/qemu-option.c b/qemu-option.c
index bb3886c..59a1f6e 100644
--- a/qemu-option.c
+++ b/qemu-option.c
@@ -616,6 +616,7 @@  static void opt_set(QemuOpts *opts, const char *name, const char *value,
                     bool prepend, Error **errp)
 {
     QemuOpt *opt;
+    const char *optname;
     const QemuOptDesc *desc = opts->list->desc;
     Error *local_err = NULL;
     int i;
@@ -624,18 +625,24 @@  static void opt_set(QemuOpts *opts, const char *name, const char *value,
         if (strcmp(desc[i].name, name) == 0) {
             break;
         }
+        if (desc[i].alias && strcmp(desc[i].alias, name) == 0) {
+            break;
+        }
     }
     if (desc[i].name == NULL) {
         if (i == 0) {
             /* empty list -> allow any */;
+            optname = name;
         } else {
             error_set(errp, QERR_INVALID_PARAMETER, name);
             return;
         }
+    } else {
+        optname = desc[i].name;
     }
 
     opt = g_malloc0(sizeof(*opt));
-    opt->name = g_strdup(name);
+    opt->name = g_strdup(optname);
     opt->opts = opts;
     if (prepend) {
         QTAILQ_INSERT_HEAD(&opts->head, opt, next);
diff --git a/qemu-option.h b/qemu-option.h
index 951dec3..7106d2f 100644
--- a/qemu-option.h
+++ b/qemu-option.h
@@ -94,6 +94,7 @@  enum QemuOptType {
 
 typedef struct QemuOptDesc {
     const char *name;
+    const char *alias;
     enum QemuOptType type;
     const char *help;
 } QemuOptDesc;