| #define COMPAT_CODE_ACCESS | 
 | #include "../git-compat-util.h" | 
 |  | 
 | /* Do the same thing access(2) does, but use the effective uid, | 
 |  * and don't make the mistake of telling root that any file is | 
 |  * executable.  This version uses stat(2). | 
 |  */ | 
 | int git_access(const char *path, int mode) | 
 | { | 
 | 	struct stat st; | 
 |  | 
 | 	/* do not interfere a normal user */ | 
 | 	if (geteuid()) | 
 | 		return access(path, mode); | 
 |  | 
 | 	if (stat(path, &st) < 0) | 
 | 		return -1; | 
 |  | 
 | 	/* Root can read or write any file. */ | 
 | 	if (!(mode & X_OK)) | 
 | 		return 0; | 
 |  | 
 | 	/* Root can execute any file that has any one of the execute | 
 | 	 * bits set. | 
 | 	 */ | 
 | 	if (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) | 
 | 		return 0; | 
 |  | 
 | 	errno = EACCES; | 
 | 	return -1; | 
 | } |