This removes another place where the path name is arbitrarily limited. This gets rid of a warning %s: symlink too long even though strbuf_readlink() in fact still limits the length of what it can handle to something like 2*PATH_MAX. But (1) the limit is now much longer, and (2) strbuf_readlink() doesn't return enough information to distinguish this problem from other symlink-reading problems, so just let it go. Signed-off-by: Michael Haggerty <mhagger@xxxxxxxxxxxx> --- lockfile.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/lockfile.c b/lockfile.c index 931ebbd..0ade314 100644 --- a/lockfile.c +++ b/lockfile.c @@ -128,30 +128,25 @@ static void trim_last_path_elm(struct strbuf *path) static void resolve_symlink(struct strbuf *path) { int depth = MAXDEPTH; + struct strbuf link; + + strbuf_init(&link, path->len); while (depth--) { - char link[PATH_MAX]; - int link_len = readlink(path->buf, link, sizeof(link)); - if (link_len < 0) { - /* not a symlink anymore */ - return; - } - if (link_len >= sizeof(link)) { - warning("%s: symlink too long", path->buf); - return; - } - /* readlink() never null-terminates */ - link[link_len] = '\0'; + if (strbuf_readlink(&link, path->buf, path->len) < 0) + break; - if (is_absolute_path(link)) + if (is_absolute_path(link.buf)) /* an absolute path replaces the whole path: */ strbuf_setlen(path, 0); else /* a relative path replaces the last element of path: */ trim_last_path_elm(path); - strbuf_add(path, link, link_len); + strbuf_addbuf(path, &link); } + + strbuf_release(&link); } /* We append ".lock" to the filename to derive the lockfile name: */ -- 1.9.0 -- 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