Larry suggested using concat_path_file() would be an even safer bet
for 'which'. I ageed, so I whipped this up -- which revealed a bug in concat_path_file. It turns out that that a '/' can be appended from either the path _or_ the filename, but only the former was checked. -Erik
This commit is contained in:
parent
a0ba9f45fb
commit
044a72d0d5
@ -53,10 +53,9 @@ extern int which_main(int argc, char **argv)
|
||||
argv++;
|
||||
found = 0;
|
||||
for (i = 0; i < count; i++) {
|
||||
char buf[strlen(path_n)+strlen(*argv)+2];
|
||||
strcpy (buf, path_n);
|
||||
strcat (buf, "/");
|
||||
strcat (buf, *argv);
|
||||
char *buf;
|
||||
buf = concat_path_file(buf, path_n);
|
||||
buf = concat_path_file(buf, *argv);
|
||||
if (stat (buf, &filestat) == 0
|
||||
&& filestat.st_mode & S_IXUSR)
|
||||
{
|
||||
|
@ -15,9 +15,11 @@ extern char *concat_path_file(const char *path, const char *filename)
|
||||
int flg_slash = 1;
|
||||
|
||||
l = strlen(path);
|
||||
if(l>0 && path[l-1] == '/')
|
||||
if (l>0 && path[l-1] == '/')
|
||||
flg_slash--;
|
||||
l += strlen(filename);
|
||||
if (l>0 && filename[0] == '/')
|
||||
flg_slash--;
|
||||
outbuf = xmalloc(l+1+flg_slash);
|
||||
sprintf(outbuf, (flg_slash ? "%s/%s" : "%s%s"), path, filename);
|
||||
return outbuf;
|
||||
|
7
which.c
7
which.c
@ -53,10 +53,9 @@ extern int which_main(int argc, char **argv)
|
||||
argv++;
|
||||
found = 0;
|
||||
for (i = 0; i < count; i++) {
|
||||
char buf[strlen(path_n)+strlen(*argv)+2];
|
||||
strcpy (buf, path_n);
|
||||
strcat (buf, "/");
|
||||
strcat (buf, *argv);
|
||||
char *buf;
|
||||
buf = concat_path_file(buf, path_n);
|
||||
buf = concat_path_file(buf, *argv);
|
||||
if (stat (buf, &filestat) == 0
|
||||
&& filestat.st_mode & S_IXUSR)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user