On Mon, Feb 14, 2011 at 11:31:18AM +0000, David Julio wrote:
> Is the exit status of which(1)/whereis(1) correct?
> 
> $ which a b c
> which: a: Command not found
> which: b: Command not found
> which: c: Command not found
> 
> $ echo $?
> 2
> 
> $ which -a a b c
> which: a: Command not found
> which: b: Command not found
> which: c: Command not found
> 
> $ echo $?
> 1
> 
> If it is incorrect, below is my attempt to contribute.
> 
> Thank you for your time.
> 

this command is not covered by posix, so there's no reference there.
neither free nor netbsd document exit status for this command either.

i have no access to such systems, but maybe someone who does can tell us
how other bsd behave?

if it's a doc bug, it can be fixed easy enough. that would seem strange
behaviour though. if it's a software bug, any developer want to look at
this?

jmc

> Index: which.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/which/which.c,v
> retrieving revision 1.16
> diff -u -r1.16 which.c
> --- which.c   31 May 2010 14:01:49 -0000      1.16
> +++ which.c   14 Feb 2011 11:02:10 -0000
> @@ -55,11 +55,7 @@
> 
>       (void)setlocale(LC_ALL, "");
> 
> -     if (argc == 1)
> -             usage();
> -
> -     /* Don't accept command args but check since old whereis(1) used to */
> -     while ((ch = getopt(argc, argv, "a")) != -1) {
> +     while ((ch = getopt(argc, argv, "a")) != -1)
>               switch (ch) {
>               case 'a':
>                       allmatches = 1;
> @@ -67,7 +63,11 @@
>               default:
>                       usage();
>               }
> -     }
> +     argc -= optind;
> +     argv += optind;
> +
> +     if (argc == 0)
> +             usage();
> 
>       /*
>        * which(1) uses user's $PATH.
> @@ -98,11 +98,11 @@
>       if (setuid(geteuid()))
>               err(1, "Can't set uid to %u", geteuid());
> 
> -     for (n = optind; n < argc; n++)
> +     for (n = 0; n < argc; n++)
>               if (findprog(argv[n], path, progmode, allmatches) == 0)
>                       notfound++;
> 
> -     exit((notfound == 0) ? 0 : ((notfound == argc - 1) ? 2 : 1));
> +     exit((notfound == 0) ? 0 : ((notfound == argc) ? 2 : 1));
>  }
> 
>  int

Reply via email to