X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftal%2Fpath%2Fpath.c;h=75894240b49db73a2fcb85df05cbb5207ee5d177;hp=b50120667c0759649d35292578f627ef644988c3;hb=e16aa40bed387c9575bc9c5d1b19ecca0e9cbda7;hpb=920ca95d6ef6cad6f33cddb235bc3cb9dea4d00c diff --git a/ccan/tal/path/path.c b/ccan/tal/path/path.c index b5012066..75894240 100644 --- a/ccan/tal/path/path.c +++ b/ccan/tal/path/path.c @@ -302,7 +302,7 @@ fail_take_to: char *path_readlink(const tal_t *ctx, const char *linkname) { - ssize_t len, maxlen = 64; /* good first guess. */ + ssize_t maxlen = 64; /* good first guess. */ char *ret = NULL; if (unlikely(!linkname) && is_taken(linkname)) @@ -311,19 +311,20 @@ fail_take_to: ret = tal_arr(ctx, char, maxlen + 1); while (ret) { - len = readlink(linkname, ret, maxlen); + ssize_t len = readlink(linkname, ret, maxlen); + if (len < 0) goto fail; - if (len < maxlen) + + if (len < maxlen) { + ret[len] = '\0'; break; + } if (!tal_resize(&ret, maxlen *= 2 + 1)) goto fail; } - if (ret) - ret[len] = '\0'; - out: if (taken(linkname)) tal_free(linkname);