X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=binutils%2Frclex.c;h=8db499f23a86a59dd716b5572e494667f406fe43;hb=285e3f99c77510344021b1252c594b28fe7971e8;hp=29f365f310abb2fd60d27f76349481b9629b94a2;hpb=aeafac0cd393cbb01b78e71cdd6268d12950c48a;p=deliverable%2Fbinutils-gdb.git diff --git a/binutils/rclex.c b/binutils/rclex.c index 29f365f310..8db499f23a 100644 --- a/binutils/rclex.c +++ b/binutils/rclex.c @@ -1,7 +1,6 @@ /* rclex.c -- lexer for Windows rc files parser */ -/* Copyright 1997, 1998, 1999, 2001, 2002, 2003, 2005, 2006, 2007 - Free Software Foundation, Inc. +/* Copyright (C) 1997-2018 Free Software Foundation, Inc. Written by Kai Tietz, Onevision. @@ -41,7 +40,7 @@ static int rcdata_mode; -/* Whether we are supressing lines from cpp (including windows.h or +/* Whether we are suppressing lines from cpp (including windows.h or headers from your C sources may bring in externs and typedefs). When active, we return IGNORED_TOKEN, which lets us ignore these outside of resource constructs. Thus, it isn't required to protect @@ -148,7 +147,7 @@ cpp_line (void) ++s; while (ISSPACE (*s)) ++s; - + /* Check for #pragma code_page ( DEFAULT | ). */ len = strlen (s); mlen = strlen ("pragma"); @@ -390,9 +389,9 @@ handle_quotes (rc_uint_type *len) } else { - rcparse_warning ("unexpected character after '\"'"); ++t; - assert (ISSPACE (*t)); + if (! ISSPACE (*t)) + rcparse_warning ("unexpected character after '\"'"); while (ISSPACE (*t)) { if ((*t) == '\n') @@ -679,7 +678,7 @@ static void rclex_string (void) { int c; - + while ((c = rclex_peekch ()) != -1) { if (c == '\n') @@ -693,6 +692,18 @@ rclex_string (void) } else if (rclex_readch () == '"') { + /* PR 6714 + Skip any whitespace after the end of the double quotes. */ + do + { + c = rclex_peekch (); + if (ISSPACE (c)) + rclex_readch (); + else + c = -1; + } + while (c != -1); + if (rclex_peekch () == '"') rclex_readch (); else @@ -770,7 +781,7 @@ yylex (void) /* Clear token. */ rclex_tok_pos = 0; rclex_tok[0] = 0; - + if ((ch = rclex_readch ()) == -1) return -1; if (ch == '\n') @@ -786,15 +797,15 @@ yylex (void) cpp_line (); ch = IGNORED_TOKEN; break; - + case '{': ch = IGNORE_CPP (BEG); break; - + case '}': ch = IGNORE_CPP (END); break; - + case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': yylval.i.val = read_digit (ch); @@ -847,7 +858,7 @@ yylex (void) while ((ch = rclex_peekch ()) != -1 && (ISIDNUM (ch) || ch == '$' || ch == '.' || ch == ':' || ch == '\\' || ch == '/' - || ch == '_') + || ch == '_' || ch == '-') ) rclex_readch (); ch = IGNORE_CPP (rclex_translatekeyword (rclex_tok));