extern int lineno, column;
extern char *filename ;
-extern char *fullSrcFileName ;
int yylineno = 1 ;
void count() ;
int process_pragma(char *);
P_NOGCSE ,
P_CALLEE_SAVES,
P_EXCLUDE ,
+ P_NOIV ,
P_LOOPREV ,
P_OVERLAY_ /* I had a strange conflict with P_OVERLAY while */
/* cross-compiling for MINGW32 with gcc 3.2 */
<asm>"_endasm" {
count();
*asmp = '\0';
- yylval.yyinline = malloc (strlen(asmbuff)+1);
- strcpy(yylval.yyinline,asmbuff);
+ yylval.yyinline = strdup (asmbuff);
BEGIN(INITIAL);
return (INLINEASM);
}
/* get the currentfile name info */
s++ ;
- if ( strncmp(s,fullSrcFileName,strlen(fullSrcFileName)) == 0) {
+ /* in c1mode fullSrcFileName is NULL */
+ if ( fullSrcFileName &&
+ strncmp(s,fullSrcFileName,strlen(fullSrcFileName)) == 0) {
lineno = yylineno = lNum;
currFname = fullSrcFileName ;
} else {
/* mark the end of the filename */
while (*s != '"') s++;
*s = '\0';
- currFname = malloc (strlen(sb)+1);
- strcpy(currFname,sb);
+ currFname = strdup (sb);
lineno = yylineno = lNum;
}
filename = currFname ;
{
/* check if it is in the typedef table */
if (findSym(TypedefTab,NULL,yytext)) {
- strcpy(yylval.yychar,yytext);
+ strncpyz(yylval.yychar,yytext, SDCC_NAME_MAX);
return (TYPE_NAME) ;
}
else {
- strcpy (yylval.yychar,yytext);
+ strncpyz (yylval.yychar,yytext, SDCC_NAME_MAX);
return(IDENTIFIER);
}
}
}
*str = '\0';
+ /* If we aren't going to fix it, at least trap it. */
+ if (strlen(strLitBuff) >= sizeof(strLitBuff))
+ {
+ fprintf(stderr, "Internal error: strLitBuff overflowed.\n");
+ exit(-1);
+ }
+
return strLitBuff;
}
case P_EXCLUDE:
parseWithComma(options.excludeRegs, Safe_strdup(cp));
break;
+ case P_NOIV:
+ options.noiv = 1;
+ break;
case P_LOOPREV:
optimize.noLoopReverse = 1;
break;
return 0;
}
+ if (strncmp(cp,PRAGMA_NOIV,strlen(PRAGMA_NOIV)) == 0) {
+ doPragma(P_NOIV,cp+strlen(PRAGMA_NOIV));
+ return 0;
+ }
+
if (strncmp(cp,PRAGMA_NOLOOPREV,strlen(PRAGMA_NOLOOPREV)) == 0) {
doPragma(P_LOOPREV,NULL);
return 0;