freebsd-dev/usr.bin/getopt/getopt.c
Martin Cracauer 18b3ba267c 1) Fix the case where a shellscript using getopt is called with a
parameter that has space in it, both in getopt.c and in the manpage
   example.

2) Fix the example in the manpage. The set(1) command is required to
   return 0 (POSIX 1003.2, section 3.14.11), so you can't test for
   getopt's exit status like the example did:

  #! /bin/sh
  set -- `getopt abo: $*`
  if test $? != 0  # wrong, tests for set's exit status, which is
                   # always zero, no for getopt(1)'s.

Fixes PR bin/5845, which thought it was getopt's fault, but in fact
the manpage was wrong.

I also updated the example to be more useful and updated the BUGS
section.

PR:		bin/5845
1999-04-03 22:24:36 +00:00

31 lines
558 B
C

#include <stdio.h>
main(argc, argv)
int argc;
char *argv[];
{
extern int optind;
extern char *optarg;
int c;
int status = 0;
optind = 2; /* Past the program name and the option letters. */
while ((c = getopt(argc, argv, argv[1])) != -1)
switch (c) {
case '?':
status = 1; /* getopt routine gave message */
break;
default:
if (optarg != NULL)
printf(" -%c '%s'", c, optarg);
else
printf(" -%c", c);
break;
}
printf(" --");
for (; optind < argc; optind++)
printf(" %s", argv[optind]);
printf("\n");
exit(status);
}