aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@linux.intel.com>2014-04-15 09:34:45 -0700
committerH. Peter Anvin <hpa@linux.intel.com>2014-04-15 09:34:45 -0700
commit1ba3e80738407d13bc4a71812578848b6f657e23 (patch)
tree22ffe9a3ecab966ed601b1183f6ca486f220164c
parent4a66f39cb53fde78c4518615382be83a9e2bff0b (diff)
downloadklibc-1ba3e80738407d13bc4a71812578848b6f657e23.tar.gz
readlink: Handle multiple input arguments
Handle multiple links as parguments passed to readlink(). Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
-rw-r--r--usr/utils/readlink.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/usr/utils/readlink.c b/usr/utils/readlink.c
index 8b620fdb63770..bf9501b2672dd 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;
}