1 From 5ba2b678af30b8b9693704734c398132af6caf32 Mon Sep 17 00:00:00 2001
2 From: Jie Meng <zuxy.meng@gmail.com>
3 Date: Mon, 9 Feb 2009 09:00:00 +0000
4 Subject: [PATCH] One extra execv/spawnv called if invoked as "ccache" instead
7 The situation could be improved if we define "ccache" as MYNAME2 and
8 accept it as a valid base name.
10 Signed-off-by: Jie Meng <zuxy.meng@gmail.com>
11 Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
13 ccache.c | 26 +++++++++++++++++---------
15 2 files changed, 18 insertions(+), 9 deletions(-)
17 diff --git a/ccache.c b/ccache.c
18 index 93b65bd..780310f 100644
21 @@ -93,6 +93,7 @@ static struct {
22 static void failed(void)
27 /* delete intermediate pre-processor file if needed */
29 @@ -115,17 +116,21 @@ static void failed(void)
31 if ((e=getenv("CCACHE_PREFIX"))) {
32 char *p = find_executable(e, MYNAME);
34 + if (!p && !(p = find_executable(e, MYNAME2))) {
38 args_add_prefix(orig_args, p);
41 - execv(orig_args->argv[0], orig_args->argv);
42 - cc_log("execv returned (%s)!\n", strerror(errno));
43 - perror(orig_args->argv[0]);
47 + ret = spawnv(_P_WAIT, orig_args->argv[0], (const char* const*)orig_args->argv);
49 + cc_log("execv returned (%s)!\n", strerror(errno));
50 + perror(orig_args->argv[0]);
56 @@ -577,7 +582,7 @@ static void find_compiler(int argc, char **argv)
57 base = str_basename(argv[0]);
59 /* we might be being invoked like "ccache gcc -c foo.c" */
60 - if (strcmp(base, MYNAME) == 0) {
61 + if (strcmp(base, MYNAME) == 0 || strcmp(base, MYNAME2) == 0) {
62 args_remove_first(orig_args);
64 // if (strchr(argv[1],'/')) {
65 @@ -593,7 +598,8 @@ static void find_compiler(int argc, char **argv)
69 - orig_args->argv[0] = find_executable(base, MYNAME);
70 + if (!(orig_args->argv[0] = find_executable(base, MYNAME)))
71 + orig_args->argv[0] = find_executable(base, MYNAME2);
73 /* can't find the compiler! */
74 if (!orig_args->argv[0]) {
75 @@ -839,7 +845,7 @@ static void process_args(int argc, char **argv)
77 if ((e=getenv("CCACHE_PREFIX"))) {
78 char *p = find_executable(e, MYNAME);
80 + if (!p && !(p = find_executable(e, MYNAME2))) {
84 @@ -1026,7 +1032,9 @@ int main(int argc, char *argv[])
86 /* check if we are being invoked as "ccache" */
87 if (strlen(argv[0]) >= strlen(MYNAME) &&
88 - strcmp(argv[0] + strlen(argv[0]) - strlen(MYNAME), MYNAME) == 0) {
89 + strcmp(argv[0] + strlen(argv[0]) - strlen(MYNAME), MYNAME) == 0 ||
90 + strlen(argv[0]) >= strlen(MYNAME2) &&
91 + strcmp(argv[0] + strlen(argv[0]) - strlen(MYNAME2), MYNAME2) == 0) {
95 diff --git a/ccache.h b/ccache.h
96 index e65888d..588848f 100644
102 #define MYNAME "ccache.exe"
103 + #define MYNAME2 "ccache"
105 #define MYNAME "ccache"