version 1.12, 2016/01/19 11:13:02 |
version 1.13, 2016/01/19 11:15:39 |
|
|
csexists(const char *cmd) |
csexists(const char *cmd) |
{ |
{ |
char fname[NFILEN], *dir, *path, *pathc, *tmp; |
char fname[NFILEN], *dir, *path, *pathc, *tmp; |
int cmdlen, dlen; |
int len, dlen; |
|
|
/* Special case if prog contains '/' */ |
/* Special case if prog contains '/' */ |
if (strchr(cmd, '/')) { |
if (strchr(cmd, '/')) { |
|
|
ewprintf("out of memory"); |
ewprintf("out of memory"); |
return (FALSE); |
return (FALSE); |
} |
} |
cmdlen = strlen(cmd); |
|
while ((dir = strsep(&path, ":")) != NULL) { |
while ((dir = strsep(&path, ":")) != NULL) { |
if (*dir == '\0') |
if (*dir == '\0') |
continue; |
continue; |
|
|
while (dir[dlen-1] == '/') |
while (dir[dlen-1] == '/') |
dir[--dlen] = '\0'; /* strip trailing '/' */ |
dir[--dlen] = '\0'; /* strip trailing '/' */ |
|
|
if (dlen + 1 + cmdlen >= sizeof(fname)) { |
len = snprintf(fname, sizeof(fname), "%s/%s", dir, cmd); |
|
if (len == -1 || len >= sizeof(fname)) { |
dobeep(); |
dobeep(); |
ewprintf("path too long"); |
ewprintf("path too long"); |
goto cleanup; |
goto cleanup; |
} |
} |
snprintf(fname, sizeof(fname), "%s/%s", dir, cmd); |
|
if(access(fname, F_OK) == 0) { |
if(access(fname, F_OK) == 0) { |
free(pathc); |
free(pathc); |
return (TRUE); |
return (TRUE); |