/* can be NULL while c1mode or linking without compiling */
char *fullDstFileName; /* full name for the output file; */
/* only given by -o, otherwise NULL */
+size_t fullDstFileNameLen; /* size of previous string. */
char *dstFileName; /* destination file name without extension */
char *dstPath = ""; /* path for the output files; */
/* "" is equivalent with cwd */
}
/* copy the file name into the buffer */
- strcpy (buffer, s);
+ strncpyz (buffer, s, PATH_MAX);
/* get rid of the "."-extension */
(longOpt && unsupportedOptTable[i].longOpt && !strcmp(unsupportedOptTable[i].longOpt, longOpt))) {
// Found an unsupported opt.
char buffer[100];
- sprintf(buffer, "%s%c%c", longOpt ? longOpt : "", shortOpt ? '-' : ' ', shortOpt ? shortOpt : ' ');
+ SNPRINTF(buffer, sizeof(buffer),
+ "%s%c%c",
+ longOpt ? longOpt : "",
+ shortOpt ? '-' : ' ', shortOpt ? shortOpt : ' ');
werror (W_UNSUPP_OPTION, buffer, unsupportedOptTable[i].message);
return 1;
}
char *p;
/* copy the file name into the buffer */
- strcpy (buffer, getStringArg("-o", argv, &i, argc));
+ strncpyz(buffer, getStringArg("-o", argv, &i, argc), PATH_MAX);
/* point to last character */
p = buffer + strlen (buffer) - 1;
if (*p == DIR_SEPARATOR_CHAR)
else
{
fullDstFileName = Safe_strdup (buffer);
+ fullDstFileNameLen = strlen(fullDstFileName) + 1;
/* get rid of the "."-extension */
if (sOpt == 'Y')
sOpt = 'I';
- sprintf (buffer, "-%c%s", sOpt, rest);
+ SNPRINTF (buffer, sizeof(buffer), "-%c%s", sOpt, rest);
addToList (preArgv, buffer);
}
break;
/* use the modulename from the C-source */
if (fullSrcFileName)
{
- dstFileName = Safe_alloc (strlen (dstPath) + strlen (moduleName) + 1);
- strcpy (dstFileName, dstPath);
- strcat (dstFileName, moduleName);
+ size_t bufSize = strlen (dstPath) + strlen (moduleName) + 1;
+
+ dstFileName = Safe_alloc (bufSize);
+ strncpyz (dstFileName, dstPath, bufSize);
+ strncatz (dstFileName, moduleName, bufSize);
}
/* use the modulename from the first object file */
else if (nrelFiles >= 1)
{
char *objectName;
+ size_t bufSize;
- strcpy (buffer, relFiles[0]);
+ strncpyz (buffer, relFiles[0], PATH_MAX);
/* remove extension (it must be .rel) */
*strrchr (buffer, '.') = '\0';
/* remove path */
{
objectName = buffer;
}
- dstFileName = Safe_alloc (strlen (dstPath) + strlen (objectName) + 1);
- strcpy (dstFileName, dstPath);
- strcat (dstFileName, objectName);
+ bufSize = strlen (dstPath) + strlen (objectName) + 1;
+ dstFileName = Safe_alloc (bufSize);
+ strncpyz (dstFileName, dstPath, bufSize);
+ strncatz (dstFileName, objectName, bufSize);
}
/* else no module given: help text is displayed */
}
/* if debug option is set the open the cdbFile */
if (options.debug && fullSrcFileName)
{
- sprintf (scratchFileName, "%s.adb", dstFileName); //JCF: Nov 30, 2002
+ SNPRINTF (scratchFileName, sizeof(scratchFileName),
+ "%s.adb", dstFileName); //JCF: Nov 30, 2002
if ((cdbFile = fopen (scratchFileName, "w")) == NULL)
werror (E_FILE_OPEN_ERR, scratchFileName);
else
int i, system_ret;
/* first we need to create the <filename>.lnk file */
- sprintf (scratchFileName, "%s.lnk", dstFileName);
+ SNPRINTF (scratchFileName, sizeof(scratchFileName),
+ "%s.lnk", dstFileName);
if (!(lnkfile = fopen (scratchFileName, "w")))
{
werror (E_FILE_OPEN_ERR, scratchFileName);
/* -o option overrides default name? */
if (fullDstFileName)
{
- strcpy (scratchFileName, fullDstFileName);
+ strncpyz (scratchFileName, fullDstFileName, sizeof(scratchFileName));
}
else
{
/* the linked file gets the name of the first modul */
if (fullSrcFileName)
{
- strcpy (scratchFileName, dstFileName);
+ strncpyz (scratchFileName, dstFileName, sizeof(scratchFileName));
}
else
{
- strcpy (scratchFileName, relFiles[0]);
+ strncpyz (scratchFileName, relFiles[0], sizeof(scratchFileName));
/* strip ".rel" extension */
*strrchr (scratchFileName, '.') = '\0';
}
- strcat (scratchFileName, options.out_fmt ? ".S19" : ".ihx");
+ strncatz (scratchFileName,
+ options.out_fmt ? ".S19" : ".ihx",
+ sizeof(scratchFileName));
}
if (port->linker.cmd)
{
char buffer2[PATH_MAX];
buildCmdLine (buffer2, port->linker.cmd, dstFileName, scratchFileName, NULL, NULL);
- buildCmdLine2 (buffer, buffer2);
+ buildCmdLine2 (buffer, buffer2, PATH_MAX);
}
else
{
- buildCmdLine2 (buffer, port->linker.mcmd);
+ buildCmdLine2 (buffer, port->linker.mcmd, PATH_MAX);
}
system_ret = my_system (buffer);
/* the linked file gets the name of the first modul */
if (fullSrcFileName)
{
- strcpy (scratchFileName, dstFileName);
+ strncpyz (scratchFileName, dstFileName, sizeof(scratchFileName));
p = strlen (scratchFileName) + scratchFileName;
}
else
{
- strcpy (scratchFileName, relFiles[0]);
+ strncpyz (scratchFileName, relFiles[0], sizeof(scratchFileName));
/* strip "rel" extension */
- p = strrchr (scratchFileName, '.') + 1;
+ p = strrchr (scratchFileName, '.');
+ if (p)
+ {
+ p++;
+ *p = 0;
+ }
+
}
- strcpy (p, options.out_fmt ? "S19" : "ihx");
+ strncatz (scratchFileName,
+ options.out_fmt ? "S19" : "ihx",
+ sizeof(scratchFileName));
rename (scratchFileName, fullDstFileName);
q = strrchr (fullDstFileName, '.');
else
{
/* no extension: append new extensions */
+ /* Don't we want to append a period here ? */
q = strlen (fullDstFileName) + fullDstFileName;
}
- strcpy (p, "map");
- strcpy (q, "map");
+
+ *p = 0;
+ strncatz (scratchFileName, "map", sizeof(scratchFileName));
+ *q = 0;
+ strncatz(fullDstFileName, "map", fullDstFileNameLen);
rename (scratchFileName, fullDstFileName);
- strcpy (p, "mem");
- strcpy (q, "mem");
+ *p = 0;
+ strncatz (scratchFileName, "mem", sizeof(scratchFileName));
+ *q = 0;
+ strncatz(fullDstFileName, "mem", fullDstFileNameLen);
rename (scratchFileName, fullDstFileName);
}
if (system_ret)
/* -o option overrides default name? */
if (options.cc_only && fullDstFileName) {
- strcpy (scratchFileName, fullDstFileName);
+ strncpyz (scratchFileName, fullDstFileName, sizeof(scratchFileName));
} else {
/* the assembled file gets the name of the first modul */
- strcpy (scratchFileName, dstFileName);
- strcat (scratchFileName, port->linker.rel_ext);
+ strncpyz (scratchFileName, dstFileName, PATH_MAX);
+ strncatz (scratchFileName, port->linker.rel_ext, PATH_MAX);
}
if (port->assembler.do_assemble) {
options.debug ? port->assembler.debug_opts : port->assembler.plain_opts,
asmOptions);
} else {
- buildCmdLine2 (buffer, port->assembler.mcmd);
+ buildCmdLine2 (buffer, port->assembler.mcmd, sizeof(buffer));
}
if (my_system (buffer)) {
/* TODO: most assembler don't have a -o parameter */
/* -o option overrides default name? */
if (options.cc_only && fullDstFileName) {
- strcpy (scratchFileName, dstFileName);
- strcat (scratchFileName, port->linker.rel_ext);
+ strncpyz (scratchFileName, dstFileName, sizeof(scratchFileName));
+ strncatz (scratchFileName,
+ port->linker.rel_ext,
+ sizeof(scratchFileName));
rename (scratchFileName, fullDstFileName);
}
}
if (options.verbose)
printf ("sdcc: Calling preprocessor...\n");
- buildCmdLine2 (buffer, _preCmd);
+ buildCmdLine2 (buffer, _preCmd, PATH_MAX);
if (my_system (buffer))
{
where expected. If so, set.
*/
getPathDifference (buffer, PREFIX, SDCC_INCLUDE_DIR);
- strcpy (scratchFileName, pprefix);
- strcat (scratchFileName, buffer);
+ strncpyz (scratchFileName, pprefix, sizeof(scratchFileName));
+ strncatz (scratchFileName, buffer, sizeof(scratchFileName));
if (pathExists (scratchFileName))
{
}
getPathDifference (buffer, PREFIX, SDCC_LIB_DIR);
- strcpy (scratchFileName, pprefix);
- strcat (scratchFileName, buffer);
+ strncpyz (scratchFileName, pprefix, sizeof(scratchFileName));
+ strncatz (scratchFileName, buffer, sizeof(scratchFileName));
if (pathExists (scratchFileName))
{
*/
if (strchr (argv0, DIR_SEPARATOR_CHAR))
{
- strcpy (scratchFileName, argv0);
+ strncpyz (scratchFileName, argv0, sizeof(scratchFileName));
*strrchr (scratchFileName, DIR_SEPARATOR_CHAR) = '\0';
setMainValue ("bindir", scratchFileName);
ExePathList[0] = Safe_strdup (scratchFileName);
else if (getenv (SDCCDIR_NAME) != NULL)
{
getPathDifference (buffer, PREFIX, BINDIR);
- strcpy (scratchFileName, getenv (SDCCDIR_NAME));
- strcat (scratchFileName, buffer);
+ strncpyz (scratchFileName, getenv (SDCCDIR_NAME), sizeof(scratchFileName));
+ strncatz (scratchFileName, buffer, PATH_MAX);
setMainValue ("bindir", scratchFileName);
ExePathList[0] = Safe_strdup (scratchFileName);
}