mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-05-30 16:07:01 +00:00
error: De-duplicate code creating Error objects
Duplicated when commit 680d16d added error_set_errno(), and again when commit 20840d4 added error_set_win32(). Make the original copy in error_set() reusable by factoring out error_setv(), then rewrite error_set_errno() and error_set_win32() on top of it. Backports commit 552375088a832fd5945ede92d01f98977b4eca13 from qemu
This commit is contained in:
parent
191786d055
commit
c2a61848d6
|
@ -21,10 +21,10 @@ struct Error
|
|||
|
||||
Error *error_abort;
|
||||
|
||||
void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
|
||||
static void error_setv(Error **errp, ErrorClass err_class,
|
||||
const char *fmt, va_list ap)
|
||||
{
|
||||
Error *err;
|
||||
va_list ap;
|
||||
int saved_errno = errno;
|
||||
|
||||
if (errp == NULL) {
|
||||
|
@ -34,9 +34,7 @@ void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
|
|||
|
||||
err = g_malloc0(sizeof(*err));
|
||||
|
||||
va_start(ap, fmt);
|
||||
err->msg = g_strdup_vprintf(fmt, ap);
|
||||
va_end(ap);
|
||||
err->err_class = err_class;
|
||||
|
||||
if (errp == &error_abort) {
|
||||
|
@ -48,38 +46,36 @@ void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
|
|||
errno = saved_errno;
|
||||
}
|
||||
|
||||
void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
error_setv(errp, err_class, fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void error_set_errno(Error **errp, int os_errno, ErrorClass err_class,
|
||||
const char *fmt, ...)
|
||||
{
|
||||
Error *err;
|
||||
char *msg1;
|
||||
va_list ap;
|
||||
char *msg;
|
||||
int saved_errno = errno;
|
||||
|
||||
if (errp == NULL) {
|
||||
return;
|
||||
}
|
||||
assert(*errp == NULL);
|
||||
|
||||
err = g_malloc0(sizeof(*err));
|
||||
|
||||
va_start(ap, fmt);
|
||||
msg1 = g_strdup_vprintf(fmt, ap);
|
||||
if (os_errno != 0) {
|
||||
err->msg = g_strdup_printf("%s: %s", msg1, strerror(os_errno));
|
||||
g_free(msg1);
|
||||
} else {
|
||||
err->msg = msg1;
|
||||
}
|
||||
error_setv(errp, err_class, fmt, ap);
|
||||
va_end(ap);
|
||||
err->err_class = err_class;
|
||||
|
||||
if (errp == &error_abort) {
|
||||
// abort();
|
||||
if (os_errno != 0) {
|
||||
msg = (*errp)->msg;
|
||||
(*errp)->msg = g_strdup_printf("%s: %s", msg, strerror(os_errno));
|
||||
g_free(msg);
|
||||
}
|
||||
|
||||
*errp = err;
|
||||
|
||||
errno = saved_errno;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue