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>
diff --git a/usr/utils/readlink.c b/usr/utils/readlink.c
index 5ea4e41..8b620fd 100644
--- a/usr/utils/readlink.c
+++ b/usr/utils/readlink.c
@@ -13,8 +13,9 @@
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 @@
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);
}