Merge pull request #2274 from esdrubal/udpclientreceive
[mono.git] / eglib / src / gerror.c
index 99dab45499506524925f15c177e8a59e1f443f4f..2ec089c9956c1053c96bd0b8ea441d2881d54800 100644 (file)
@@ -30,6 +30,8 @@
 #include <string.h>
 #include <glib.h>
 
+#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);
        }
 }