summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Troan <ewt@src.gnome.org>1998-07-27 18:53:42 +0000
committerErik Troan <ewt@src.gnome.org>1998-07-27 18:53:42 +0000
commitd965565d52b2cd8d390848d4cf3f8bb47558f666 (patch)
treef5cf91e850687816b665843c2ca24035a9e123e6
parentc9044dc764aff764e8fd9621af31a7e47ec5da69 (diff)
downloadgnome-common-d965565d52b2cd8d390848d4cf3f8bb47558f666.tar.gz
*** empty log message ***
svn path=/trunk/; revision=295
-rw-r--r--support/findme.c47
-rw-r--r--support/findme.h6
2 files changed, 53 insertions, 0 deletions
diff --git a/support/findme.c b/support/findme.c
new file mode 100644
index 0000000..f2e764e
--- /dev/null
+++ b/support/findme.c
@@ -0,0 +1,47 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#if HAVE_ALLOCA_H
+# include <alloca.h>
+#endif
+
+#include "findme.h"
+
+char * findProgramPath(char * argv0) {
+ char * path = getenv("PATH");
+ char * pathbuf;
+ char * start, * chptr;
+ char * buf;
+
+ /* If there is a / in the argv[0], it has to be an absolute
+ path */
+ if (strchr(argv0, '/'))
+ return strdup(argv0);
+
+ if (!path) return NULL;
+
+ start = pathbuf = alloca(strlen(path) + 1);
+ buf = malloc(strlen(path) + strlen(argv0) + 2);
+ strcpy(pathbuf, path);
+
+ chptr = NULL;
+ do {
+ if ((chptr = strchr(start, ':')))
+ *chptr = '\0';
+ sprintf(buf, "%s/%s", start, argv0);
+
+ if (access(buf, X_OK))
+ return buf;
+
+ if (chptr)
+ start = chptr + 1;
+ else
+ start = NULL;
+ } while (start && *start);
+
+ free(buf);
+
+ return NULL;
+}
diff --git a/support/findme.h b/support/findme.h
new file mode 100644
index 0000000..b4f790a
--- /dev/null
+++ b/support/findme.h
@@ -0,0 +1,6 @@
+#ifndef H_FINDME
+#define H_FINDME
+
+char * findProgramPath(char * argv0);
+
+#endif