Hi Matheus, On Tue, 18 Jun 2019, Matheus Tavares wrote: >[...] > +/* > + * Look for a recursive symlink at iter->base.path pointing to any directory on > + * the previous stack levels. If it is found, return 1. If not, return 0. > + */ > +static int find_recursive_symlinks(struct dir_iterator_int *iter) > +{ > + int i; > + > + if (!(iter->flags & DIR_ITERATOR_FOLLOW_SYMLINKS) || > + !S_ISDIR(iter->base.st.st_mode)) > + return 0; > > + for (i = 0; i < iter->levels_nr; ++i) > + if (iter->base.st.st_ino == iter->levels[i].ino) This does not work on Windows. Remember, Git relies on (too) many areas where Linux is strong, and the `lstat()` call is one of them. Therefore, Git overuses that call. In the Git for Windows project, we struggled a bit to emulate it in the best way. It is pretty expensive, for example, to find out the number of hard links, the device ID, an equivalent of the inode, etc. Many `lstat()` calls are really only interested in the `mtime`, though, meaning that we would waste a ton of time if we tried to be more faithful in our `lstat()` emulation. Therefore, we simply assign `0` as inode. Sure, this violates the POSIX standard, but imagine this: the FAT filesystem (which is still in use!) does not have _anything_ resembling inodes. I fear, therefore, that we will require at least a workaround for the situation where `st_ino` is always zero. Ciao, Johannes