diff options
author | Erik Troan <ewt@src.gnome.org> | 1998-07-27 18:53:42 +0000 |
---|---|---|
committer | Erik Troan <ewt@src.gnome.org> | 1998-07-27 18:53:42 +0000 |
commit | d965565d52b2cd8d390848d4cf3f8bb47558f666 (patch) | |
tree | f5cf91e850687816b665843c2ca24035a9e123e6 | |
parent | c9044dc764aff764e8fd9621af31a7e47ec5da69 (diff) | |
download | gnome-common-d965565d52b2cd8d390848d4cf3f8bb47558f666.tar.gz |
*** empty log message ***
svn path=/trunk/; revision=295
-rw-r--r-- | support/findme.c | 47 | ||||
-rw-r--r-- | support/findme.h | 6 |
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 |