X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=eglib%2Fsrc%2Fgerror.c;h=2ec089c9956c1053c96bd0b8ea441d2881d54800;hb=b21767e01caefe05ad063ddc28afecd0b5b78b04;hp=99dab45499506524925f15c177e8a59e1f443f4f;hpb=987f8c63e214937c50dcb308149f7558a2cbba41;p=mono.git diff --git a/eglib/src/gerror.c b/eglib/src/gerror.c index 99dab454995..2ec089c9956 100644 --- a/eglib/src/gerror.c +++ b/eglib/src/gerror.c @@ -30,6 +30,8 @@ #include #include +#include "vasprintf.h" + GError * g_error_new (gpointer domain, gint code, const char *format, ...) { @@ -47,6 +49,29 @@ g_error_new (gpointer domain, gint code, const char *format, ...) return err; } +static GError * +g_error_vnew (gpointer domain, gint code, const char *format, va_list ap) +{ + GError *err = g_new (GError, 1); + + err->domain = domain; + err->code = code; + + if (vasprintf (&err->message, format, ap) == -1) + err->message = g_strdup_printf ("internal: invalid format string %s", format); + + return err; +} + +void +g_clear_error (GError **error) +{ + if (error && *error) { + g_error_free (*error); + *error = NULL; + } +} + void g_error_free (GError *error) { @@ -63,7 +88,7 @@ g_set_error (GError **err, gpointer domain, gint code, const gchar *format, ...) if (err) { va_start (args, format); - *err = g_error_new (domain, code, format, args); + *err = g_error_vnew (domain, code, format, args); va_end (args); } }