diff options
author | 2003-04-28 20:27:36 +0000 | |
---|---|---|
committer | 2003-04-28 20:27:36 +0000 | |
commit | 39cc657a0cc8e0c576caa1ce465cbf788c356fe6 (patch) | |
tree | c97f5621da7026885df4f9e4213edd8de146e90b /sys-devel/distcc/files/wrapper-1.1.patch | |
parent | mark 2.0.1 stable on all archs; bump revision for distcc-config cleanups (diff) | |
download | gentoo-2-39cc657a0cc8e0c576caa1ce465cbf788c356fe6.tar.gz gentoo-2-39cc657a0cc8e0c576caa1ce465cbf788c356fe6.tar.bz2 gentoo-2-39cc657a0cc8e0c576caa1ce465cbf788c356fe6.zip |
mark 2.0.1 stable on all archs; bump revision for distcc-config cleanups
Diffstat (limited to 'sys-devel/distcc/files/wrapper-1.1.patch')
-rw-r--r-- | sys-devel/distcc/files/wrapper-1.1.patch | 201 |
1 files changed, 0 insertions, 201 deletions
diff --git a/sys-devel/distcc/files/wrapper-1.1.patch b/sys-devel/distcc/files/wrapper-1.1.patch deleted file mode 100644 index d3e7e79d07d7..000000000000 --- a/sys-devel/distcc/files/wrapper-1.1.patch +++ /dev/null @@ -1,201 +0,0 @@ -diff -auNr distcc-1.1.orig/src/distcc.c distcc-1.1/src/distcc.c ---- distcc-1.1.orig/src/distcc.c 2003-01-27 04:13:06.000000000 -0800 -+++ distcc-1.1/src/distcc.c 2003-02-06 15:59:45.000000000 -0800 -@@ -477,6 +477,154 @@ - } - } - -+static char *dcc_safe_getcwd() -+{ -+ char *cwdstr; -+ size_t len = 200; -+ -+ do { -+ cwdstr = malloc(len); -+ if (NULL == cwdstr) break; -+ -+ if (NULL == getcwd(cwdstr, len)) { -+ free(cwdstr); -+ cwdstr = NULL; -+ if (ERANGE == errno) { -+ len += 200; -+ continue; -+ } -+ } -+ } while(0); -+ -+ if (NULL == cwdstr) { -+ rs_log_error("can't get working directory"); -+ exit(1); -+ } -+ -+ return cwdstr; -+} -+ -+/** -+ * Filter PATH past point that wrapper was called -+ */ -+static void dcc_wrapper_trunc_path(char *progname, char *path, char *argv[]) -+{ -+ static const char *envpath = "PATH="; -+ char *p, *n, *str; -+ char *ppath = NULL; -+ int len, maxlen, plen; -+ -+ maxlen = strlen(path) + strlen(envpath) + 1; -+ str = malloc(maxlen); -+ if (NULL == str) exit(1); -+ -+ /* if we were called explicitly, find the (partial) path */ -+ if (progname != argv[0]) { -+ /* eliminate this explicit path from PATH */ -+ char *cwdstr = NULL; -+ size_t cwdlen = 0; -+ -+ if ('/' != argv[0][0]) { -+ cwdstr = dcc_safe_getcwd(); -+ cwdlen = strlen(cwdstr); -+ /* or we could just error out and exit??? */ -+ } -+ -+ plen = progname - argv[0] - 1; -+ len = cwdlen + plen; -+ ppath = malloc(len); -+ if (NULL == ppath) exit(1); -+ -+ ppath[0] = 0; -+ if (NULL != cwdstr) { -+ strncpy(ppath, cwdstr, len); -+ ppath[cwdlen++] = '/'; -+ ppath[cwdlen] = 0; -+ free(cwdstr); -+ } -+ strncat(ppath, argv[0], cwdlen + plen); -+ rs_trace("looking for explicit path: %s\n", ppath); -+ } -+ else -+ ppath = NULL; -+ -+ for (n = p = path; NULL != n; p = n ? n + 1 : NULL) { -+ n = strchr(p, ':'); -+ if (NULL != n) -+ len = n - p; -+ else -+ len = strlen(p); -+ -+ if (NULL != ppath) { -+ /* check for partial path name match, -+ pmatch is last portion of path */ -+ rs_trace("checking for ppath in %s\n", p); -+ if (len != plen || 0 != strncmp(p, ppath, len)) -+ continue; -+ } -+ else { -+ strncpy(str, p, len); -+ snprintf(str + len, maxlen - len, "/%s", progname); -+ rs_trace("checking %s\n", str); -+ if (0 != access(str, X_OK)) -+ continue; -+ rs_trace("found %s\n", str); -+ } -+ /* getting here means either we found the path we ran in, or -+ we found the target program we're trying to run; -+ so PATH now starts at next entry */ -+ if (NULL != n) -+ p = n + 1; -+ else -+ p = ""; -+ break; -+ } -+ -+ /* if temp path, p, still contains something, reset PATH; -+ p will be NULL if relative or non-PATH invocation, so -+ the current path is probably free from recursion */ -+ if (NULL != p) { -+ strncpy(str, envpath, maxlen); -+ strncat(str, p, maxlen); -+ rs_trace("wrapper is setting %s\n", str); -+ n = strdup(str); -+ if ((NULL == n) || (-1 == putenv(n))) { -+ rs_log_error("putenv PATH failed"); -+ exit(1); -+ } -+ } -+ else -+ rs_trace("wrapper not modifying PATH"); -+ -+ free(str); -+ free(ppath); -+} -+ -+static char *dcc_support_wrapper(char *argv[]) -+{ -+ char *progname, *envstr; -+ -+ /* see if program was called with a full or partial path */ -+ if ((progname = strrchr(argv[0], '/')) != NULL) -+ progname++; -+ else -+ progname = argv[0]; -+ -+ if (NULL == (envstr = getenv("DISTCC_HOSTS"))) { -+ if (-1 == putenv("DISTCC_HOSTS=localhost")) { -+ rs_log_error("unable to set default DISTCC_HOSTS"); -+ exit(1); -+ } -+ } -+ -+ /* right now, we're only playing with path... but -+ wouldn't it be interesting to look at CHOST, too? */ -+ if (NULL != (envstr = getenv("PATH"))) -+ dcc_wrapper_trunc_path(progname, envstr, argv); -+ -+ return progname; -+} -+ - - /** - * distcc client entry point. -@@ -486,6 +634,7 @@ - * Performs basic setup and checks for distcc arguments, and then kicks of - * dcc_build_somewhere(). - **/ -+#include <libgen.h> - int main(int argc, char **argv) - { - int status; -@@ -495,17 +644,25 @@ - - dcc_set_trace_from_env(); - -- if (argc <= 1 || !strcmp(argv[1], "--help")) { -- dcc_show_usage(); -- exit(0); -- } else if (!strcmp(argv[1], "--version")) { -- dcc_show_version("distcc"); -- exit(0); -- } -- - dcc_recursion_safeguard(); - -- dcc_find_compiler(argv, &compiler_args); -+ if (NULL != strstr(basename(argv[0]), "distcc")) { -+ -+ if (argc <= 1 || !strcmp(argv[1], "--help")) { -+ dcc_show_usage(); -+ exit(0); -+ } else if (!strcmp(argv[1], "--version")) { -+ dcc_show_version("distcc"); -+ exit(0); -+ } -+ -+ dcc_find_compiler(argv, &compiler_args); -+ } -+ else { -+ char *progname = dcc_support_wrapper(argv); -+ dcc_shallowcopy_argv(argv, &compiler_args, 0); -+ compiler_args[0] = progname; -+ } - - dcc_exit(dcc_build_somewhere(compiler_args, &status)); - } |