X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Firssi%2Fsrc%2Flib-popt%2Ffindme.c;fp=apps%2Firssi%2Fsrc%2Flib-popt%2Ffindme.c;h=fae8f032b1a734335829e93b373b5ca52f6a5217;hb=23c5df1c8b0bfe539d3fa65802186e6e09e044aa;hp=0000000000000000000000000000000000000000;hpb=0f9738ce962b8498bbed0a75d5fb6fa127e3577f;p=silc.git diff --git a/apps/irssi/src/lib-popt/findme.c b/apps/irssi/src/lib-popt/findme.c new file mode 100644 index 00000000..fae8f032 --- /dev/null +++ b/apps/irssi/src/lib-popt/findme.c @@ -0,0 +1,54 @@ +/* (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 "common.h" + +#ifdef __NeXT +/* access macros are not declared in non posix mode in unistd.h - + don't try to use posix on NeXTstep 3.3 ! */ +#include +#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 g_strdup(argv0); + + if (!path) return NULL; + + start = pathbuf = g_strdup(path); + buf = g_malloc(strlen(path) + strlen(argv0) + 2); + + chptr = NULL; + do { + if ((chptr = strchr(start, ':'))) + *chptr = '\0'; + sprintf(buf, "%s/%s", start, argv0); + +#ifndef WIN32 + if (!access(buf, X_OK)) { + g_free(pathbuf); + return buf; + } +#endif + + if (chptr) + start = chptr + 1; + else + start = NULL; + } while (start && *start); + + g_free(pathbuf); + free(buf); + + return NULL; +}