diff --git a/tools/qfcc/include/cpp.h b/tools/qfcc/include/cpp.h index 6756150b2..9a64a401d 100644 --- a/tools/qfcc/include/cpp.h +++ b/tools/qfcc/include/cpp.h @@ -37,7 +37,7 @@ struct dstring_s; void parse_cpp_name (void); void add_cpp_def (const char *arg); void intermediate_file (struct dstring_s *ifile, const char *filename, - const char *ext); + const char *ext, int local); FILE * preprocess_file (const char *filename, const char *ext); extern const char *cpp_name; extern struct dstring_s *tempname; diff --git a/tools/qfcc/source/cpp.c b/tools/qfcc/source/cpp.c index 7b868d189..503bf561e 100644 --- a/tools/qfcc/source/cpp.c +++ b/tools/qfcc/source/cpp.c @@ -148,7 +148,8 @@ build_cpp_args (const char *in_name, const char *out_name) //============================================================================ void -intermediate_file (dstring_t *ifile, const char *filename, const char *ext) +intermediate_file (dstring_t *ifile, const char *filename, const char *ext, + int local) { if (options.save_temps) { char *basename = strdup (filename); @@ -174,6 +175,9 @@ intermediate_file (dstring_t *ifile, const char *filename, const char *ext) dsprintf (ifile, "%s.%s", temp, ext); } free (basename); + } if (local) { + char *temp2 = strrchr (this_program, PATH_SEPARATOR); + dsprintf (ifile, "%sXXXXXX", temp2 ? temp2 + 1 : this_program); } else { const char *temp1 = getenv ("TMPDIR"); char *temp2 = strrchr (this_program, PATH_SEPARATOR); @@ -199,7 +203,7 @@ preprocess_file (const char *filename, const char *ext) #endif if (cpp_name) { - intermediate_file (tempname, filename, ext ? ext : "p"); + intermediate_file (tempname, filename, ext ? ext : "p", 0); build_cpp_args (filename, tempname->str); #ifdef _WIN32 @@ -211,7 +215,7 @@ preprocess_file (const char *filename, const char *ext) if (tmp == NULL) { fprintf (stderr, "%s: qfcc was unable to open\n", tempname->str); - exit(1); + return 0; } fclose (tmp); } @@ -232,7 +236,7 @@ preprocess_file (const char *filename, const char *ext) fprintf (stderr, "%s: cpp returned error code %d\n", filename, status); - exit (1); + return 0; } } @@ -245,7 +249,7 @@ preprocess_file (const char *filename, const char *ext) if ((pid = fork ()) == -1) { perror ("fork"); - exit (1); + return 0; } if (!pid) { // we're a child, check for abuse @@ -267,23 +271,23 @@ preprocess_file (const char *filename, const char *ext) if ((rc = waitpid (0, &status, 0 | WUNTRACED)) != pid) { if (rc == -1) { perror ("wait"); - exit (1); + return 0; } fprintf (stderr, "%s: The wrong child (%ld) died. Don't ask me, I don't know either.\n", this_program, (long) rc); - exit (1); + return 0; } if (WIFEXITED (status)) { if (WEXITSTATUS (status)) { fprintf (stderr, "%s: cpp returned error code %d\n", filename, WEXITSTATUS (status)); - exit (1); + return 0; } } else { fprintf (stderr, "%s: cpp returned prematurely.\n", filename); - exit (1); + return 0; } } if (options.preprocess_only) diff --git a/tools/qfcc/source/qfcc.c b/tools/qfcc/source/qfcc.c index 250bdb470..f712df45e 100644 --- a/tools/qfcc/source/qfcc.c +++ b/tools/qfcc/source/qfcc.c @@ -667,6 +667,12 @@ load_file (const char *fname) src[Qfilesize (file)] = 0; Qread (file, src, Qfilesize (file)); Qclose (file); + if (cpp_name && (!options.save_temps)) { + if (unlink (tempname->str)) { + perror ("unlink"); + exit (1); + } + } return src; } @@ -735,13 +741,13 @@ progs_src_compile (void) dsprintf (filename, "%s", progs_src); if (options.single_cpp) { - intermediate_file (single_name, filename->str, "i2"); + intermediate_file (single_name, filename->str, "i2", 1); if (!options.save_temps) { #ifdef _WIN32 mktemp (single_name->str); #else int tempfd = mkstemp (single_name->str); - single = fdopen (tempfd, "rt"); + single = fdopen (tempfd, "wt"); #endif } if (!single)