X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=eglib%2Fsrc%2Fgerror.c;h=790c388c7ad9fb6bb0230804ecbf4f3ef90f7dc4;hb=17f10155f8f8ef117d228d57c199470cf9290575;hp=7f3a1f49ffabaa3f21cbdcbef8130ecb36d8974d;hpb=b5cfba1835f2ba823796f825410e0062b7e4c9a3;p=mono.git diff --git a/eglib/src/gerror.c b/eglib/src/gerror.c index 7f3a1f49ffa..790c388c7ad 100644 --- a/eglib/src/gerror.c +++ b/eglib/src/gerror.c @@ -25,7 +25,6 @@ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#define _GNU_SOURCE #include #include #include @@ -48,6 +47,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) { @@ -64,7 +86,18 @@ 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); } } + +void +g_propagate_error (GError **dest, GError *src) +{ + if (dest == NULL){ + if (src) + g_error_free (src); + } else { + *dest = src; + } +}