Commit 0aa60336 by Edward Thomson

Merge pull request #3132 from libgit2/cmn/path-direach-cberror

Provide error messages for git_path_direach operations
parents 9042693e edef91ee
...@@ -703,6 +703,9 @@ static int cp_by_fd(int ifd, int ofd, bool close_fd_when_done) ...@@ -703,6 +703,9 @@ static int cp_by_fd(int ifd, int ofd, bool close_fd_when_done)
error = (int)len; error = (int)len;
} }
if (error < 0)
giterr_set(GITERR_OS, "write error while copying file");
if (close_fd_when_done) { if (close_fd_when_done) {
p_close(ifd); p_close(ifd);
p_close(ofd); p_close(ofd);
...@@ -861,7 +864,8 @@ static int _cp_r_callback(void *ref, git_buf *from) ...@@ -861,7 +864,8 @@ static int _cp_r_callback(void *ref, git_buf *from)
/* make symlink or regular file */ /* make symlink or regular file */
if (info->flags & GIT_CPDIR_LINK_FILES) { if (info->flags & GIT_CPDIR_LINK_FILES) {
error = p_link(from->ptr, info->to.ptr); if ((error = p_link(from->ptr, info->to.ptr)) < 0)
giterr_set(GITERR_OS, "failed to link '%s'", from->ptr);
} else if (S_ISLNK(from_st.st_mode)) { } else if (S_ISLNK(from_st.st_mode)) {
error = cp_link(from->ptr, info->to.ptr, (size_t)from_st.st_size); error = cp_link(from->ptr, info->to.ptr, (size_t)from_st.st_size);
} else { } else {
......
...@@ -1060,11 +1060,13 @@ int git_path_direach( ...@@ -1060,11 +1060,13 @@ int git_path_direach(
if ((error = git_buf_put(path, de_path, de_len)) < 0) if ((error = git_buf_put(path, de_path, de_len)) < 0)
break; break;
giterr_clear();
error = fn(arg, path); error = fn(arg, path);
git_buf_truncate(path, wd_len); /* restore 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); giterr_set_after_callback(error);
break; break;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment