X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/b348deae3ddbb25802a5b533d91e06832212b48a..8f7a38336d8a0804aef0635955f4ed7dcc49e0ee:/popt/findme.c diff --git a/popt/findme.c b/popt/findme.c index 6d1b41c1..f2ad05bb 100644 --- a/popt/findme.c +++ b/popt/findme.c @@ -9,7 +9,7 @@ const char * findProgramPath(const char * argv0) { char * path = getenv("PATH"); char * pathbuf; char * start, * chptr; - char * buf; + char * buf, *local = NULL; /* If there is a / in the argv[0], it has to be an absolute path */ @@ -18,7 +18,7 @@ const char * findProgramPath(const char * argv0) { if (!path) return NULL; - start = pathbuf = alloca(strlen(path) + 1); + local = start = pathbuf = malloc(strlen(path) + 1); buf = malloc(strlen(path) + strlen(argv0) + 2); strcpy(pathbuf, path); @@ -28,8 +28,10 @@ const char * findProgramPath(const char * argv0) { *chptr = '\0'; sprintf(buf, "%s/%s", start, argv0); - if (!access(buf, X_OK)) - return buf; + if (!access(buf, X_OK)) { + if (local) free(local); + return buf; + } if (chptr) start = chptr + 1; @@ -38,6 +40,7 @@ const char * findProgramPath(const char * argv0) { } while (start && *start); free(buf); + if (local) free(local); return NULL; }