summaryrefslogtreecommitdiff
path: root/source3/popt/findme.c
diff options
context:
space:
mode:
authorJim McDonough <jmcd@samba.org>2001-10-23 14:16:22 +0000
committerJim McDonough <jmcd@samba.org>2001-10-23 14:16:22 +0000
commitbe6edf50c4e76662cd80eab9d60182f2e4f02d24 (patch)
tree94b1de0f71446530fdbee48d46476b1742732897 /source3/popt/findme.c
parentb0152aaea09a1d082ee90954cdc8512d22b8d8ae (diff)
downloadsamba-be6edf50c4e76662cd80eab9d60182f2e4f02d24.tar.gz
samba-be6edf50c4e76662cd80eab9d60182f2e4f02d24.tar.bz2
samba-be6edf50c4e76662cd80eab9d60182f2e4f02d24.zip
Add popt for parsing commandline options
(This used to be commit df34e11d84a6fe89dc6654eb10de0a49383e1dea)
Diffstat (limited to 'source3/popt/findme.c')
-rw-r--r--source3/popt/findme.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/source3/popt/findme.c b/source3/popt/findme.c
new file mode 100644
index 0000000000..f2ad05bb3f
--- /dev/null
+++ b/source3/popt/findme.c
@@ -0,0 +1,46 @@
+/* (C) 1998 Red Hat Software, Inc. -- Licensing details are in the COPYING
+ file accompanying popt source distributions, available from
+ ftp://ftp.redhat.com/pub/code/popt */
+
+#include "system.h"
+#include "findme.h"
+
+const char * findProgramPath(const char * argv0) {
+ char * path = getenv("PATH");
+ char * pathbuf;
+ char * start, * chptr;
+ char * buf, *local = NULL;
+
+ /* If there is a / in the argv[0], it has to be an absolute
+ path */
+ if (strchr(argv0, '/'))
+ return xstrdup(argv0);
+
+ if (!path) return NULL;
+
+ local = start = pathbuf = malloc(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)) {
+ if (local) free(local);
+ return buf;
+ }
+
+ if (chptr)
+ start = chptr + 1;
+ else
+ start = NULL;
+ } while (start && *start);
+
+ free(buf);
+ if (local) free(local);
+
+ return NULL;
+}