[libvirt] [PATCHv2 1/2] command: improve allocation failure reporting

Jiri Denemark jdenemar at redhat.com
Tue Dec 7 16:53:19 UTC 2010


> * src/util/command.c (virCommandAddEnvString): Remove duplicate
> code.
> (virCommandToString, virCommandRun, virCommandRunAsync)
> (virCommandWait): Report NULL command as ENOMEM, not invalid
> usage.
> Reported by Jiri Denemark.
> ---
> 
> New patch.  Fixes the root cause, so that patch 2 can
> be smaller...

Yeah, makes sense. I didn't realize the expected behavior was not to require
error checking even after virCommandNew*

> diff --git a/src/util/command.c b/src/util/command.c
> index 38d462b..c0520ec 100644
> --- a/src/util/command.c
> +++ b/src/util/command.c
> @@ -292,9 +292,6 @@ virCommandAddEnvPair(virCommandPtr cmd, const char *name, const char *value)
>  void
>  virCommandAddEnvString(virCommandPtr cmd, const char *str)
>  {
> -    if (!cmd || cmd->has_error)
> -        return;
> -
>      char *env;
> 
>      if (!cmd || cmd->has_error)

Eh.

> @@ -710,13 +707,13 @@ virCommandToString(virCommandPtr cmd)
> 
>      /* Cannot assume virCommandRun will be called; so report the error
>       * now.  If virCommandRun is called, it will report the same error. */
> -    if (!cmd || cmd->has_error == -1) {
> -        virCommandError(VIR_ERR_INTERNAL_ERROR, "%s",
> -                        _("invalid use of command API"));
> +    if (!cmd ||cmd->has_error == ENOMEM) {
> +        virReportOOMError();
>          return NULL;
>      }
> -    if (cmd->has_error == ENOMEM) {
> -        virReportOOMError();
> +    if (cmd->has_error) {
> +        virCommandError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                        _("invalid use of command API"));
>          return NULL;
>      }

I checked has_error is either 0, -1, or ENOMEM so we are not hiding any error
here.

ACK

Jirka




More information about the libvir-list mailing list