summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorray <ray@openbsd.org>2006-05-08 22:33:04 +0000
committerray <ray@openbsd.org>2006-05-08 22:33:04 +0000
commit2d58d79450f7e63c2abd76a42e5db7d05312a16b (patch)
tree42f2ae1c79a8f18977faa348e6d98935930063bd
parentUse warnx() when errno is not set. (diff)
downloadwireguard-openbsd-2d58d79450f7e63c2abd76a42e5db7d05312a16b.tar.xz
wireguard-openbsd-2d58d79450f7e63c2abd76a42e5db7d05312a16b.zip
This change:
- checks for realpath(3) failure - adds usage() - uses <err.h> - KNF - prevents saving strlen() return value into an int OK kjell@.
-rw-r--r--usr.bin/readlink/readlink.c47
1 files changed, 25 insertions, 22 deletions
diff --git a/usr.bin/readlink/readlink.c b/usr.bin/readlink/readlink.c
index 00b37d55a29..44d52820b68 100644
--- a/usr.bin/readlink/readlink.c
+++ b/usr.bin/readlink/readlink.c
@@ -1,5 +1,5 @@
/*
- * $OpenBSD: readlink.c,v 1.19 2003/06/10 22:20:50 deraadt Exp $
+ * $OpenBSD: readlink.c,v 1.20 2006/05/08 22:33:04 ray Exp $
*
* Copyright (c) 1997
* Kenneth Stailey (hereinafter referred to as the author)
@@ -27,19 +27,20 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <err.h>
#include <limits.h>
-#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+__dead void usage(void);
+
int
main(int argc, char *argv[])
{
+ int ch, n, fflag = 0, nflag = 0;
char buf[PATH_MAX];
- int n, ch, nflag = 0, fflag = 0;
- extern int optind;
while ((ch = getopt(argc, argv, "fn")) != -1)
switch (ch) {
@@ -50,31 +51,24 @@ main(int argc, char *argv[])
nflag = 1;
break;
default:
- (void)fprintf(stderr,
- "usage: readlink [-n] [-f] symlink\n");
- exit(1);
+ usage();
}
argc -= optind;
argv += optind;
- if (argc != 1) {
- fprintf(stderr, "usage: readlink [-n] [-f] symlink\n");
- exit(1);
- }
+ if (argc != 1)
+ usage();
- n = strlen(argv[0]);
- if (n > PATH_MAX - 1) {
- fprintf(stderr,
- "readlink: filename longer than PATH_MAX-1 (%d)\n",
- PATH_MAX - 1);
- exit(1);
- }
+ if (strlen(argv[0]) > PATH_MAX - 1)
+ errx(1, "filename longer than PATH_MAX-1 (%d)",
+ PATH_MAX - 1);
- if (fflag)
- realpath(argv[0], buf);
- else {
+ if (fflag) {
+ if (realpath(argv[0], buf) == NULL)
+ err(1, "%s", argv[0]);
+ } else {
if ((n = readlink(argv[0], buf, sizeof buf-1)) < 0)
- exit(1);
+ err(1, "%s", argv[0]);
buf[n] = '\0';
}
@@ -83,3 +77,12 @@ main(int argc, char *argv[])
putchar('\n');
exit(0);
}
+
+void
+usage(void)
+{
+ extern char *__progname;
+
+ fprintf(stderr, "usage: %s [-n] [-f] symlink\n", __progname);
+ exit(1);
+}