X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libbb%2Fxreadlink.c;h=14863d9d5f75cae98fdcdcba8235614677eced43;hb=ab24e18c7a32ee1637be19f239e9dd9d7c7f6534;hp=66f63b8838cfa4d47bb443f4f1d2d3687d1a3cff;hpb=8a633268ef478a31bd649d582ce07e9c26a4a03a;p=oweals%2Fbusybox.git diff --git a/libbb/xreadlink.c b/libbb/xreadlink.c index 66f63b883..14863d9d5 100644 --- a/libbb/xreadlink.c +++ b/libbb/xreadlink.c @@ -1,5 +1,7 @@ +/* vi: set sw=4 ts=4: */ /* - * xreadlink.c - safe implementation of readlink + * xreadlink.c - safe implementation of readlink. + * Returns a NULL on failure... */ #include @@ -12,23 +14,25 @@ #include #include "libbb.h" -extern char *xreadlink(const char *path) -{ - static const int GROWBY = 80; /* how large we will grow strings by */ +char *xreadlink(const char *path) +{ + enum { GROWBY = 80 }; /* how large we will grow strings by */ - char *buf = NULL; + char *buf = NULL; int bufsize = 0, readsize = 0; do { buf = xrealloc(buf, bufsize += GROWBY); readsize = readlink(path, buf, bufsize); /* 1st try */ - if (readsize == -1) - perror_msg("%s:%s", applet_name, path); - } + if (readsize == -1) { + bb_perror_msg("%s", path); + free(buf); + return NULL; + } + } while (bufsize < readsize + 1); buf[readsize] = '\0'; return buf; -} - +}