diff options
Diffstat (limited to 'toys/which.c')
-rw-r--r-- | toys/which.c | 71 |
1 files changed, 0 insertions, 71 deletions
diff --git a/toys/which.c b/toys/which.c deleted file mode 100644 index 4923859c..00000000 --- a/toys/which.c +++ /dev/null @@ -1,71 +0,0 @@ -/* vi: set sw=4 ts=4: - * - * which.c - Find executable files in $PATH. - * - * Copyright 2006 Rob landley <rob@landley.net> - * - * Not in SUSv3. - -USE_WHICH(NEWTOY(which, "<1a", TOYFLAG_USR|TOYFLAG_BIN)) - -config WHICH - bool "which" - default y - help - usage: which [-a] filename ... - - Search $PATH for executable files matching filename(s). - - -a Show all matches -*/ -#include "toys.h" - -// Find an exectuable file either at a path with a slash in it (absolute or -// relative to current directory), or in $PATH. Returns absolute path to file, -// or NULL if not found. - -static int which_in_path(char *filename) -{ - struct string_list *list; - - // If they gave us a path, don't worry about $PATH or -a - - if (strchr(filename, '/')) { - // Confirm it has the executable bit set, and it's not a directory. - if (!access(filename, X_OK)) { - struct stat st; - - if (!stat(filename, &st) && S_ISREG(st.st_mode)) { - puts(filename); - return 0; - } - return 1; - } - } - - // Search $PATH for matches. - list = find_in_path(getenv("PATH"), filename); - if (!list) return 1; - - // Print out matches - while (list) { - if (!access(list->str, X_OK)) { - puts(list->str); - // If we should stop at one match, do so - if (!toys.optflags) { - llist_traverse(list, free); - break; - } - } - free(llist_pop(&list)); - } - - return 0; -} - -void which_main(void) -{ - int i; - for (i=0; toys.optargs[i]; i++) - toys.exitval |= which_in_path(toys.optargs[i]); -} |