Cope with NUL seperated directives. Fix reporting of unparseable directives.

This commit is contained in:
Nick Clifton 2003-06-27 08:10:57 +00:00
parent e7c81c254c
commit dc17f155ff
2 changed files with 30 additions and 9 deletions

View File

@ -1,3 +1,9 @@
2003-06-27 Nick Clifton <nickc@redhat.com>
* deffilep.y (def_file_add_directive): Cope with NUL seperated
directives. Fix reporting of unparseable directives.
(def_error): Check for a NULL def_filename.
2003-06-27 Alan Modra <amodra@bigpond.net.au>
* emultempl/aix.em: Convert to C90, remove unnecessary prototypes

View File

@ -601,18 +601,26 @@ def_file_add_directive (my_def, param, len)
{
def_file *save_def = def;
const char *pend = param + len;
const char *tend = param;
char * tend = (char *) param;
int i;
def = my_def;
while (param < pend)
{
while (param < pend && ISSPACE (*param))
while (param < pend && (ISSPACE (*param) || * param == '\n' || * param == 0))
param++;
for (tend = param + 1;
tend < pend && !(ISSPACE (tend[-1]) && *tend == '-');
if (param == pend)
break;
/* Scan forward until we encounter any of:
- the end of the buffer
- the start of a new option
- a newline seperating options
- a NUL seperating options. */
for (tend = (char *) (param + 1);
tend < pend && !(ISSPACE (tend[-1]) && *tend == '-') && (*tend != '\n') && (*tend != 0);
tend++)
;
@ -628,15 +636,22 @@ def_file_add_directive (my_def, param, len)
lex_parse_string = param + len + 1;
lex_forced_token = diropts[i].token;
saw_newline = 0;
def_parse ();
if (def_parse ())
continue;
break;
}
}
if (!diropts[i].param)
/* xgettext:c-format */
einfo (_("Warning: .drectve `%.*s' unrecognized\n"),
tend - param, param);
{
char saved;
saved = * tend;
* tend = 0;
/* xgettext:c-format */
einfo (_("Warning: .drectve `%s' unrecognized\n"), param);
* tend = saved;
}
lex_parse_string = 0;
param = tend;
@ -843,7 +858,7 @@ static int
def_error (err)
const char *err;
{
einfo ("%P: %s:%d: %s\n", def_filename, linenumber, err);
einfo ("%P: %s:%d: %s\n", def_filename ? def_filename : "<unknown-file>", linenumber, err);
return 0;
}