mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-04 15:49:24 +00:00
error: Simplify giterr_detach
This commit is contained in:
parent
3b259cbd1a
commit
1eab9f0e32
@ -89,17 +89,14 @@ GIT_EXTERN(void) giterr_clear(void);
|
|||||||
/**
|
/**
|
||||||
* Get the last error data and clear it.
|
* Get the last error data and clear it.
|
||||||
*
|
*
|
||||||
* This copies the last error message into the given `git_buf` and returns
|
* This copies the last error into the given `git_error` struct
|
||||||
* the associated `git_error_t`, leaving the error cleared as if
|
* and returns 0 if the copy was successful, leaving the error
|
||||||
* `giterr_clear` had been called. You must call `git_buf_free` on the
|
* cleared as if `giterr_clear` had been called.
|
||||||
* message to release the memory.
|
|
||||||
*
|
*
|
||||||
* Note: it is possible that this will return `GITERR_NONE` and set the
|
* If there was no existing error in the library, -1 will be returned
|
||||||
* buffer to NULL, so be prepared for that condition. Also, if the last
|
* and the contents of `cpy` will be left unmodified.
|
||||||
* error was an out-of-memory error, this will return `GITERR_NOMEMORY`
|
|
||||||
* but also leave the buffer set to NULL (to avoid allocation).
|
|
||||||
*/
|
*/
|
||||||
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.
|
* Set the error message string for this thread.
|
||||||
|
17
src/errors.c
17
src/errors.c
@ -112,27 +112,22 @@ void giterr_clear(void)
|
|||||||
#endif
|
#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;
|
git_error *error = GIT_GLOBAL->last_error;
|
||||||
|
|
||||||
assert(message);
|
assert(cpy);
|
||||||
|
|
||||||
git_buf_free(message);
|
|
||||||
|
|
||||||
if (!error)
|
if (!error)
|
||||||
return GITERR_NONE;
|
return -1;
|
||||||
|
|
||||||
rval = error->klass;
|
cpy->message = error->message;
|
||||||
|
cpy->klass = error->klass;
|
||||||
if (error != &g_git_oom_error)
|
|
||||||
git_buf_attach(message, error->message, 0);
|
|
||||||
|
|
||||||
error->message = NULL;
|
error->message = NULL;
|
||||||
giterr_clear();
|
giterr_clear();
|
||||||
|
|
||||||
return rval;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const git_error *giterr_last(void)
|
const git_error *giterr_last(void)
|
||||||
|
@ -991,8 +991,9 @@ static int fs_iterator__expand_dir(fs_iterator *fi)
|
|||||||
fi->base.start, fi->base.end, &ff->entries);
|
fi->base.start, fi->base.end, &ff->entries);
|
||||||
|
|
||||||
if (error < 0) {
|
if (error < 0) {
|
||||||
git_buf msg = GIT_BUF_INIT;
|
git_error last_error = {0};
|
||||||
git_error_t errt = giterr_detach(&msg);
|
|
||||||
|
giterr_detach(&last_error);
|
||||||
|
|
||||||
/* these callbacks may clear the error message */
|
/* these callbacks may clear the error message */
|
||||||
fs_iterator__free_frame(ff);
|
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 */
|
/* next time return value we skipped to */
|
||||||
fi->base.flags &= ~GIT_ITERATOR_FIRST_ACCESS;
|
fi->base.flags &= ~GIT_ITERATOR_FIRST_ACCESS;
|
||||||
|
|
||||||
if (msg.ptr) {
|
if (last_error.message) {
|
||||||
giterr_set_str(errt, msg.ptr);
|
giterr_set_str(last_error.klass, last_error.message);
|
||||||
git_buf_free(&msg);
|
free(last_error.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
|
Loading…
Reference in New Issue
Block a user