Patchwork [05/11] error: Convert qemu_opts_set() to QError

login
register
mail settings
Submitter Markus Armbruster
Date March 18, 2010, 4:33 p.m.
Message ID <1268929996-28763-6-git-send-email-armbru@redhat.com>
Download mbox | patch
Permalink /patch/48074/
State New
Headers show

Comments

Markus Armbruster - March 18, 2010, 4:33 p.m.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 qemu-option.c |   17 ++++++-----------
 1 files changed, 6 insertions(+), 11 deletions(-)
Luiz Capitulino - March 19, 2010, 7:50 p.m.
On Thu, 18 Mar 2010 17:33:12 +0100
Markus Armbruster <armbru@redhat.com> wrote:

> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  qemu-option.c |   17 ++++++-----------
>  1 files changed, 6 insertions(+), 11 deletions(-)
> 
> diff --git a/qemu-option.c b/qemu-option.c
> index e3916be..5c39666 100644
> --- a/qemu-option.c
> +++ b/qemu-option.c
> @@ -176,7 +176,7 @@ static int parse_option_bool(const char *name, const char *value, int *ret)
>          } else if (!strcmp(value, "off")) {
>              *ret = 0;
>          } else {
> -            fprintf(stderr, "Option '%s': Use 'on' or 'off'\n", name);
> +            qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "'on' or 'off'");
>              return -1;
>          }
>      } else {
> @@ -193,12 +193,12 @@ static int parse_option_number(const char *name, const char *value, uint64_t *re
>      if (value != NULL) {
>          number = strtoull(value, &postfix, 0);
>          if (*postfix != '\0') {
> -            fprintf(stderr, "Option '%s' needs a number as parameter\n", name);
> +            qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "a number");
>              return -1;
>          }
>          *ret = number;
>      } else {
> -        fprintf(stderr, "Option '%s' needs a parameter\n", name);
> +        qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "a number");
>          return -1;
>      }
>      return 0;
> @@ -226,13 +226,11 @@ static int parse_option_size(const char *name, const char *value, uint64_t *ret)
>              *ret = (uint64_t) sizef;
>              break;
>          default:
> -            fprintf(stderr, "Option '%s' needs size as parameter\n", name);
> -            fprintf(stderr, "You may use k, M, G or T suffixes for "
> -                    "kilobytes, megabytes, gigabytes and terabytes.\n");
> +            qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "a size");

 What about using error_printf_unless_qmp() to improve the error message?
Although I don't like it very much it documents the code and if we feel like
we're abusing it we'll have an excuse to do something more complicated
like error message override.

>              return -1;
>          }
>      } else {
> -        fprintf(stderr, "Option '%s' needs a parameter\n", name);
> +        qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "a size");
>          return -1;
>      }
>      return 0;
> @@ -581,8 +579,7 @@ int qemu_opt_set(QemuOpts *opts, const char *name, const char *value)
>          if (i == 0) {
>              /* empty list -> allow any */;
>          } else {
> -            fprintf(stderr, "option \"%s\" is not valid for %s\n",
> -                    name, opts->list->name);
> +            qerror_report(QERR_INVALID_PARAMETER, name);
>              return -1;
>          }
>      }
> @@ -598,8 +595,6 @@ int qemu_opt_set(QemuOpts *opts, const char *name, const char *value)
>          opt->str = qemu_strdup(value);
>      }
>      if (qemu_opt_parse(opt) < 0) {
> -        fprintf(stderr, "Failed to parse \"%s\" for \"%s.%s\"\n", opt->str,
> -                opts->list->name, opt->name);
>          qemu_opt_del(opt);
>          return -1;
>      }

 Not generating an error on purpose here?
Markus Armbruster - March 19, 2010, 8:58 p.m.
Luiz Capitulino <lcapitulino@redhat.com> writes:

> On Thu, 18 Mar 2010 17:33:12 +0100
> Markus Armbruster <armbru@redhat.com> wrote:
>
>> 
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> ---
>>  qemu-option.c |   17 ++++++-----------
>>  1 files changed, 6 insertions(+), 11 deletions(-)
>> 
>> diff --git a/qemu-option.c b/qemu-option.c
>> index e3916be..5c39666 100644
>> --- a/qemu-option.c
>> +++ b/qemu-option.c
>> @@ -176,7 +176,7 @@ static int parse_option_bool(const char *name, const char *value, int *ret)
>>          } else if (!strcmp(value, "off")) {
>>              *ret = 0;
>>          } else {
>> -            fprintf(stderr, "Option '%s': Use 'on' or 'off'\n", name);
>> +            qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "'on' or 'off'");
>>              return -1;
>>          }
>>      } else {
>> @@ -193,12 +193,12 @@ static int parse_option_number(const char *name, const char *value, uint64_t *re
>>      if (value != NULL) {
>>          number = strtoull(value, &postfix, 0);
>>          if (*postfix != '\0') {
>> -            fprintf(stderr, "Option '%s' needs a number as parameter\n", name);
>> +            qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "a number");
>>              return -1;
>>          }
>>          *ret = number;
>>      } else {
>> -        fprintf(stderr, "Option '%s' needs a parameter\n", name);
>> +        qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "a number");
>>          return -1;
>>      }
>>      return 0;
>> @@ -226,13 +226,11 @@ static int parse_option_size(const char *name, const char *value, uint64_t *ret)
>>              *ret = (uint64_t) sizef;
>>              break;
>>          default:
>> -            fprintf(stderr, "Option '%s' needs size as parameter\n", name);
>> -            fprintf(stderr, "You may use k, M, G or T suffixes for "
>> -                    "kilobytes, megabytes, gigabytes and terabytes.\n");
>> +            qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "a size");
>
>  What about using error_printf_unless_qmp() to improve the error message?
> Although I don't like it very much it documents the code and if we feel like
> we're abusing it we'll have an excuse to do something more complicated
> like error message override.

