Thread (2 messages) flat view 2 messages, 2 authors, 2016-06-15

Re: [PATCH] Define a version of lstat(2) specially for copy operation

From: Johannes Sixt <hidden>
Date: 2016-06-15 22:46:24

Junio C Hamano schrieb:
Alex Riesen [off-list ref] writes:
quoted
So that Cygwin port can continue work around its supporting
library and get access to its faked file attributes.

Signed-off-by: Alex Riesen <redacted>
...
diff --git a/builtin-init-db.c b/builtin-init-db.c
index ee3911f..f3f781b 100644
--- a/builtin-init-db.c
+++ b/builtin-init-db.c
@@ -66,7 +66,7 @@ static void copy_templates_1(char *path, int baselen,
 		else
 			exists = 1;
 
-		if (lstat(template, &st_template))
+		if (lstat_for_copy(template, &st_template))
 			die("cannot stat template %s", template);
 
 		if (S_ISDIR(st_template.st_mode)) {
Yuck; that's a bit too ugly for generic code.  Will there be other places
that this needs to be used?  If so, we'd probably need to encourage its
use where appropriate, which is even uglier but we cannot avoid it...

Also when the underlying system does not know the executable bit, how
would this help?  I thought that earlier you said the part that checks if
it wants to execute hooks with access(X_OK) will fail, so...
The "underlying system" in this case is Cygwin, and it *does* have an
executable bit.

But the FS gymnastics that implement it are slow and affect all lstat()
calls, so we have replaced lstat() with a simpler and faster
implementation. Only that the replacement doesn't know about the X bit
anymore; it always returns mode 0666.

Therefore, if a file is created whose mode is influenced by the fast
lstat(), then it will always be non-X. The access(, X_OK) call on the hook
script would do the right thing if only the script were created with the
correct mode. access(, X_OK) fails because the file was created with non-X
permissions.

-- Hannes
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help