source: MondoRescue/branches/3.3/mindi-busybox/debianutils/which.c@ 3621

Last change on this file since 3621 was 3621, checked in by Bruno Cornec, 7 years ago

New 3?3 banch for incorporation of latest busybox 1.25. Changing minor version to handle potential incompatibilities.

File size: 1.6 KB
Line 
1/* vi: set sw=4 ts=4: */
2/*
3 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
4 * Copyright (C) 2006 Gabriel Somlo <somlo at cmu.edu>
5 *
6 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
7 */
8//config:config WHICH
9//config: bool "which"
10//config: default y
11//config: help
12//config: which is used to find programs in your PATH and
13//config: print out their pathnames.
14
15//applet:IF_WHICH(APPLET(which, BB_DIR_USR_BIN, BB_SUID_DROP))
16
17//kbuild:lib-$(CONFIG_WHICH) += which.o
18
19//usage:#define which_trivial_usage
20//usage: "[COMMAND]..."
21//usage:#define which_full_usage "\n\n"
22//usage: "Locate a COMMAND"
23//usage:
24//usage:#define which_example_usage
25//usage: "$ which login\n"
26//usage: "/bin/login\n"
27
28#include "libbb.h"
29
30int which_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
31int which_main(int argc UNUSED_PARAM, char **argv)
32{
33 const char *env_path;
34 int status = 0;
35
36 env_path = getenv("PATH");
37 if (!env_path)
38 env_path = bb_default_root_path;
39
40 opt_complementary = "-1"; /* at least one argument */
41 getopt32(argv, "a");
42 argv += optind;
43
44 do {
45 int missing = 1;
46
47 /* If file contains a slash don't use PATH */
48 if (strchr(*argv, '/')) {
49 if (file_is_executable(*argv)) {
50 missing = 0;
51 puts(*argv);
52 }
53 } else {
54 char *path;
55 char *tmp;
56 char *p;
57
58 path = tmp = xstrdup(env_path);
59 while ((p = find_executable(*argv, &tmp)) != NULL) {
60 missing = 0;
61 puts(p);
62 free(p);
63 if (!option_mask32) /* -a not set */
64 break;
65 }
66 free(path);
67 }
68 status |= missing;
69 } while (*++argv);
70
71 return status;
72}
Note: See TracBrowser for help on using the repository browser.