threads / patch / 5787

patchlock_ref_sha1_basic does not remove empty directories on BSD

Subject: [PATCH] lock_ref_sha1_basic does not remove empty directories on BSD

## tl;dr

2 messages between Oct 2, 2006 and Oct 3, 2006. Diffs are folded; open one to read it.

replies: 1people: 2as markdown or json

Dennis Stosberg· Oct 2, 2006, 17:23 UTC · lore

lock_ref_sha1_basic relies on errno beeing set to EISDIR by the call to read() in resolve_ref() to detect directories. But calling read() on a directory under NetBSD returns EPERM, and even succeeds for local filesystems on FreeBSD.

Signed-off-by: Dennis Stosberg <dennis@stosberg.net>
---
 refs.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)
Show changes to refs.c +6 −0
diff --git a/refs.c b/refs.c
index aa4c4e0..305c1a9 100644
--- a/refs.c
+++ b/refs.c
@@ -234,6 +234,12 @@ const char *resolve_ref(const char *ref,
 			}
 		}
 
+		/* Is it a directory? */
+		if (S_ISDIR(st.st_mode)) {
+			errno = EISDIR;
+			return NULL;
+		}
+
 		/*
 		 * Anything else, just open it and try to use it as
 		 * a ref
-- 
1.4.2
Junio C Hamano· Oct 3, 2006, 04:14 UTC · re: Dennis Stosberg · lore

Re: [PATCH] lock_ref_sha1_basic does not remove empty directories on BSD

Dennis Stosberg <dennis@stosberg.net> writes:
Show 6 quoted lines
> lock_ref_sha1_basic relies on errno beeing set to EISDIR by the
> call to read() in resolve_ref() to detect directories.  But calling
> read() on a directory under NetBSD returns EPERM, and even succeeds
> for local filesystems on FreeBSD.
>
> Signed-off-by: Dennis Stosberg <dennis@stosberg.net>
Thanks.

I've always wondered about the code that follows where you patched. It relies on either open() on a directory to fail, or read() from a file descriptor to return something other than what starts with 40-byte hexadecimal (or "ref: blah") to skip directories.

You might probably meant the patch primarily to fix the leftover empty directories issue in "next", but it is also the right thing to do for "master" (and even for "maint"), I think.

I'll apply it to "master" and then merge it into "next".

← back to recent threads