diff options
author | Pedro Alves <palves@redhat.com> | 2017-10-04 14:20:51 +0100 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2017-10-05 12:03:47 +1030 |
commit | 2ca7de3746be7484aa5affceafa1ad2e1d789381 (patch) | |
tree | 3b828944d881259232614619db2108122a203880 /bfd/bfd.c | |
parent | 7d36e2799141d206651410c68080f40b88809a3b (diff) | |
download | gdb-2ca7de3746be7484aa5affceafa1ad2e1d789381.zip gdb-2ca7de3746be7484aa5affceafa1ad2e1d789381.tar.gz gdb-2ca7de3746be7484aa5affceafa1ad2e1d789381.tar.bz2 |
bfd_set_input_error
A downside to the 2017-10-04 PR22245 fix is that bfd_set_error can now
silently accept invalid errors if/when someone passes the a value of
the wrong enumeration type, which previously would be caught by the
-Wenum-conversion warning.
PR 22245
* bfd.c (bfd_set_error): Revert 2017-10-04 change. Remove
ellipsis parameter. Split out bfd_error_on_input code to..
(bfd_set_input_error): .. New function.
* archive.c (_bfd_write_archive_contents): Use bfd_set_input_error.
* vms-lib.c (_bfd_vms_lib_write_archive_contents): Likewise.
* bfd-in2.h: Regenerate.
Diffstat (limited to 'bfd/bfd.c')
-rw-r--r-- | bfd/bfd.c | 51 |
1 files changed, 33 insertions, 18 deletions
@@ -497,32 +497,47 @@ FUNCTION bfd_set_error SYNOPSIS - void bfd_set_error (int error_tag, ...); + void bfd_set_error (bfd_error_type error_tag); DESCRIPTION Set the BFD error condition to be @var{error_tag}. - If @var{error_tag} is bfd_error_on_input, then this function - takes two more parameters, the input bfd where the error - occurred, and the bfd_error_type error. + + @var{error_tag} must not be bfd_error_on_input. Use + bfd_set_input_error for input errors instead. */ void -bfd_set_error (int error_tag, ...) +bfd_set_error (bfd_error_type error_tag) { bfd_error = error_tag; - if (error_tag == bfd_error_on_input) - { - /* This is an error that occurred during bfd_close when - writing an archive, but on one of the input files. */ - va_list ap; - - va_start (ap, error_tag); - input_bfd = va_arg (ap, bfd *); - input_error = (bfd_error_type) va_arg (ap, int); - if (input_error >= bfd_error_on_input) - abort (); - va_end (ap); - } + if (bfd_error >= bfd_error_on_input) + abort (); +} + +/* +FUNCTION + bfd_set_input_error + +SYNOPSIS + void bfd_set_input_error (bfd *input, bfd_error_type error_tag); + +DESCRIPTION + + Set the BFD error condition to be bfd_error_on_input. + @var{input} is the input bfd where the error occurred, and + @var{error_tag} the bfd_error_type error. +*/ + +void +bfd_set_input_error (bfd *input, bfd_error_type error_tag) +{ + /* This is an error that occurred during bfd_close when writing an + archive, but on one of the input files. */ + bfd_error = bfd_error_on_input; + input_bfd = input; + input_error = error_tag; + if (input_error >= bfd_error_on_input) + abort (); } /* |