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. 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