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++;
|
argv++;
|
||||||
found = 0;
|
found = 0;
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
char buf[strlen(path_n)+strlen(*argv)+2];
|
char *buf;
|
||||||
strcpy (buf, path_n);
|
buf = concat_path_file(buf, path_n);
|
||||||
strcat (buf, "/");
|
buf = concat_path_file(buf, *argv);
|
||||||
strcat (buf, *argv);
|
|
||||||
if (stat (buf, &filestat) == 0
|
if (stat (buf, &filestat) == 0
|
||||||
&& filestat.st_mode & S_IXUSR)
|
&& filestat.st_mode & S_IXUSR)
|
||||||
{
|
{
|
||||||
|
@ -15,9 +15,11 @@ extern char *concat_path_file(const char *path, const char *filename)
|
|||||||
int flg_slash = 1;
|
int flg_slash = 1;
|
||||||
|
|
||||||
l = strlen(path);
|
l = strlen(path);
|
||||||
if(l>0 && path[l-1] == '/')
|
if (l>0 && path[l-1] == '/')
|
||||||
flg_slash--;
|
flg_slash--;
|
||||||
l += strlen(filename);
|
l += strlen(filename);
|
||||||
|
if (l>0 && filename[0] == '/')
|
||||||
|
flg_slash--;
|
||||||
outbuf = xmalloc(l+1+flg_slash);
|
outbuf = xmalloc(l+1+flg_slash);
|
||||||
sprintf(outbuf, (flg_slash ? "%s/%s" : "%s%s"), path, filename);
|
sprintf(outbuf, (flg_slash ? "%s/%s" : "%s%s"), path, filename);
|
||||||
return outbuf;
|
return outbuf;
|
||||||
|
7
which.c
7
which.c
@ -53,10 +53,9 @@ extern int which_main(int argc, char **argv)
|
|||||||
argv++;
|
argv++;
|
||||||
found = 0;
|
found = 0;
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
char buf[strlen(path_n)+strlen(*argv)+2];
|
char *buf;
|
||||||
strcpy (buf, path_n);
|
buf = concat_path_file(buf, path_n);
|
||||||
strcat (buf, "/");
|
buf = concat_path_file(buf, *argv);
|
||||||
strcat (buf, *argv);
|
|
||||||
if (stat (buf, &filestat) == 0
|
if (stat (buf, &filestat) == 0
|
||||||
&& filestat.st_mode & S_IXUSR)
|
&& filestat.st_mode & S_IXUSR)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user