aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2007-02-07 09:18:57 -0800
committerJunio C Hamano <junkio@cox.net>2007-02-07 09:18:57 -0800
commitfcee5a145d5a9e27afa8086c54e8f718a4a8f1cc (patch)
tree43d1597c8f4075a96083ff3bfa5d4ee35f251567
parent302da67472e322109e6299d38dd1a2c30bde9f4c (diff)
downloadgit-fcee5a145d5a9e27afa8086c54e8f718a4a8f1cc.tar.gz
git-fcee5a145d5a9e27afa8086c54e8f718a4a8f1cc.tar.xz
for-each-reflog: fix case for empty log directory
When we remove the last reflog in a directory, opendir() would succeed and we would iterate over its dirents, expecting retval to be initialized to zero and setting it to non-zero only upon seeing an error. If the directory is empty, oops!, we do not have anybody that touches retval. The problem is because we initialize retval to errno even on success from opendir(), which would leave the errno unmolested. Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--refs.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/refs.c b/refs.c
index 03e8dfec9..7e07fc4cb 100644
--- a/refs.c
+++ b/refs.c
@@ -1206,7 +1206,7 @@ int for_each_reflog_ent(const char *ref, each_reflog_ent_fn fn, void *cb_data)
static int do_for_each_reflog(const char *base, each_ref_fn fn, void *cb_data)
{
DIR *dir = opendir(git_path("logs/%s", base));
- int retval = errno;
+ int retval = 0;
if (dir) {
struct dirent *de;
@@ -1246,6 +1246,8 @@ static int do_for_each_reflog(const char *base, each_ref_fn fn, void *cb_data)
free(log);
closedir(dir);
}
+ else
+ return errno;
return retval;
}