cdt/cdt_5_0_x/org.eclipse.cdt.core.aix/library/pfind.c
changeset 0 0e6d23e2b466
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cdt/cdt_5_0_x/org.eclipse.cdt.core.aix/library/pfind.c	Fri Apr 03 17:12:41 2009 +0100
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+/*
+ * pfind.c - Search for a binary in $PATH.
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+#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<argc; i++) {
+      fullpath = pfind(argv[i]);
+      if (fullpath == NULL)
+        printf("Unable to find %s in $PATH.\n", argv[i]);
+      else 
+        printf("Found %s @ %s.\n", argv[i], fullpath);
+   }
+}
+#endif