summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2015-05-15 12:15:45 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2015-05-15 12:15:45 +0200
commit8a4d77f990b4453e42e3c2cc61df5175b39586d3 (patch)
treee05eb01f0e986af23e5320d75d2b7ac111cab3ba
parent9042693e283f65d9afb4906ed693a862a250664b (diff)
downloadlibgit2-8a4d77f990b4453e42e3c2cc61df5175b39586d3.tar.gz
path: don't let direach overwrite the callback's error message
This function deals with functions doing IO which means the amount of errors that can happen is quit large. It does not help if it always ovewrites the underlying error message with a less understandable version of "something went wrong". Instead, only use this generic message if there was no error set by the callback.
-rw-r--r--src/path.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/path.c b/src/path.c
index df6762c3a..81b4d51df 100644
--- a/src/path.c
+++ b/src/path.c
@@ -1060,11 +1060,13 @@ int git_path_direach(
if ((error = git_buf_put(path, de_path, de_len)) < 0)
break;
+ giterr_clear();
error = fn(arg, path);
git_buf_truncate(path, wd_len); /* restore path */
- if (error != 0) {
+ /* Only set our own error if the callback did not set one already */
+ if (error != 0 && !giterr_last()) {
giterr_set_after_callback(error);
break;
}