This commit is contained in:
Gorilla Sapiens
2025-05-27 05:03:17 +00:00
parent cd92e4f0af
commit e451134e23
3 changed files with 40 additions and 1 deletions

View File

@@ -620,6 +620,9 @@ static void Assemble (const char* File)
static void Compile (const char* File)
/* Compile the given file */
{
/* A temporary file name passed to the assembler */
char *TmpFile = NULL;
/* Remember the current compiler argument count */
unsigned ArgCount = CC65.ArgCount;
@@ -657,6 +660,12 @@ static void Compile (const char* File)
/* Add the file as argument for the compiler */
CmdAddArg (&CC65, File);
if (DoAssemble && DoLink) {
/* set a temporary output file name */
TmpFile = MakeTmpFilename(File, ".s");
CmdSetOutput (&CC65, TmpFile);
}
/* Add a NULL pointer to terminate the argument list */
CmdAddArg (&CC65, 0);
@@ -671,7 +680,10 @@ static void Compile (const char* File)
*/
if (DoAssemble) {
/* Assemble the intermediate file and remove it */
AssembleIntermediate (File);
AssembleIntermediate (TmpFile ? TmpFile : File);
if (TmpFile) {
xfree(TmpFile);
}
}
}

View File

@@ -33,6 +33,7 @@
#include <stdio.h>
#include <string.h>
#include "xmalloc.h"
@@ -115,3 +116,23 @@ char* MakeFilename (const char* Origin, const char* Ext)
}
return Out;
}
char* MakeTmpFilename (const char* Origin, const char* Ext)
/* Make a new temporary file name from Ext. tmpnam(3) is called
** and Ext is appended to generate the filename. Origin is ignored.
** The result is placed in a malloc'ed buffer and returned.
*/
{
char* Out;
char Buffer[L_tmpnam * 2]; /* a lazy way to ensure we have space for Ext */
tmpnam(Buffer);
strcat(Buffer, Ext);
Out = xmalloc (strlen (Buffer) + 1);
strcpy (Out, Buffer);
return Out;
}

View File

@@ -59,6 +59,12 @@ char* MakeFilename (const char* Origin, const char* Ext);
** The function may be used to create "foo.o" from "foo.s".
*/
char* MakeTmpFilename (const char* Origin, const char* Ext);
/* Make a new temporary file name from Ext. tmpnam(3) is called
** and Ext is appended to generate the filename. Origin is ignored.
** The result is placed in a malloc'ed buffer and returned.
*/
/* End of fname.h */