From 5d0ac51727e5157dfa7d0525f06deffe32bda2b8 Mon Sep 17 00:00:00 2001 From: kvigor Date: Tue, 19 Jun 2001 17:16:40 +0000 Subject: [PATCH 1/1] bug 434350: filename buffer too small. git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@905 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- src/SDCCBBlock.c | 13 +++++-------- src/SDCCglobl.h | 12 +++++------- src/SDCCglue.c | 10 +++++----- src/SDCCmain.c | 18 +++++++++++------- src/z80/main.c | 6 +++--- 5 files changed, 29 insertions(+), 30 deletions(-) diff --git a/src/SDCCBBlock.c b/src/SDCCBBlock.c index c1a2b172..15470f19 100644 --- a/src/SDCCBBlock.c +++ b/src/SDCCBBlock.c @@ -103,16 +103,13 @@ FILE *appendDumpFile (int id) { if (!dumpFilesPtr->filePtr) { // not used before, create it - strcpy (buffer, srcFileName); - strcat (buffer, dumpFilesPtr->ext); - if (!(dumpFilesPtr->filePtr = fopen (buffer, "w"))) { - werror (E_FILE_OPEN_ERR, buffer); + strcpy (scratchFileName, srcFileName); + strcat (scratchFileName, dumpFilesPtr->ext); + if (!(dumpFilesPtr->filePtr = fopen (scratchFileName, "w"))) { + werror (E_FILE_OPEN_ERR, scratchFileName); exit (1); } - //dprintf ("created: %s\n", buffer); - } else { - //dprintf ("appended: %s%s\n", srcFileName, dumpFilesPtr->ext); - } + } return dumpFilesPtr->filePtr; } diff --git a/src/SDCCglobl.h b/src/SDCCglobl.h index 0d068c01..e11160b5 100644 --- a/src/SDCCglobl.h +++ b/src/SDCCglobl.h @@ -261,13 +261,6 @@ extern char *libFiles[128]; extern int nlibFiles; extern bool verboseExec ; -/* - void buildCmdLine(char *into, char **args, const char **cmds, - const char *p1, const char *p2, - const char *p3, const char **list); - int my_system (const char *cmd, char **cmd_argv); - */ - void parseWithComma (char **, char *); /** Creates a temporary file a'la tmpfile which avoids the bugs @@ -311,4 +304,9 @@ struct _dumpFiles { extern struct _dumpFiles dumpFiles[]; +/* Buffer which can be used to hold a file name; assume it will + * be trashed by any function call within SDCC. + */ +extern char scratchFileName[FILENAME_MAX]; + #endif diff --git a/src/SDCCglue.c b/src/SDCCglue.c index a59053eb..3fb48743 100644 --- a/src/SDCCglue.c +++ b/src/SDCCglue.c @@ -1305,17 +1305,17 @@ glue () if (!options.c1mode) { - sprintf (buffer, srcFileName); - strcat (buffer, port->assembler.file_ext); + sprintf (scratchFileName, srcFileName); + strcat (scratchFileName, port->assembler.file_ext); } else { - strcpy (buffer, options.out_name); + strcpy (scratchFileName, options.out_name); } - if (!(asmFile = fopen (buffer, "w"))) + if (!(asmFile = fopen (scratchFileName, "w"))) { - werror (E_FILE_OPEN_ERR, buffer); + werror (E_FILE_OPEN_ERR, scratchFileName); exit (1); } diff --git a/src/SDCCmain.c b/src/SDCCmain.c index 298661d3..0f7b4875 100644 --- a/src/SDCCmain.c +++ b/src/SDCCmain.c @@ -75,6 +75,9 @@ int nrelFiles = 0; bool verboseExec = FALSE; char *preOutName; +// Globally accessible scratch buffer for file names. +char scratchFileName[FILENAME_MAX]; + // In MSC VC6 default search path for exe's to path for this char DefaultExePath[128]; @@ -695,7 +698,6 @@ int parseCmdLine (int argc, char **argv) { int i; - char cdbfnbuf[50]; /* go thru all whole command line */ for (i = 1; i < argc; i++) @@ -994,9 +996,9 @@ parseCmdLine (int argc, char **argv) /* if debug option is set the open the cdbFile */ if (!options.nodebug && srcFileName) { - sprintf (cdbfnbuf, "%s.cdb", srcFileName); - if ((cdbFile = fopen (cdbfnbuf, "w")) == NULL) - werror (E_FILE_OPEN_ERR, cdbfnbuf); + sprintf (scratchFileName, "%s.cdb", srcFileName); + if ((cdbFile = fopen (scratchFileName, "w")) == NULL) + werror (E_FILE_OPEN_ERR, scratchFileName); else { /* add a module record */ @@ -1020,10 +1022,10 @@ linkEdit (char **envp) srcFileName = "temp"; /* first we need to create the .lnk file */ - sprintf (buffer, "%s.lnk", srcFileName); - if (!(lnkfile = fopen (buffer, "w"))) + sprintf (scratchFileName, "%s.lnk", srcFileName); + if (!(lnkfile = fopen (scratchFileName, "w"))) { - werror (E_FILE_OPEN_ERR, buffer); + werror (E_FILE_OPEN_ERR, scratchFileName); exit (1); } @@ -1235,7 +1237,9 @@ preProcess (char **envp) } if (preProcOnly) + { exit (0); + } } else { diff --git a/src/z80/main.c b/src/z80/main.c index c30d6c57..4a7d3153 100644 --- a/src/z80/main.c +++ b/src/z80/main.c @@ -158,10 +158,10 @@ _gbz80_rgblink (void) sz = "a"; /* first we need to create the .lnk file */ - sprintf (buffer, "%s.lnk", sz); - if (!(lnkfile = fopen (buffer, "w"))) + sprintf (scratchFileName, "%s.lnk", sz); + if (!(lnkfile = fopen (scratchFileName, "w"))) { - werror (E_FILE_OPEN_ERR, buffer); + werror (E_FILE_OPEN_ERR, scratchFileName); exit (1); } -- 2.30.2