This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] bfd_set_input_error


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=2ca7de3746be7484aa5affceafa1ad2e1d789381

commit 2ca7de3746be7484aa5affceafa1ad2e1d789381
Author: Pedro Alves <palves@redhat.com>
Date:   Wed Oct 4 14:20:51 2017 +0100

    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.

Diff:
---
 bfd/ChangeLog | 10 ++++++++++
 bfd/archive.c |  2 +-
 bfd/bfd-in2.h |  4 +++-
 bfd/bfd.c     | 51 +++++++++++++++++++++++++++++++++------------------
 bfd/vms-lib.c |  2 +-
 5 files changed, 48 insertions(+), 21 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index c221cdb..4e52880 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,13 @@
+2017-10-05  Pedro Alves  <palves@redhat.com>
+
+	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.
+
 2017-10-05  Alan Modra  <amodra@gmail.com>
 
 	* elflink.c (elf_link_input_bfd): Correct ctor/dtor in init_array/
diff --git a/bfd/archive.c b/bfd/archive.c
index 3ce3f9e..1e87685 100644
--- a/bfd/archive.c
+++ b/bfd/archive.c
@@ -2309,7 +2309,7 @@ _bfd_write_archive_contents (bfd *arch)
   return TRUE;
 
  input_err:
-  bfd_set_error (bfd_error_on_input, current, bfd_get_error ());
+  bfd_set_input_error (current, bfd_get_error ());
   return FALSE;
 }
 
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 62be566..4ba05b1 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -7054,7 +7054,9 @@ bfd_error_type;
 
 bfd_error_type bfd_get_error (void);
 
-void bfd_set_error (int error_tag, ...);
+void bfd_set_error (bfd_error_type error_tag);
+
+void bfd_set_input_error (bfd *input, bfd_error_type error_tag);
 
 const char *bfd_errmsg (bfd_error_type error_tag);
 
diff --git a/bfd/bfd.c b/bfd/bfd.c
index 5da1a6f..f21c97a 100644
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -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 ();
 }
 
 /*
diff --git a/bfd/vms-lib.c b/bfd/vms-lib.c
index 7b1320d..27f07e1 100644
--- a/bfd/vms-lib.c
+++ b/bfd/vms-lib.c
@@ -2305,7 +2305,7 @@ _bfd_vms_lib_write_archive_contents (bfd *arch)
   return TRUE;
 
  input_err:
-  bfd_set_error (bfd_error_on_input, current, bfd_get_error ());
+  bfd_set_input_error (current, bfd_get_error ());
   return FALSE;
 }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]