diff options
author | Vicent Marti <tanoku@gmail.com> | 2013-11-05 14:56:10 +0100 |
---|---|---|
committer | Vicent Marti <tanoku@gmail.com> | 2013-11-05 14:56:10 +0100 |
commit | 1eab9f0e32178a9aac941583c69e1b9cf9849f77 (patch) | |
tree | 7d1648b25f154516680397b4fb3941e50ef2c3b7 | |
parent | 3b259cbd1afdc96a3c3eb7af5895b310c1ac2a7d (diff) | |
download | libgit2-1eab9f0e32178a9aac941583c69e1b9cf9849f77.tar.gz |
error: Simplify giterr_detach
-rw-r--r-- | include/git2/errors.h | 15 | ||||
-rw-r--r-- | src/errors.c | 17 | ||||
-rw-r--r-- | src/iterator.c | 11 |
3 files changed, 18 insertions, 25 deletions
diff --git a/include/git2/errors.h b/include/git2/errors.h index 5f5d0ab1f..be7a31d8e 100644 --- a/include/git2/errors.h +++ b/include/git2/errors.h @@ -89,17 +89,14 @@ GIT_EXTERN(void) giterr_clear(void); /** * Get the last error data and clear it. * - * This copies the last error message into the given `git_buf` and returns - * the associated `git_error_t`, leaving the error cleared as if - * `giterr_clear` had been called. You must call `git_buf_free` on the - * message to release the memory. + * This copies the last error into the given `git_error` struct + * and returns 0 if the copy was successful, leaving the error + * cleared as if `giterr_clear` had been called. * - * Note: it is possible that this will return `GITERR_NONE` and set the - * buffer to NULL, so be prepared for that condition. Also, if the last - * error was an out-of-memory error, this will return `GITERR_NOMEMORY` - * but also leave the buffer set to NULL (to avoid allocation). + * If there was no existing error in the library, -1 will be returned + * and the contents of `cpy` will be left unmodified. */ -GIT_EXTERN(git_error_t) giterr_detach(git_buf *message); +GIT_EXTERN(int) giterr_detach(git_error *cpy); /** * Set the error message string for this thread. 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) diff --git a/src/iterator.c b/src/iterator.c index 369a079bc..8646399ab 100644 --- a/src/iterator.c +++ b/src/iterator.c @@ -991,8 +991,9 @@ static int fs_iterator__expand_dir(fs_iterator *fi) fi->base.start, fi->base.end, &ff->entries); if (error < 0) { - git_buf msg = GIT_BUF_INIT; - git_error_t errt = giterr_detach(&msg); + git_error last_error = {0}; + + giterr_detach(&last_error); /* these callbacks may clear the error message */ fs_iterator__free_frame(ff); @@ -1000,9 +1001,9 @@ static int fs_iterator__expand_dir(fs_iterator *fi) /* next time return value we skipped to */ fi->base.flags &= ~GIT_ITERATOR_FIRST_ACCESS; - if (msg.ptr) { - giterr_set_str(errt, msg.ptr); - git_buf_free(&msg); + if (last_error.message) { + giterr_set_str(last_error.klass, last_error.message); + free(last_error.message); } return error; |