首先生成spice统一的错误域
#define SPICE_CLIENT_ERROR spice_client_error_quark()GQuark spice_client_error_quark(void)
{return g_quark_from_static_string("spice-client-error-quark");
}
方法1:通过g_set_error()函数
g_set_error(err, SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED, "Error attaching device: (no error information)");
void
g_set_error (GError **err,GQuark domain,//错误域gint code,//错误码const gchar *format,//错误描述...)
{GError *new;va_list args;if (err == NULL)return;va_start (args, format);new = g_error_new_valist (domain, code, format, args);va_end (args);if (*err == NULL)*err = new;else{g_warning (ERROR_OVERWRITTEN_WARNING, new->message);g_error_free (new);}
}
最终函数g_error_new_steal
GError*
g_error_new_valist (GQuark domain,gint code,const gchar *format,va_list args)
{g_return_val_if_fail (format != NULL, NULL);/* Historically, GError allowed this (although it was never meant to work),* and it has significant use in the wild, which g_return_val_if_fail* would break. It should maybe g_return_val_if_fail in GLib 4.* (GNOME#660371, GNOME#560482)*/g_warn_if_fail (domain != 0);return g_error_new_steal (domain, code, g_strdup_vprintf (format, args), NULL);
}
方法2:通过g_error_new_literal()函数
error = g_error_new_literal(SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,_("File transfer is disabled."));
GError*
g_error_new_literal (GQuark domain,gint code,const gchar *message)
{g_return_val_if_fail (message != NULL, NULL);g_return_val_if_fail (domain != 0, NULL);return g_error_new_steal (domain, code, g_strdup (message), NULL);
}static GError *
g_error_new_steal (GQuark domain,gint code,gchar *message,ErrorDomainInfo *out_info)
{ErrorDomainInfo info;GError *error = g_error_allocate (domain, &info);error->domain = domain;error->code = code;error->message = message;if (info.init != NULL)info.init (error);if (out_info != NULL)*out_info = info;return error;
}
方法3:通过g_error_new()函数
error = g_error_new(SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,_("File transfer failed due to lack of free space on remote machine"));
GError*
g_error_new (GQuark domain,gint code,const gchar *format,...)
{GError* error;va_list args;g_return_val_if_fail (format != NULL, NULL);g_return_val_if_fail (domain != 0, NULL);va_start (args, format);error = g_error_new_valist (domain, code, format, args);va_end (args);return error;
}