On Sun, 16 Aug 2009, Junio C Hamano wrote: > > -/* "careful lstat()" */ > -extern int check_path(const char *path, int len, struct stat *st); > - > #define REFRESH_REALLY 0x0001 /* ignore_valid */ > #define REFRESH_UNMERGED 0x0002 /* allow unmerged */ > #define REFRESH_QUIET 0x0004 /* be quiet about it */ > diff --git a/entry.c b/entry.c > index f276cf3..6813f8a 100644 > --- a/entry.c > +++ b/entry.c > @@ -179,9 +179,18 @@ static int write_entry(struct cache_entry *ce, char *path, const struct checkout > * This is like 'lstat()', except it refuses to follow symlinks > * in the path. > */ > -int check_path(const char *path, int len, struct stat *st) > +static int check_path(const char *path, int len, struct stat *st, > + const struct checkout *co) > { > - if (has_symlink_leading_path(path, len)) { > + if (co->base_dir_len) { > + const char *slash = path + len; > + while (path < slash && *slash != '/') > + slash--; > + if (!has_dirs_only_path(path, slash-path, co->base_dir_len)) { > + errno = ENOENT; > + return -1; > + } > + } else if (has_symlink_leading_path(path, len)) { Grr. Now 'check_path()' is no longer something generically useful. Could you perhaps instead only change 'checkout_entry()' to do this hack, and leave 'check_path()' as a generic replacement for "lstat()" that doesn't follow symlinks? Linus -- 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