diff --git a/core/org.eclipse.cdt.core.linux/library/pfind.c b/core/org.eclipse.cdt.core.linux/library/pfind.c index 65de2a5cb16..d13dae5f0e2 100644 --- a/core/org.eclipse.cdt.core.linux/library/pfind.c +++ b/core/org.eclipse.cdt.core.linux/library/pfind.c @@ -1,69 +1,78 @@ -/* - * pfind.c - Search for a binary in $PATH. - */ - -#include -#include -#include -#include -#include - -#ifndef PATH_MAX -#define PATH_MAX 1024 -#endif - - -char *pfind(const char *name) -{ - char *tok; - char *sp; - char *path = getenv("PATH" ); - char FullPath[PATH_MAX+1]; - - if (name == NULL) { - fprintf(stderr, "pfind(): Null argument.\n"); - return NULL; - } - - if (path == NULL || strlen( path ) <= 0) { - fprintf(stderr, "Unable to get $PATH.\n"); - return NULL; - } - - // The value return by getenv() is readonly */ - path = strdup(path); - - tok = strtok_r(path, ":", &sp); - while (tok != NULL) { - //strcpy(FullPath, tok); - //strcat(FullPath, "/"); - //strcat(FullPath, name); - snprintf(FullPath, sizeof(FullPath) - 1, "%s/%s", tok, name); - - if (access(FullPath, X_OK | R_OK) == 0) { - free(path); - return strdup(FullPath); - } - - tok = strtok_r( NULL, ":", &sp ); - } - - free(path); - return NULL; -} - -#ifdef BUILD_WITH_MAIN -int main(int argc, char **argv) -{ - int i; - char *fullpath; - - for (i=1; i +#include +#include +#include +#include + +#ifndef PATH_MAX +#define PATH_MAX 1024 +#endif + + +char * pfind(const char *name) +{ + char *tok; + char *sp; + char *path; + char fullpath[PATH_MAX+1]; + + /* Sanity check. */ + if (name == NULL) { + fprintf(stderr, "pfind(): Null argument.\n"); + return NULL; + } + + /* For absolute name or name with a path, check if it is an executable. */ + if (name[0] == '/' || name[0] == '.') { + if (access(name, X_OK | R_OK) == 0) { + return strdup(name); + } + return NULL; + } + + /* Search in the PATH environment. */ + path = getenv("PATH" ); + + if (path == NULL || strlen(path) <= 0) { + fprintf(stderr, "Unable to get $PATH.\n"); + return NULL; + } + + /* The value return by getenv() is readonly */ + path = strdup(path); + + tok = strtok_r(path, ":", &sp); + while (tok != NULL) { + snprintf(fullpath, sizeof(fullpath) - 1, "%s/%s", tok, name); + + if (access(fullpath, X_OK | R_OK) == 0) { + free(path); + return strdup(fullpath); + } + + tok = strtok_r( NULL, ":", &sp ); + } + + free(path); + return NULL; +} + +#ifdef BUILD_WITH_MAIN +int main(int argc, char **argv) +{ + int i; + char *fullpath; + + for (i=1; i