qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v7 06/10] error: Add error_set_win32 and error_s


From: Michael Roth
Subject: Re: [Qemu-devel] [PATCH v7 06/10] error: Add error_set_win32 and error_setg_win32
Date: Mon, 22 Jul 2013 16:50:55 -0500
User-agent: alot/0.3.4

Quoting Tomoki Sekiyama (2013-07-15 11:20:49)
> These functions help maintaining homogeneous formatting of error messages
> with Windows error code and description (generated by
> g_win32_error_message()).
> 
> Signed-off-by: Tomoki Sekiyama <address@hidden>

Reviewed-by: Michael Roth <address@hidden>

> ---
>  include/qapi/error.h |   13 +++++++++++++
>  util/error.c         |   35 +++++++++++++++++++++++++++++++++++
>  2 files changed, 48 insertions(+)
> 
> diff --git a/include/qapi/error.h b/include/qapi/error.h
> index ffd1cea..7d4c696 100644
> --- a/include/qapi/error.h
> +++ b/include/qapi/error.h
> @@ -36,6 +36,15 @@ void error_set(Error **err, ErrorClass err_class, const 
> char *fmt, ...) GCC_FMT_
>   */
>  void error_set_errno(Error **err, int os_error, ErrorClass err_class, const 
> char *fmt, ...) GCC_FMT_ATTR(4, 5);
> 
> +#ifdef _WIN32
> +/**
> + * Set an indirect pointer to an error given a ErrorClass value and a
> + * printf-style human message, followed by a g_win32_error_message() string 
> if
> + * @win32_err is not zero.
> + */
> +void error_set_win32(Error **err, int win32_err, ErrorClass err_class, const 
> char *fmt, ...) GCC_FMT_ATTR(4, 5);
> +#endif
> +
>  /**
>   * Same as error_set(), but sets a generic error
>   */
> @@ -43,6 +52,10 @@ void error_set_errno(Error **err, int os_error, ErrorClass 
> err_class, const char
>      error_set(err, ERROR_CLASS_GENERIC_ERROR, fmt, ## __VA_ARGS__)
>  #define error_setg_errno(err, os_error, fmt, ...) \
>      error_set_errno(err, os_error, ERROR_CLASS_GENERIC_ERROR, fmt, ## 
> __VA_ARGS__)
> +#ifdef _WIN32
> +#define error_setg_win32(err, win32_err, fmt, ...) \
> +    error_set_win32(err, win32_err, ERROR_CLASS_GENERIC_ERROR, fmt, ## 
> __VA_ARGS__)
> +#endif
> 
>  /**
>   * Helper for open() errors
> diff --git a/util/error.c b/util/error.c
> index 53b0435..ec0faa6 100644
> --- a/util/error.c
> +++ b/util/error.c
> @@ -76,6 +76,41 @@ void error_setg_file_open(Error **errp, int os_errno, 
> const char *filename)
>      error_setg_errno(errp, os_errno, "Could not open '%s'", filename);
>  }
> 
> +#ifdef _WIN32
> +
> +void error_set_win32(Error **errp, int win32_err, ErrorClass err_class,
> +                     const char *fmt, ...)
> +{
> +    Error *err;
> +    char *msg1;
> +    va_list ap;
> +
> +    if (errp == NULL) {
> +        return;
> +    }
> +    assert(*errp == NULL);
> +
> +    err = g_malloc0(sizeof(*err));
> +
> +    va_start(ap, fmt);
> +    msg1 = g_strdup_vprintf(fmt, ap);
> +    if (win32_err != 0) {
> +        char *msg2 = g_win32_error_message(win32_err);
> +        err->msg = g_strdup_printf("%s: %s (error: %x)", msg1, msg2,
> +                                   (unsigned)win32_err);
> +        g_free(msg2);
> +        g_free(msg1);
> +    } else {
> +        err->msg = msg1;
> +    }
> +    va_end(ap);
> +    err->err_class = err_class;
> +
> +    *errp = err;
> +}
> +
> +#endif
> +
>  Error *error_copy(const Error *err)
>  {
>      Error *err_new;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]