=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/readlink/readlink.c,v retrieving revision 1.19 retrieving revision 1.20 diff -c -r1.19 -r1.20 *** src/usr.bin/readlink/readlink.c 2003/06/10 22:20:50 1.19 --- src/usr.bin/readlink/readlink.c 2006/05/08 22:33:04 1.20 *************** *** 1,5 **** /* ! * $OpenBSD: readlink.c,v 1.19 2003/06/10 22:20:50 deraadt Exp $ * * Copyright (c) 1997 * Kenneth Stailey (hereinafter referred to as the author) --- 1,5 ---- /* ! * $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,45 **** * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include - #include #include #include #include #include int main(int argc, char *argv[]) { char buf[PATH_MAX]; - int n, ch, nflag = 0, fflag = 0; - extern int optind; while ((ch = getopt(argc, argv, "fn")) != -1) switch (ch) { --- 27,46 ---- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + #include #include #include #include #include #include + __dead void usage(void); + int main(int argc, char *argv[]) { + int ch, n, fflag = 0, nflag = 0; char buf[PATH_MAX]; while ((ch = getopt(argc, argv, "fn")) != -1) switch (ch) { *************** *** 50,80 **** nflag = 1; break; default: ! (void)fprintf(stderr, ! "usage: readlink [-n] [-f] symlink\n"); ! exit(1); } argc -= optind; argv += optind; ! if (argc != 1) { ! fprintf(stderr, "usage: readlink [-n] [-f] symlink\n"); ! exit(1); ! } ! 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 (fflag) ! realpath(argv[0], buf); ! else { if ((n = readlink(argv[0], buf, sizeof buf-1)) < 0) ! exit(1); buf[n] = '\0'; } --- 51,74 ---- nflag = 1; break; default: ! usage(); } argc -= optind; argv += optind; ! if (argc != 1) ! usage(); ! if (strlen(argv[0]) > PATH_MAX - 1) ! errx(1, "filename longer than PATH_MAX-1 (%d)", ! PATH_MAX - 1); ! if (fflag) { ! if (realpath(argv[0], buf) == NULL) ! err(1, "%s", argv[0]); ! } else { if ((n = readlink(argv[0], buf, sizeof buf-1)) < 0) ! err(1, "%s", argv[0]); buf[n] = '\0'; } *************** *** 82,85 **** --- 76,88 ---- if (!nflag) putchar('\n'); exit(0); + } + + void + usage(void) + { + extern char *__progname; + + fprintf(stderr, "usage: %s [-n] [-f] symlink\n", __progname); + exit(1); }