Revision 20840d4c

b/include/qapi/error.h
36 36
 */
37 37
void error_set_errno(Error **err, int os_error, ErrorClass err_class, const char *fmt, ...) GCC_FMT_ATTR(4, 5);
38 38

  
39
#ifdef _WIN32
40
/**
41
 * Set an indirect pointer to an error given a ErrorClass value and a
42
 * printf-style human message, followed by a g_win32_error_message() string if
43
 * @win32_err is not zero.
44
 */
45
void error_set_win32(Error **err, int win32_err, ErrorClass err_class, const char *fmt, ...) GCC_FMT_ATTR(4, 5);
46
#endif
47

  
39 48
/**
40 49
 * Same as error_set(), but sets a generic error
41 50
 */
......
43 52
    error_set(err, ERROR_CLASS_GENERIC_ERROR, fmt, ## __VA_ARGS__)
44 53
#define error_setg_errno(err, os_error, fmt, ...) \
45 54
    error_set_errno(err, os_error, ERROR_CLASS_GENERIC_ERROR, fmt, ## __VA_ARGS__)
55
#ifdef _WIN32
56
#define error_setg_win32(err, win32_err, fmt, ...) \
57
    error_set_win32(err, win32_err, ERROR_CLASS_GENERIC_ERROR, fmt, ## __VA_ARGS__)
58
#endif
46 59

  
47 60
/**
48 61
 * Helper for open() errors
b/util/error.c
76 76
    error_setg_errno(errp, os_errno, "Could not open '%s'", filename);
77 77
}
78 78

  
79
#ifdef _WIN32
80

  
81
void error_set_win32(Error **errp, int win32_err, ErrorClass err_class,
82
                     const char *fmt, ...)
83
{
84
    Error *err;
85
    char *msg1;
86
    va_list ap;
87

  
88
    if (errp == NULL) {
89
        return;
90
    }
91
    assert(*errp == NULL);
92

  
93
    err = g_malloc0(sizeof(*err));
94

  
95
    va_start(ap, fmt);
96
    msg1 = g_strdup_vprintf(fmt, ap);
97
    if (win32_err != 0) {
98
        char *msg2 = g_win32_error_message(win32_err);
99
        err->msg = g_strdup_printf("%s: %s (error: %x)", msg1, msg2,
100
                                   (unsigned)win32_err);
101
        g_free(msg2);
102
        g_free(msg1);
103
    } else {
104
        err->msg = msg1;
105
    }
106
    va_end(ap);
107
    err->err_class = err_class;
108

  
109
    *errp = err;
110
}
111

  
112
#endif
113

  
79 114
Error *error_copy(const Error *err)
80 115
{
81 116
    Error *err_new;

Also available in: Unified diff