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 <[email protected]>
---
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html