diff options
author | imp <imp@FreeBSD.org> | 1998-09-09 17:05:54 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 1998-09-09 17:05:54 +0000 |
commit | 587fe3b394ae2f8c9c4a6e9b600c17464ab62508 (patch) | |
tree | 0b04532ff30271f15eba1a136dc54a22f4c3bd77 /contrib/cvs | |
parent | 098e5b9a897e4a7344bcb8dcc9e5e46afab391f2 (diff) | |
download | FreeBSD-src-587fe3b394ae2f8c9c4a6e9b600c17464ab62508.zip FreeBSD-src-587fe3b394ae2f8c9c4a6e9b600c17464ab62508.tar.gz |
Use readlink correctly
Diffstat (limited to 'contrib/cvs')
-rw-r--r-- | contrib/cvs/src/filesubr.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/contrib/cvs/src/filesubr.c b/contrib/cvs/src/filesubr.c index 0ccc3df..c85fe60 100644 --- a/contrib/cvs/src/filesubr.c +++ b/contrib/cvs/src/filesubr.c @@ -771,6 +771,7 @@ xreadlink (link) { char *file = NULL; int buflen = BUFSIZ; + int linklen; if (!islink (link)) return NULL; @@ -782,13 +783,14 @@ xreadlink (link) { file = xrealloc (file, buflen); errno = 0; - readlink (link, file, buflen); + linklen = readlink (link, file, buflen - 1); buflen *= 2; } - while (errno == ENAMETOOLONG); + while (linklen == -1 && errno == ENAMETOOLONG); - if (errno) + if (linklen == -1) error (1, errno, "cannot readlink %s", link); + file[linklen] = '\0'; return file; } |