From: Joel Rosdahl Date: Tue, 7 Aug 2012 15:22:16 +0000 (+0200) Subject: Let cc_process_args work on a copy of orig_args X-Git-Tag: v3.2~113 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fc49942a6a10314ccfa4b121717ee2e65b9e5fae;p=thirdparty%2Fccache.git Let cc_process_args work on a copy of orig_args This way, orig_args is preserved after expansion of "@file" arguments so that failed() can mimick the original compilation command. --- diff --git a/ccache.c b/ccache.c index 5ead81073..f212f23eb 100644 --- a/ccache.c +++ b/ccache.c @@ -1425,14 +1425,18 @@ cc_process_args(struct args *args, struct args **preprocessor_args, bool dependency_filename_specified = false; /* is the dependency makefile target name specified with -MT or -MQ? */ bool dependency_target_specified = false; - struct args *stripped_args = NULL, *dep_args = NULL; - int argc = args->argc; - char **argv = args->argv; + struct args *expanded_args, *stripped_args, *dep_args; + int argc; + char **argv; bool result = true; + expanded_args = args_copy(args); stripped_args = args_init(0, NULL); dep_args = args_init(0, NULL); + argc = expanded_args->argc; + argv = expanded_args->argv; + args_add(stripped_args, argv[0]); for (i = 1; i < argc; i++) { @@ -1468,9 +1472,9 @@ cc_process_args(struct args *args, struct args **preprocessor_args, goto out; } - args_insert(args, i, file_args, true); - argc = args->argc; - argv = args->argv; + args_insert(expanded_args, i, file_args, true); + argc = expanded_args->argc; + argv = expanded_args->argv; i--; continue; } @@ -2061,6 +2065,7 @@ cc_process_args(struct args *args, struct args **preprocessor_args, args_extend(*preprocessor_args, dep_args); out: + args_free(expanded_args); args_free(stripped_args); args_free(dep_args); return result;