X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fparser.lex;h=57c70563acaf7d6e5166fdab3e1726c55f323a88;hb=c6e010138791b69c87dc53931480895bda2d5ba2;hp=c0513d141ce09100ff0fec450bb6df8b52738319;hpb=b415635e319943b44a72f4afa8265b5babed47b2;p=swftools.git diff --git a/src/parser.lex b/src/parser.lex index c0513d1..57c7056 100644 --- a/src/parser.lex +++ b/src/parser.lex @@ -32,17 +32,20 @@ static char*prefix = 0; static void unescapeString(string_t * tmp) { char *p, *p1; + /* fixme - this routine expects the string to be + null-terminated */ - for (p1=tmp->str; (p=strchr(p1, '\\')) != 0; p1 = p+1) + for (p1=tmp->str; (p=strchr(p1, '\\')); p1 = p+1) { switch(p[1]) { - case '\\': p[1] = '\\'; break; - case 'b': p[1] = '\b'; break; - case 'f': p[1] = '\f'; break; - case 'n': p[1] = '\n'; break; - case 'r': p[1] = '\r'; break; - case 't': p[1] = '\t'; break; + case '\\': p[1] = '\\'; tmp->len--; break; + case '"': p[1] = '"'; tmp->len--; break; + case 'b': p[1] = '\b'; tmp->len--; break; + case 'f': p[1] = '\f'; tmp->len--; break; + case 'n': p[1] = '\n'; tmp->len--; break; + case 'r': p[1] = '\r'; tmp->len--; break; + case 't': p[1] = '\t'; tmp->len--; break; default: continue; } @@ -150,11 +153,10 @@ RVALUE \"{STRING}\"|([^ \n\r\t]+) {NAME} {s(IDENTIFIER);c();} "[" {c();BEGIN(BINARY);} {S} {c();} -. {char c,c1=0; +. {char c,c1=yytext[0]; printf("Syntax error in line %d, %d: %s", line, column, yytext); while(1) { c=input(); - if(!c1) c1=c; if(c=='\n' || c==EOF) break; printf("%c", c);