diff options
author | Nick Clifton <nickc@redhat.com> | 2003-06-27 08:10:57 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2003-06-27 08:10:57 +0000 |
commit | dc17f155ff8ea25735376e7a7b0098f9e48984b5 (patch) | |
tree | 060c0f6277e674a7275693c260fcb1fa7d560942 | |
parent | e7c81c254c0efabd933b208c8702d98d81b2bffa (diff) | |
download | fsf-binutils-gdb-dc17f155ff8ea25735376e7a7b0098f9e48984b5.zip fsf-binutils-gdb-dc17f155ff8ea25735376e7a7b0098f9e48984b5.tar.gz fsf-binutils-gdb-dc17f155ff8ea25735376e7a7b0098f9e48984b5.tar.bz2 |
Cope with NUL seperated directives. Fix reporting of unparseable directives.
-rw-r--r-- | ld/ChangeLog | 6 | ||||
-rw-r--r-- | ld/deffilep.y | 33 |
2 files changed, 30 insertions, 9 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 37a9e49e..1d6ed67 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -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 diff --git a/ld/deffilep.y b/ld/deffilep.y index 45b1bda..fba1c2e 100644 --- a/ld/deffilep.y +++ b/ld/deffilep.y @@ -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; } |