forked from FDOS/freecom
-
Notifications
You must be signed in to change notification settings - Fork 0
/
which.c
90 lines (82 loc) · 2.2 KB
/
which.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/* $Id$
* WHERE.C - path functions.
*
*
*
* Comments:
*
* 07/15/95 (Tim Norman)
* started.
*
* 08/08/95 (Matt Rains)
* i have cleaned up the source code. changes now bring this source into
* guidelines for recommended programming practice.
*
* 12/12/95 (Steffan Kaiser & Tim Norman)
* added some patches to fix some things and make more efficient
*
* 1/6/96 (Tim Norman)
* fixed a stupid pointer mistake... Thanks to everyone who noticed it!
*
* 8/1/96 (Tim Norman)
* fixed a bug when getenv returns NULL
*
* 8/7/96 (Steffan Kaiser and Tim Norman)
* speed improvements and bug fixes
*
* 8/27/96 (Tim Norman)
* changed code to use pointers directly into PATH environment variable
* rather than making our own copy. This saves some memory, but requires
* we write our own function to copy pathnames out of the variable.
*
* 12/23/96 (Aaron Kaufman)
* Fixed a bug in get_paths() that did not point to the first PATH in the
* environment variable.
*
* 7/12/97 (Tim Norman)
* Apparently, Aaron's bugfix got lost, so I fixed it again.
*
* 16 July 1998 (John P. Price)
* Added stand alone code.
*
* 17 July 1998 (John P. Price)
* Rewrote find_which to use searchpath function
*
* 24-Jul-1998 (John P Price <[email protected]>)
* - fixed bug where didn't check all extensions when path was specified
*
* 27-Jul-1998 (John P Price <[email protected]>)
* - added config.h include
*
* 30-Jul-1998 (John P Price <[email protected]>)
* - fixed so that it find_which returns NULL if filename is not executable
* (does not have .bat, .com, or .exe extention). Before command would
* to execute any file with any extension (opps!)
*
* 2001/02/16 ska
* add: command WHICH
*/
#include "../config.h"
#include <assert.h>
#include <stdio.h>
#include "../include/cmdline.h"
#include "../include/command.h"
int cmd_which(char *param)
{
char **arg, *p;
int argc, optc, i;
if((arg = scanCmdline(param, 0, 0, &argc, &optc)) == 0)
return E_Other;
for(i = 0; i < argc; ++i) {
assert(arg[i]);
outs(arg[i]);
if((p = find_which(arg[i])) != 0) {
outc('\t');
puts(p);
} else {
outc('\n');
}
}
freep(arg);
return E_None;
}