diff --git a/include/git2/errors.h b/include/git2/errors.h index 09b1f26bb..253cb6ae2 100644 --- a/include/git2/errors.h +++ b/include/git2/errors.h @@ -146,6 +146,11 @@ GIT_EXTERN(const char *) git_lasterror(void); */ GIT_EXTERN(const char *) git_strerror(int num); +/** + * Clear the latest library error + */ +GIT_EXTERN(void) git_clearerror(void); + /** @} */ GIT_END_DECL #endif diff --git a/src/errors.c b/src/errors.c index 7da02b4f7..e9022c3d1 100644 --- a/src/errors.c +++ b/src/errors.c @@ -108,6 +108,13 @@ int git__throw(int error, const char *msg, ...) const char *git_lasterror(void) { + if (!g_last_error[0]) + return NULL; + return g_last_error; } +void git_clearerror(void) +{ + g_last_error[0] = '\0'; +} diff --git a/src/fileops.c b/src/fileops.c index 2a5eb74ad..3397aad1d 100644 --- a/src/fileops.c +++ b/src/fileops.c @@ -123,8 +123,7 @@ int gitfo_isdir(const char *path) struct stat st; int len, stat_error; - if (!path) - return git__throw(GIT_ENOTFOUND, "No path given to gitfo_isdir"); + assert(path); len = strlen(path); @@ -140,10 +139,10 @@ int gitfo_isdir(const char *path) } if (stat_error < GIT_SUCCESS) - return git__throw(GIT_ENOTFOUND, "%s does not exist", path); + return GIT_ERROR; if (!S_ISDIR(st.st_mode)) - return git__throw(GIT_ENOTFOUND, "%s is not a directory", path); + return GIT_ERROR; return GIT_SUCCESS; } diff --git a/tests/test_lib.c b/tests/test_lib.c index 3136eb0ec..a4c39dfde 100755 --- a/tests/test_lib.c +++ b/tests/test_lib.c @@ -77,13 +77,16 @@ void git_test__init(git_test *t, const char *name, const char *description) static void fail_test(git_test *tc, const char *file, int line, const char *message) { char buf[1024]; + const char *last_error = git_lasterror(); snprintf(buf, 1024, "%s:%d", file, line); tc->failed = 1; tc->message = strdup(message); tc->failed_pos = strdup(buf); - tc->error_message = strdup(git_lasterror()); + + if (last_error) + tc->error_message = strdup(last_error); if (tc->jump != 0) longjmp(*(tc->jump), 0); diff --git a/tests/test_lib.h b/tests/test_lib.h index f3febe857..69ad2edde 100755 --- a/tests/test_lib.h +++ b/tests/test_lib.h @@ -26,6 +26,7 @@ #define BEGIN_TEST(TNAME, DESC) \ static void _gittest__##TNAME(git_test *_gittest) { \ git_test__init(_gittest, #TNAME, DESC); \ + git_clearerror();\ {\ #define END_TEST }}