Beispiel #1
0
/*
  something went badly wrong - just execute the real compiler
*/
static void failed(void)
{
	char *e;

	/* delete intermediate pre-processor file if needed */
	if (i_tmpfile) {
		if (!direct_i_file) {
			unlink(i_tmpfile);
		}
		free(i_tmpfile);
		i_tmpfile = NULL;
	}

	/* delete the cpp stderr file if necessary */
	if (cpp_stderr) {
		unlink(cpp_stderr);
		free(cpp_stderr);
		cpp_stderr = NULL;
	}

	/* strip any local args */
	args_strip(orig_args, "--ccache-");

	if ((e=getenv("CCACHE_PREFIX"))) {
		char *p = find_executable(e, MYNAME);
		if (!p) {
			perror(e);
			exit(1);
		}
		args_add_prefix(orig_args, p);
	}

	execv(orig_args->argv[0], orig_args->argv);
	cc_log("execv returned (%s)!\n", strerror(errno));
	perror(orig_args->argv[0]);
	exit(1);
}
Beispiel #2
0
/*
  something went badly wrong - just execute the real compiler
*/
static void failed(void)
{
	char *e;

	/* delete intermediate pre-processor file if needed */
	if (i_tmpfile) {
		if (!direct_i_file) {
			unlink(i_tmpfile);
		}
		free(i_tmpfile);
		i_tmpfile = NULL;
	}

	/* delete the cpp stderr file if necessary */
	if (cpp_stderr) {
		unlink(cpp_stderr);
		free(cpp_stderr);
		cpp_stderr = NULL;
	}

	/* strip any local args */
	args_strip(orig_args, "--ccache-");

	if ((e=getenv("CCACHE_PREFIX"))) {
		char *p = find_executable(e, MYNAME);
		if (!p) {
			cc_log("could not find executable (%s)\n", e);
			perror(e);
			exit(1);
		}
		args_add_prefix(orig_args, p);
	}

	if (ccache_verbose) {
		display_execute_args(orig_args->argv);
	}

	if (swig) {
		putenv("CCACHE_OUTFILES");
	}

#ifndef _WIN32
	execv(orig_args->argv[0], orig_args->argv);
	cc_log("execv returned (%s)!\n", strerror(errno));
	perror(orig_args->argv[0]);
	exit(1);
#else
	/* execv on Windows causes the 'non-regular' testcase to fail, so use Win32 API instead */
	{
		PROCESS_INFORMATION pinfo; 
		STARTUPINFO sinfo;
		BOOL ret; 
		DWORD exitcode;
		char *args;

		ZeroMemory(&pinfo, sizeof(PROCESS_INFORMATION));
		ZeroMemory(&sinfo, sizeof(STARTUPINFO));
		sinfo.cb = sizeof(STARTUPINFO); 
		args = argvtos(orig_args->argv);
		ret = CreateProcessA(orig_args->argv[0], args, NULL, NULL, TRUE, 0, NULL, NULL,
				     &sinfo, &pinfo);
		if (!ret) {
			exitcode = 1;
			cc_log("CreateProcessA failed starting %s\n", orig_args->argv[0]);
			perror_win32(orig_args->argv[0]);
		} else {
			WaitForSingleObject(pinfo.hProcess, INFINITE);
			GetExitCodeProcess(pinfo.hProcess, &exitcode);
			CloseHandle(pinfo.hProcess);
			CloseHandle(pinfo.hThread);
		}
		free(args);
		exit(exitcode);
	}
#endif
}