Fixed time command segfault with no arguments
[busybox4maemo] / 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) MAIN_EXTERNALLY_VISIBLE;
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         /* This matches what is seen on e.g. ubuntu
26          * "which" there is a shell script */
27         if (!getenv("PATH")) {
28                 putenv((char*)bb_PATH_root_path);
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 }