introduce and use bb_basename()
[platform/upstream/busybox.git] / debianutils / which.c
1 /* vi: set sw=4 ts=4: */
2 /*
3  * Which implementation for busybox
4  *
5  * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
6  * Copyright (C) 2006 Gabriel Somlo <somlo at cmu.edu>
7  *
8  * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
9  *
10  * Based on which from debianutils
11  */
12
13 #include "libbb.h"
14
15 int which_main(int argc, char **argv);
16 int which_main(int argc, char **argv)
17 {
18         int status = EXIT_SUCCESS;
19         char *p;
20
21         if (argc <= 1 || argv[1][0] == '-') {
22                 bb_show_usage();
23         }
24
25 /* We shouldn't do this. Ever. Not our business.
26         if (!getenv("PATH")) {
27                 putenv((char*)bb_PATH_root_path);
28         }
29 */
30
31         while (--argc > 0) {
32                 argv++;
33                 if (strchr(*argv, '/')) {
34                         if (execable_file(*argv)) {
35                                 puts(*argv);
36                                 continue;
37                         }
38                 } else {
39                         p = find_execable(*argv);
40                         if (p) {
41                                 puts(p);
42                                 free(p);
43                                 continue;
44                         }
45                 }
46                 status = EXIT_FAILURE;
47         }
48
49         fflush_stdout_and_exit(status);
50 }