diff options
author | H. Peter Anvin <hpa@linux.intel.com> | 2014-04-15 09:27:38 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2014-04-15 09:27:38 -0700 |
commit | 4a66f39cb53fde78c4518615382be83a9e2bff0b (patch) | |
tree | f68542d62d5fc87e9ddb6af6983f251ef0213ed5 | |
parent | a51893a6d52a8cdf247cb1bd10dd8987d4d7eb49 (diff) | |
download | klibc-4a66f39cb53fde78c4518615382be83a9e2bff0b.tar.gz |
readlink: Better buffer handling
- Allow PATH_MAX bytes, not just a hard-coded 128 bytes
- Just allocate the buffer on the stack, no need for malloc()
- Use puts() rather than printf()
Reported-by: Rafi Rubin <rafi@seas.upenn.edu>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
-rw-r--r-- | usr/utils/readlink.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/usr/utils/readlink.c b/usr/utils/readlink.c index 5ea4e41cd40a9..8b620fdb63770 100644 --- a/usr/utils/readlink.c +++ b/usr/utils/readlink.c @@ -13,8 +13,9 @@ static __noreturn usage(void) int main(int argc, char *argv[]) { - char *name, *link_name = NULL; - size_t max_siz = 128; + const char *name; + char link_name[PATH_MAX]; + int rv; progname = *argv++; @@ -22,15 +23,12 @@ int main(int argc, char *argv[]) if (!name) usage(); - link_name = malloc(max_siz); - if (!link_name) { - perror("malloc"); + rv = readlink(name, link_name, sizeof link_name - 1); + if (rv < 0) { + perror(name); exit(1); } - - if (readlink(name, link_name, max_siz) == -1) - exit(1); - printf("%s\n", link_name); - + link_name[rv] = '\0'; + puts(link_name); exit(0); } |