Sure, can do that.

>>              return -1;
>>          }
>>      } else {
>> -        fprintf(stderr, "Option '%s' needs a parameter\n", name);
>> +        qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "a size");
>>          return -1;
>>      }
>>      return 0;
>> @@ -581,8 +579,7 @@ int qemu_opt_set(QemuOpts *opts, const char *name, const char *value)
>>          if (i == 0) {
>>              /* empty list -> allow any */;
>>          } else {
>> -            fprintf(stderr, "option \"%s\" is not valid for %s\n",
>> -                    name, opts->list->name);
>> +            qerror_report(QERR_INVALID_PARAMETER, name);
>>              return -1;
>>          }
>>      }
>> @@ -598,8 +595,6 @@ int qemu_opt_set(QemuOpts *opts, const char *name, const char *value)
>>          opt->str = qemu_strdup(value);
>>      }
>>      if (qemu_opt_parse(opt) < 0) {
>> -        fprintf(stderr, "Failed to parse \"%s\" for \"%s.%s\"\n", opt->str,
>> -                opts->list->name, opt->name);
>>          qemu_opt_del(opt);
>>          return -1;
>>      }
>
>  Not generating an error on purpose here?

Yes.  When qemu_opt_parse() returns failure, an error was already
emitted.  The first few patch hunks convert those errors.

Patch

diff --git a/qemu-option.c b/qemu-option.c
index e3916be..5c39666 100644
--- a/qemu-option.c
+++ b/qemu-option.c
@@ -176,7 +176,7 @@  static int parse_option_bool(const char *name, const char *value, int *ret)
         } else if (!strcmp(value, "off")) {
             *ret = 0;
         } else {
-            fprintf(stderr, "Option '%s': Use 'on' or 'off'\n", name);
+            qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "'on' or 'off'");
             return -1;
         }
     } else {
@@ -193,12 +193,12 @@  static int parse_option_number(const char *name, const char *value, uint64_t *re
     if (value != NULL) {
         number = strtoull(value, &postfix, 0);
         if (*postfix != '\0') {
-            fprintf(stderr, "Option '%s' needs a number as parameter\n", name);
+            qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "a number");
             return -1;
         }
         *ret = number;
     } else {
-        fprintf(stderr, "Option '%s' needs a parameter\n", name);
+        qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "a number");
         return -1;
     }
     return 0;
@@ -226,13 +226,11 @@  static int parse_option_size(const char *name, const char *value, uint64_t *ret)
             *ret = (uint64_t) sizef;
             break;
         default:
-            fprintf(stderr, "Option '%s' needs size as parameter\n", name);
-            fprintf(stderr, "You may use k, M, G or T suffixes for "
-                    "kilobytes, megabytes, gigabytes and terabytes.\n");
+            qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "a size");
             return -1;
         }
     } else {
-        fprintf(stderr, "Option '%s' needs a parameter\n", name);
+        qerror_report(QERR_INVALID_PARAMETER_VALUE, name, "a size");
         return -1;
     }
     return 0;
@@ -581,8 +579,7 @@  int qemu_opt_set(QemuOpts *opts, const char *name, const char *value)
         if (i == 0) {
             /* empty list -> allow any */;
         } else {
-            fprintf(stderr, "option \"%s\" is not valid for %s\n",
-                    name, opts->list->name);
+            qerror_report(QERR_INVALID_PARAMETER, name);
             return -1;
         }
     }
@@ -598,8 +595,6 @@  int qemu_opt_set(QemuOpts *opts, const char *name, const char *value)
         opt->str = qemu_strdup(value);
     }
     if (qemu_opt_parse(opt) < 0) {
-        fprintf(stderr, "Failed to parse \"%s\" for \"%s.%s\"\n", opt->str,
-                opts->list->name, opt->name);
         qemu_opt_del(opt);
         return -1;
     }