On Sat, 2010-05-01 at 19:33 -0700, Junio C Hamano wrote: > Alan Hourihane <alanh@xxxxxxxxxxxxxx> writes: > > > Just joined as I'm compiling git on a new platform and wondered if > > someone can help solve a problem with the definition of S_IFGITLINK. > > Yikes. The current codebase pretty much assumes that IFREG is 0100000, > IFDIR 0040000, and IFLNK 0120000, and the bits read from "struct stat" and > the mode bits we store in the index and tree objects are interchangeable. > > Yes, that assumption is a gross POSIX violation but we so far haven't seen > any platform that matters in real life that assigns the IFMT bits > differently. > > We would need to: > > (1) rename S_IFGITLINK to GIT_S_IFMODULE; > > (2) define GIT_S_IF{REG,DIR,LNK} as 0100000, 0040000, and 0120000; > > (3) write MODE_SYSTEM_TO_GIT() macro to convert from S_IF{REG,DIR,LNK} we > read from struct stat to the "canonical" GIT_S_IF{REG,DIR,LNK} > values; and > > (4) change all the code that read mode from struct stat and use it to > first use MODE_SYSTEM_TO_GIT(). > > Currently 'git grep -e "S_IF[A-Z]" -e "struct stat"' reports around 250 > hits, so it is not infeasible amount of work, but it is not a trivial and > mechanical replacement, either. I or somebody need to set aside a block > of time to do this clean-up and audit the result. > > Thanks for a report. No problem. Thanks for taking the challenge and sorting it out. Let me know if there's anywhere I can help, test, or debug. Thanks again! Alan. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html