On Fri, 12 Dec 2008, Linus Torvalds wrote: > > Now, admittedly git is probably being really annoyingly anal about this > all, and we probably should loosen the restrictions on it a bit, but I'd > like to know why it happens. I cannot recall this having been reported > before, so it's some specific filesystem or OS that causes this, I think. Anyway, the "loosen the symlink lstat() requirements" patch would likely look something like this. I can't really test it, though, since I only have filesystems that have matching lstat()/readlink() sizes. Linus --- sha1_file.c | 11 ++++++----- 1 files changed, 6 insertions(+), 5 deletions(-) diff --git a/sha1_file.c b/sha1_file.c index 0e021c5..222c793 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -2522,9 +2522,9 @@ int index_fd(unsigned char *sha1, int fd, struct stat *st, int write_object, int index_path(unsigned char *sha1, const char *path, struct stat *st, int write_object) { - int fd; + int fd, len; char *target; - size_t len; + size_t bufsize; switch (st->st_mode & S_IFMT) { case S_IFREG: @@ -2537,9 +2537,10 @@ int index_path(unsigned char *sha1, const char *path, struct stat *st, int write path); break; case S_IFLNK: - len = xsize_t(st->st_size); - target = xmalloc(len + 1); - if (readlink(path, target, len + 1) != st->st_size) { + bufsize = 1+xsize_t(st->st_size); + target = xmalloc(bufsize); + len = readlink(path, target, bufsize); + if (len < 0) { char *errstr = strerror(errno); free(target); return error("readlink(\"%s\"): %s", path, -- 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