/* bucomm.c -- Bin Utils COMmon code.
Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1998, 2000, 2001, 2002,
- 2003, 2006, 2007
+ 2003, 2006, 2007, 2008, 2009
Free Software Foundation, Inc.
This file is part of GNU Binutils.
fprintf (stderr, "%s: %s\n", program_name, errmsg);
}
+/* Issue a non fatal error message. FILENAME, or if NULL then BFD,
+ are used to indicate the problematic file. SECTION, if non NULL,
+ is used to provide a section name. If FORMAT is non-null, then it
+ is used to print additional information via vfprintf. Finally the
+ bfd error message is printed. In summary, error messages are of
+ one of the following forms:
+
+ PROGRAM:file: bfd-error-message
+ PROGRAM:file[section]: bfd-error-message
+ PROGRAM:file: printf-message: bfd-error-message
+ PROGRAM:file[section]: printf-message: bfd-error-message
+*/
+
+void
+bfd_nonfatal_message (const char *filename,
+ const bfd *bfd, const asection *section,
+ const char *format, ...)
+{
+ const char *errmsg = bfd_errmsg (bfd_get_error ());
+ const char *section_name = NULL;
+ va_list args;
+
+ va_start (args, format);
+ fprintf (stderr, "%s", program_name);
+
+ if (bfd)
+ {
+ if (!filename)
+ filename = bfd_get_archive_filename (bfd);
+ if (section)
+ section_name = bfd_get_section_name (bfd, section);
+ }
+ if (section_name)
+ fprintf (stderr, ":%s[%s]", filename, section_name);
+ else
+ fprintf (stderr, ":%s", filename);
+
+ if (format)
+ {
+ fprintf (stderr, ": ");
+ vfprintf (stderr, format, args);
+ }
+ fprintf (stderr, ": %s\n", errmsg);
+ va_end (args);
+}
+
void
bfd_fatal (const char *string)
{
void
list_supported_architectures (const char *name, FILE *f)
{
- const char **arch;
+ const char ** arch;
+ const char ** arches;
if (name == NULL)
fprintf (f, _("Supported architectures:"));
else
fprintf (f, _("%s: supported architectures:"), name);
- for (arch = bfd_arch_list (); *arch; arch++)
+ for (arch = arches = bfd_arch_list (); *arch; arch++)
fprintf (f, " %s", *arch);
fprintf (f, "\n");
+ free (arches);
}
\f
/* The length of the longest architecture name + 1. */
/* Return the filename in a static buffer. */
const char *
-bfd_get_archive_filename (bfd *abfd)
+bfd_get_archive_filename (const bfd *abfd)
{
static size_t curr = 0;
static char *buf;