+ return arg_count;
+}
+
+static void
+error_handler_internal (const char *fmt, va_list ap)
+{
+ unsigned int i, arg_count;
+ union _bfd_doprnt_args args[9];
+
+ for (i = 0; i < sizeof (args) / sizeof (args[0]); i++)
+ args[i].type = Bad;
+
+ arg_count = _bfd_doprnt_scan (fmt, args);
+ for (i = 0; i < arg_count; i++)
+ {
+ switch (args[i].type)
+ {
+ case Int:
+ args[i].i = va_arg (ap, int);
+ break;
+ case Long:
+ args[i].l = va_arg (ap, long);
+ break;
+ case LongLong:
+ args[i].ll = va_arg (ap, long long);
+ break;
+ case Double:
+ args[i].d = va_arg (ap, double);
+ break;
+ case LongDouble:
+ args[i].ld = va_arg (ap, long double);
+ break;
+ case Ptr:
+ args[i].p = va_arg (ap, void *);
+ break;
+ default:
+ abort ();
+ }
+ }
+
+ /* PR 4992: Don't interrupt output being sent to stdout. */
+ fflush (stdout);
+
+ if (_bfd_error_program_name != NULL)
+ fprintf (stderr, "%s: ", _bfd_error_program_name);
+ else
+ fprintf (stderr, "BFD: ");
+
+ _bfd_doprnt (stderr, fmt, args);