@section Opening and closing BFDs @findex bfd_openr @subsubsection @code{bfd_openr} @strong{Synopsis} @example bfd *bfd_openr(CONST char *filename, CONST char *target); @end example @strong{Description}@* Open the file @var{filename} (using @code{fopen}) with the target @var{target}. Return a pointer to the created BFD. Calls @code{bfd_find_target}, so @var{target} is interpreted as by that function. If @code{NULL} is returned then an error has occured. Possible errors are @code{bfd_error_no_memory}, @code{bfd_error_invalid_target} or @code{system_call} error. @findex bfd_fdopenr @subsubsection @code{bfd_fdopenr} @strong{Synopsis} @example bfd *bfd_fdopenr(CONST char *filename, CONST char *target, int fd); @end example @strong{Description}@* @code{bfd_fdopenr} is to @code{bfd_fopenr} much like @code{fdopen} is to @code{fopen}. It opens a BFD on a file already described by the @var{fd} supplied. When the file is later @code{bfd_close}d, the file descriptor will be closed. If the caller desires that this file descriptor be cached by BFD (opened as needed, closed as needed to free descriptors for other opens), with the supplied @var{fd} used as an initial file descriptor (but subject to closure at any time), call bfd_set_cacheable(bfd, 1) on the returned BFD. The default is to assume no cacheing; the file descriptor will remain open until @code{bfd_close}, and will not be affected by BFD operations on other files. Possible errors are @code{bfd_error_no_memory}, @code{bfd_error_invalid_target} and @code{bfd_error_system_call}. @findex bfd_openstreamr @subsubsection @code{bfd_openstreamr} @strong{Synopsis} @example bfd *bfd_openstreamr(const char *, const char *, PTR); @end example @strong{Description}@* Open a BFD for read access on an existing stdio stream. When the BFD is passed to @code{bfd_close}, the stream will be closed. @findex bfd_openw @subsubsection @code{bfd_openw} @strong{Synopsis} @example bfd *bfd_openw(CONST char *filename, CONST char *target); @end example @strong{Description}@* Create a BFD, associated with file @var{filename}, using the file format @var{target}, and return a pointer to it. Possible errors are @code{bfd_error_system_call}, @code{bfd_error_no_memory}, @code{bfd_error_invalid_target}. @findex bfd_close @subsubsection @code{bfd_close} @strong{Synopsis} @example boolean bfd_close(bfd *abfd); @end example @strong{Description}@* Close a BFD. If the BFD was open for writing, then pending operations are completed and the file written out and closed. If the created file is executable, then @code{chmod} is called to mark it as such. All memory attached to the BFD is released. The file descriptor associated with the BFD is closed (even if it was passed in to BFD by @code{bfd_fdopenr}). @strong{Returns}@* @code{true} is returned if all is ok, otherwise @code{false}. @findex bfd_close_all_done @subsubsection @code{bfd_close_all_done} @strong{Synopsis} @example boolean bfd_close_all_done(bfd *); @end example @strong{Description}@* Close a BFD. Differs from @code{bfd_close} since it does not complete any pending operations. This routine would be used if the application had just used BFD for swapping and didn't want to use any of the writing code. If the created file is executable, then @code{chmod} is called to mark it as such. All memory attached to the BFD is released. @strong{Returns}@* @code{true} is returned if all is ok, otherwise @code{false}. @findex bfd_create @subsubsection @code{bfd_create} @strong{Synopsis} @example bfd *bfd_create(CONST char *filename, bfd *templ); @end example @strong{Description}@* Create a new BFD in the manner of @code{bfd_openw}, but without opening a file. The new BFD takes the target from the target used by @var{template}. The format is always set to @code{bfd_object}. @findex bfd_alloc @subsubsection @code{bfd_alloc} @strong{Synopsis} @example PTR bfd_alloc (bfd *abfd, size_t wanted); @end example @strong{Description}@* Allocate a block of @var{wanted} bytes of memory attached to @code{abfd} and return a pointer to it.