From d6c6016966cff46d874a8d85b38704a6ef2150e5 Mon Sep 17 00:00:00 2001 From: Russell Belfer Date: Mon, 4 Nov 2013 15:45:31 -0800 Subject: Add giterr_detach API to get and clear error There are a number of cases where it is convenient to be able to fetch and "claim" the current error string, clearing the error. This is helpful when you need to call some code that may alter the error and you want to restore it later on and/or report it via some other mechanism. --- src/errors.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/errors.c') diff --git a/src/errors.c b/src/errors.c index c9d9e4e37..70b5f2668 100644 --- a/src/errors.c +++ b/src/errors.c @@ -112,6 +112,29 @@ void giterr_clear(void) #endif } +git_error_t giterr_detach(git_buf *message) +{ + git_error_t rval; + git_error *error = GIT_GLOBAL->last_error; + + assert(message); + + git_buf_free(message); + + if (!error) + return GITERR_NONE; + + rval = error->klass; + + if (error != &g_git_oom_error) + git_buf_attach(message, error->message, 0); + + error->message = NULL; + giterr_clear(); + + return rval; +} + const git_error *giterr_last(void) { return GIT_GLOBAL->last_error; -- cgit v1.2.1 From 1eab9f0e32178a9aac941583c69e1b9cf9849f77 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Tue, 5 Nov 2013 14:56:10 +0100 Subject: error: Simplify giterr_detach --- src/errors.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) (limited to 'src/errors.c') diff --git a/src/errors.c b/src/errors.c index 70b5f2668..d04da4ca9 100644 --- a/src/errors.c +++ b/src/errors.c @@ -112,27 +112,22 @@ void giterr_clear(void) #endif } -git_error_t giterr_detach(git_buf *message) +int giterr_detach(git_error *cpy) { - git_error_t rval; git_error *error = GIT_GLOBAL->last_error; - assert(message); - - git_buf_free(message); + assert(cpy); if (!error) - return GITERR_NONE; - - rval = error->klass; + return -1; - if (error != &g_git_oom_error) - git_buf_attach(message, error->message, 0); + cpy->message = error->message; + cpy->klass = error->klass; error->message = NULL; giterr_clear(); - return rval; + return 0; } const git_error *giterr_last(void) -- cgit v1.2.1