From b02572979aa46ecdc9f7d918dd211d4b502c2f78 Mon Sep 17 00:00:00 2001 From: tsauerbeck Date: Sat, 26 Mar 2005 16:37:25 +0000 Subject: [PATCH] use a temporary file for the intermediate asm output SVN revision: 13924 --- legacy/embryo/src/bin/embryo_cc_sc.h | 2 +- legacy/embryo/src/bin/embryo_cc_sc1.c | 25 ++++++++++++++++--------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/legacy/embryo/src/bin/embryo_cc_sc.h b/legacy/embryo/src/bin/embryo_cc_sc.h index d8db1fa826..024c8adb62 100644 --- a/legacy/embryo/src/bin/embryo_cc_sc.h +++ b/legacy/embryo/src/bin/embryo_cc_sc.h @@ -411,7 +411,7 @@ typedef struct __s_stringpair int sc_eofsrc(void *handle); /* output to intermediate (.ASM) file */ - void *sc_openasm(char *filename); /* read/write */ + void *sc_openasm(int fd); /* read/write */ void sc_closeasm(void *handle, int deletefile); void sc_resetasm(void *handle); int sc_writeasm(void *handle, char *str); diff --git a/legacy/embryo/src/bin/embryo_cc_sc1.c b/legacy/embryo/src/bin/embryo_cc_sc1.c index e6b82743c1..75c3b712e3 100644 --- a/legacy/embryo/src/bin/embryo_cc_sc1.c +++ b/legacy/embryo/src/bin/embryo_cc_sc1.c @@ -214,9 +214,9 @@ sc_eofsrc(void *handle) } void * -sc_openasm(char *filename) +sc_openasm(int fd) { - return fopen(filename, "w+"); + return fdopen(fd, "w+"); } void @@ -285,7 +285,7 @@ sc_lengthbin(void *handle) int sc_compile(int argc, char *argv[]) { - int entry, i, jmpcode; + int entry, i, jmpcode, fd_out; int retcode; char incfname[_MAX_PATH]; char reportname[_MAX_PATH]; @@ -293,6 +293,7 @@ sc_compile(int argc, char *argv[]) void *inpfmark; char lcl_ctrlchar; int lcl_packstr, lcl_needsemicolon, lcl_tabsize; + char *tmpdir; /* set global variables to their initial value */ binf = NULL; @@ -314,11 +315,17 @@ sc_compile(int argc, char *argv[]) if (!phopt_init()) error(103); /* insufficient memory */ - setopt(argc, argv, inpfname, outfname, incfname, reportname); - /* set output names that depend on the input name */ - set_extension(outfname, ".asm", TRUE); - strcpy(binfname, outfname); - set_extension(binfname, ".amx", TRUE); + setopt(argc, argv, inpfname, binfname, incfname, reportname); + + /* open the output file */ + tmpdir = getenv("TMPDIR"); + if (!tmpdir) tmpdir = "/tmp"; + + snprintf(outfname, _MAX_PATH, "%s/embryo_cc.asm-tmp-XXXXXX", tmpdir); + fd_out = mkstemp(outfname); + if (fd_out < 0) + error(101, outfname); + setconfig(argv[0]); /* the path to the include files */ lcl_ctrlchar = sc_ctrlchar; lcl_packstr = sc_packstr; @@ -328,7 +335,7 @@ sc_compile(int argc, char *argv[]) if (inpf == NULL) error(100, inpfname); freading = TRUE; - outf = (FILE *) sc_openasm(outfname); /* first write to assembler + outf = (FILE *) sc_openasm(fd_out); /* first write to assembler * file (may be temporary) */ if (outf == NULL) error(101, outfname);