[klibc] [klibc:master] readlink: Handle multiple input arguments

klibc-bot for H. Peter Anvin hpa at linux.intel.com
Tue Apr 15 09:36:04 PDT 2014


Commit-ID:  1ba3e80738407d13bc4a71812578848b6f657e23
Gitweb:     http://git.kernel.org/?p=libs/klibc/klibc.git;a=commit;h=1ba3e80738407d13bc4a71812578848b6f657e23
Author:     H. Peter Anvin <hpa at linux.intel.com>
AuthorDate: Tue, 15 Apr 2014 09:34:45 -0700
Committer:  H. Peter Anvin <hpa at linux.intel.com>
CommitDate: Tue, 15 Apr 2014 09:34:45 -0700

readlink: Handle multiple input arguments

Handle multiple links as parguments passed to readlink().

Signed-off-by: H. Peter Anvin <hpa at linux.intel.com>

---
 usr/utils/readlink.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/usr/utils/readlink.c b/usr/utils/readlink.c
index 8b620fd..bf9501b 100644
--- a/usr/utils/readlink.c
+++ b/usr/utils/readlink.c
@@ -3,11 +3,11 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
-char *progname;
+const char *progname;
 
 static __noreturn usage(void)
 {
-	fprintf(stderr, "Usage: %s link\n", progname);
+	fprintf(stderr, "Usage: %s link...\n", progname);
 	exit(1);
 }
 
@@ -16,19 +16,22 @@ int main(int argc, char *argv[])
 	const char *name;
 	char link_name[PATH_MAX];
 	int rv;
+	int i;
 
 	progname = *argv++;
 
-	name = *argv++;
-	if (!name)
+	if (argc < 2)
 		usage();
 
-	rv = readlink(name, link_name, sizeof link_name - 1);
-	if (rv < 0) {
-		perror(name);
-		exit(1);
+	while ((name = *argv++)) {
+		rv = readlink(name, link_name, sizeof link_name - 1);
+		if (rv < 0) {
+			perror(name);
+			exit(1);
+		}
+		link_name[rv] = '\0';
+		puts(link_name);
 	}
-	link_name[rv] = '\0';
-	puts(link_name);
-	exit(0);
+
+	return 0;
 }


More information about the klibc mailing list