diff --git a/core/org.eclipse.cdt.core.solaris/library/pfind.c b/core/org.eclipse.cdt.core.solaris/library/pfind.c index 7d48e79739a..7f7300c4954 100644 --- a/core/org.eclipse.cdt.core.solaris/library/pfind.c +++ b/core/org.eclipse.cdt.core.solaris/library/pfind.c @@ -1,74 +1,76 @@ -/* - * 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]; + + if (name == NULL) { + fprintf(stderr, "pfind(): Null argument.\n"); + return NULL; + } + + /* For absolute namer 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