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);
 }