Date: Sun, 28 Dec 1997 01:51:33 -0500 (EST) From: Matthew Hunt <mph@pobox.com> To: FreeBSD-gnats-submit@FreeBSD.ORG Subject: bin/5387: md5(1) does not use getopt(3) Message-ID: <199712280651.BAA06973@mph124.rh.psu.edu> Resent-Message-ID: <199712280700.XAA23687@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 5387 >Category: bin >Synopsis: md5(1) does not use getopt(3) >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Class: change-request >Submitter-Id: current-users >Arrival-Date: Sat Dec 27 23:00:01 PST 1997 >Last-Modified: >Originator: Matthew Hunt >Organization: none >Release: FreeBSD 2.2.5-STABLE i386 >Environment: FreeBSD mph124.rh.psu.edu 2.2.5-STABLE FreeBSD 2.2.5-STABLE #1: Fri Dec 19 11:07:21 EST 1997 hunt@mph124.rh.psu.edu:/usr/src/sys/compile/WOPR i386 $Id: md5.c,v 1.7.2.1 1997/09/03 06:49:48 jkh Exp $ CVS web interface shows 3.0-CURRENT md5.c to be essentially identical. >Description: /sbin/md5 does not use the getopt(3) interface to parse command-line options. The result is a non-standard interface. IMHO, the differences from getopt(3) are not features. For example, the argument to "-s" must be given as "-sstring" and not "-s string". >How-To-Repeat: >Fix: Apply the following patch. md5(1) will then behave more like the other Unix commands. This patch also provides usage help if an invalid option is given. diff -Nru /usr/src/sbin/md5/md5.1 md5/md5.1 --- /usr/src/sbin/md5/md5.1 Sat Sep 6 12:25:42 1997 +++ md5/md5.1 Sat Dec 27 02:35:42 1997 @@ -9,7 +9,7 @@ .Op Fl p .Op Fl t .Op Fl x -.Op Fl s Ns Ar string +.Op Fl s Ar string .Op Ar filename Ns Pq s .Sh DESCRIPTION .Nm @@ -34,7 +34,7 @@ .Ar filename Ns Pq s must be the last objects on the command line. .Bl -tag -width Fl -.It Fl s Ns Ar string +.It Fl s Ar string prints a checksum of the given .Dq string . .It Fl p diff -Nru /usr/src/sbin/md5/md5.c md5/md5.c --- /usr/src/sbin/md5/md5.c Sat Sep 6 12:25:42 1997 +++ md5/md5.c Sat Dec 27 02:34:14 1997 @@ -40,6 +40,7 @@ static void MDTimeTrial PROTO_LIST((void)); static void MDTestSuite PROTO_LIST((void)); static void MDFilter PROTO_LIST((int)); +static void usage PROTO_LIST((void)); /* Main driver. @@ -58,25 +59,38 @@ int i; char *p; char buf[33]; + extern char *optarg; + extern int optind; - if (argc > 1) - for (i = 1; i < argc; i++) - if (argv[i][0] == '-' && argv[i][1] == 's') - MDString(argv[i] + 2); - else if (strcmp(argv[i], "-t") == 0) + if (argc > 1) { + while ((i = getopt(argc, argv, "s:tpx")) != EOF) { + switch(i) { + case 's': + MDString(optarg); + break; + case 't': MDTimeTrial(); - else if (strcmp(argv[i], "-p") == 0) + break; + case 'p': MDFilter(1); - else if (strcmp(argv[i], "-x") == 0) + break; + case 'x': MDTestSuite(); - else { - p = MD5File(argv[i],buf); - if (!p) - perror(argv[i]); - else - printf("MD5 (%s) = %s\n", argv[i], p); + break; + default: + usage(); } - else + } + + while (optind < argc) { + p = MD5File(argv[optind],buf); + if (!p) + perror(argv[optind]); + else + printf("MD5 (%s) = %s\n", argv[optind], p); + optind++; + } + } else MDFilter(0); return (0); @@ -174,4 +188,16 @@ MD5Update(&context, buffer, len); } printf("%s\n", MD5End(&context,buf)); +} + +/* + * Displays a usage summary. + */ + +static void +usage(void) +{ + (void)fprintf(stderr, + "usage: md5 [-p] [-t] [-x] [-s string] [filename(s)]\n"); + exit(1); } >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199712280651.BAA06973>