> > I don't know how wedded to this style the bfd folks are > > Not at all. In fact I don't like it, even though I wrote the code. > It would be great if _bfd_default_error_handler used the natural arg > positions for %A and %B. I couldn't think of a way to do that without > incorporating a whole lot of knowledge about printf into the bfd > function.
Right, in GCC we ended up doing that except we only implemented the bits of printf commonly used. So for example we don't implement all of the specifiers (floating point) or modifers (%h) or flags. In fact the fortran front end has a format that only has %d %i %c and %s from printf, (plus two custom specifiers.) No flags or even length modifiers! It's likely that bfd doesn't use a big chunk of printf that you could leave out as well. (I haven't actually audited bfd though). Another option is to require positional specifiers for out of order arguments. E.g. _bfd_default_error_handler ("section %2$d is called %1$A", sec, 1); You could keep "sec" at the front, consume it, replace %1$A with the appropriate string, and then pass the modified format string and the partially consumed argument list to vfprintf. Two problems, one is you'd have to modify (or delete) all the positional parameters to account for taking out "sec". So 2$ above becomes 1$ or is eliminated. Also, there's nothing to prevent someone from violating the rules keeping "sec" in the front. So I favor rewriting _bfd_default_error_handler to do the safer thing which is to use natural arg positions. Then create a format check with only the stuff you need, not the whole printf style. --Kaveh -- Kaveh R. Ghazi [EMAIL PROTECTED]