From 8102a961b83afdee7341f2fc4bbb9fc3d9efd295 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Tue, 7 Jun 2011 16:51:31 +0200 Subject: [PATCH 1/2] Add test for git_filebuf_open error code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Carlos Martín Nieto --- tests/t00-core.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/t00-core.c b/tests/t00-core.c index 9498178cf..5cd4025d3 100644 --- a/tests/t00-core.c +++ b/tests/t00-core.c @@ -26,6 +26,7 @@ #include "vector.h" #include "fileops.h" +#include "filebuf.h" BEGIN_TEST(string0, "compare prefixes") must_be_true(git__prefixcmp("", "") == 0); @@ -661,6 +662,15 @@ BEGIN_TEST(dirent4, "make sure that strange looking filenames ('..c') are traver must_pass(knockdown(&odd)); END_TEST +BEGIN_TEST(filebuf0, "make sure git_filebuf_open doesn't delete an existing lock") + git_filebuf file; + char test[] = "test", testlock[] = "test.lock"; + + must_pass(gitfo_creat(testlock, 0744)); + must_fail(git_filebuf_open(&file, test, 0)); + must_pass(gitfo_exists(testlock)); + must_pass(gitfo_unlink(testlock)); +END_TEST BEGIN_SUITE(core) ADD_TEST(string0); @@ -683,4 +693,6 @@ BEGIN_SUITE(core) ADD_TEST(dirent2); ADD_TEST(dirent3); ADD_TEST(dirent4); + + ADD_TEST(filebuf0); END_SUITE From bb9272dd7af68590452cbf91b0b8583e22f0c066 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Tue, 7 Jun 2011 17:03:07 +0200 Subject: [PATCH 2/2] filebuf cleanup: only unlink lockfile if we've opened it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a check for the file descriptor in git_filebuf_cleanup. Without it, an existing lockfile would be deleted if we tried to acquire it (but failed, as the lockfile already existed). Signed-off-by: Carlos Martín Nieto --- src/filebuf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/filebuf.c b/src/filebuf.c index d0579b16b..ca13e6181 100644 --- a/src/filebuf.c +++ b/src/filebuf.c @@ -75,7 +75,7 @@ void git_filebuf_cleanup(git_filebuf *file) if (file->fd >= 0) gitfo_close(file->fd); - if (file->path_lock && gitfo_exists(file->path_lock) == GIT_SUCCESS) + if (file->fd >= 0 && file->path_lock && gitfo_exists(file->path_lock) == GIT_SUCCESS) gitfo_unlink(file->path_lock); if (file->digest)