This is the mail archive of the binutils@sources.redhat.com 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]

Re: [rfa] Add the bfd_iovec


Andrew Cagney <cagney@gnu.org> writes:

Following up on earlier threads:
     http://sources.redhat.com/ml/binutils/2004-02/msg00167.html
This adds an IOVEC to BFD.  The IOVEC lets the client open a BFD on an
arbitrary object (file, memory, GDB inferior, ...).  The attached
implements the iovec and then converts the file-io backend.
Converting the memory bfd to an IOVEC is a follow-on change.


In general, I like it, but:

* bfd_iovec needs each entry point to be clearly documented,
  particularly how error conditions are handled.

I'll give it a go.


* I'm not crazy about the berror entry point.  Right now it is used in
  exactly one place, to indicate whether a short read is an error or
  simply a truncated file.  Since bfd_iovec is only going to be called
  by BFD routines, I think it would be quite reasonable to make the
  bread entry point responsible for calling bfd_set_error.  Then the
  caller does not need to go back in to find out what a short read
  means.  Note also that berror is the only function which doesn't
  have an obvious mapping to a Unix system call.

There are three cases here:


- error
- eof
- partial read (as in the next read should yield more data)

I guess BFD isn't set up for partial transfers and retrys so the third case doesn't apply?

* The same error handling principle could apply to all the other
  bfd_iovec routines as well, of course.  Compare with bfd_malloc, for
  example: it just calls malloc and bfd_set_error, to centralize error
  handling.  I think we should use these routines to put the error
  handling in the place which really knows what the error is.  But I'm
  certainly open to a counter argument.

Andrew




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