* "Dont" -> "Don't"
[deliverable/binutils-gdb.git] / binutils / rescoff.c
index 0f83e545d99328bbc05ad2f828ceb42644b624e3..45161c3677db09f4a31a0e94819545779e305b0e 100644 (file)
@@ -1,5 +1,5 @@
 /* rescoff.c -- read and write resources in Windows COFF files.
-   Copyright 1997 Free Software Foundation, Inc.
+   Copyright 1997, 1998, 2000 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support.
 
    This file is part of GNU Binutils.
@@ -124,6 +124,9 @@ read_coff_rsrc (filename, target)
   bfd_byte *data;
   struct coff_file_info finfo;
 
+  if (filename == NULL)
+    fatal (_("filename required for COFF input"));
+
   abfd = bfd_openr (filename, target);
   if (abfd == NULL)
     bfd_fatal (filename);
@@ -139,16 +142,14 @@ read_coff_rsrc (filename, target)
   sec = bfd_get_section_by_name (abfd, ".rsrc");
   if (sec == NULL)
     {
-      fprintf (stderr, "%s: %s: no resource section\n", program_name,
-              filename);
-      xexit (1);
+      fatal (_("%s: no resource section"), filename);
     }
 
   size = bfd_section_size (abfd, sec);
   data = (bfd_byte *) res_alloc (size);
 
   if (! bfd_get_section_contents (abfd, sec, data, 0, size))
-    bfd_fatal ("can't read resource section");
+    bfd_fatal (_("can't read resource section"));
 
   finfo.filename = filename;
   finfo.data = data;
@@ -174,7 +175,7 @@ overrun (finfo, msg)
      const struct coff_file_info *finfo;
      const char *msg;
 {
-  fatal ("%s: %s: address out of bounds", finfo->filename, msg);
+  fatal (_("%s: %s: address out of bounds"), finfo->filename, msg);
 }
 
 /* Read a resource directory.  */
@@ -192,8 +193,8 @@ read_coff_res_dir (data, finfo, type, level)
   struct res_entry **pp;
   const struct extern_res_entry *ere;
 
-  if (finfo->data_end - data < sizeof (struct extern_res_directory))
-    overrun (finfo, "directory");
+  if ((size_t) (finfo->data_end - data) < sizeof (struct extern_res_directory))
+    overrun (finfo, _("directory"));
 
   erd = (const struct extern_res_directory *) data;
 
@@ -221,7 +222,7 @@ read_coff_res_dir (data, finfo, type, level)
       int length, j;
 
       if ((const bfd_byte *) ere >= finfo->data_end)
-       overrun (finfo, "named directory entry");
+       overrun (finfo, _("named directory entry"));
 
       name = getfi_32 (finfo, ere->name);
       rva = getfi_32 (finfo, ere->rva);
@@ -229,8 +230,8 @@ read_coff_res_dir (data, finfo, type, level)
       /* For some reason the high bit in NAME is set.  */
       name &=~ 0x80000000;
 
-      if (name > finfo->data_end - finfo->data)
-       overrun (finfo, "directory entry name");
+      if (name > (size_t) (finfo->data_end - finfo->data))
+       overrun (finfo, _("directory entry name"));
 
       ers = finfo->data + name;
 
@@ -249,16 +250,16 @@ read_coff_res_dir (data, finfo, type, level)
       if ((rva & 0x80000000) != 0)
        {
          rva &=~ 0x80000000;
-         if (rva >= finfo->data_end - finfo->data)
-           overrun (finfo, "named subdirectory");
+         if (rva >= (size_t) (finfo->data_end - finfo->data))
+           overrun (finfo, _("named subdirectory"));
          re->subdir = 1;
          re->u.dir = read_coff_res_dir (finfo->data + rva, finfo, type,
                                         level + 1);
        }
       else
        {
-         if (rva >= finfo->data_end - finfo->data)
-           overrun (finfo, "named resource");
+         if (rva >= (size_t) (finfo->data_end - finfo->data))
+           overrun (finfo, _("named resource"));
          re->subdir = 0;
          re->u.res = read_coff_data_entry (finfo->data + rva, finfo, type);
        }
@@ -273,7 +274,7 @@ read_coff_res_dir (data, finfo, type, level)
       struct res_entry *re;
 
       if ((const bfd_byte *) ere >= finfo->data_end)
-       overrun (finfo, "ID directory entry");
+       overrun (finfo, _("ID directory entry"));
 
       name = getfi_32 (finfo, ere->name);
       rva = getfi_32 (finfo, ere->rva);
@@ -289,16 +290,16 @@ read_coff_res_dir (data, finfo, type, level)
       if ((rva & 0x80000000) != 0)
        {
          rva &=~ 0x80000000;
-         if (rva >= finfo->data_end - finfo->data)
-           overrun (finfo, "ID subdirectory");
+         if (rva >= (size_t) (finfo->data_end - finfo->data))
+           overrun (finfo, _("ID subdirectory"));
          re->subdir = 1;
          re->u.dir = read_coff_res_dir (finfo->data + rva, finfo, type,
                                         level + 1);
        }
       else
        {
-         if (rva >= finfo->data_end - finfo->data)
-           overrun (finfo, "ID resource");
+         if (rva >= (size_t) (finfo->data_end - finfo->data))
+           overrun (finfo, _("ID resource"));
          re->subdir = 0;
          re->u.res = read_coff_data_entry (finfo->data + rva, finfo, type);
        }
@@ -324,23 +325,23 @@ read_coff_data_entry (data, finfo, type)
   const bfd_byte *resdata;
 
   if (type == NULL)
-    fatal ("resource type unknown");
+    fatal (_("resource type unknown"));
 
-  if (finfo->data_end - data < sizeof (struct extern_res_data))
-    overrun (finfo, "data entry");
+  if ((size_t) (finfo->data_end - data) < sizeof (struct extern_res_data))
+    overrun (finfo, _("data entry"));
 
   erd = (const struct extern_res_data *) data;
 
   size = getfi_32 (finfo, erd->size);
   rva = getfi_32 (finfo, erd->rva);
   if (rva < finfo->secaddr
-      || rva - finfo->secaddr >= finfo->data_end - finfo->data)
-    overrun (finfo, "resource data");
+      || rva - finfo->secaddr >= (size_t) (finfo->data_end - finfo->data))
+    overrun (finfo, _("resource data"));
 
   resdata = finfo->data + (rva - finfo->secaddr);
 
-  if (size > finfo->data_end - resdata)
-    overrun (finfo, "resource data size");
+  if (size > (size_t) (finfo->data_end - resdata))
+    overrun (finfo, _("resource data size"));
 
   r = bin_to_res (*type, resdata, size, finfo->big_endian);
 
@@ -422,7 +423,6 @@ static void coff_res_to_bin
    would require doing the basic work of objcopy, just modifying or
    adding the .rsrc section.  */
 
-
 void
 write_coff_file (filename, target, resources)
      const char *filename;
@@ -435,6 +435,9 @@ write_coff_file (filename, target, resources)
   struct bindata *d;
   unsigned long length, offset;
 
+  if (filename == NULL)
+    fatal (_("filename required for COFF output"));
+
   abfd = bfd_openw (filename, target);
   if (abfd == NULL)
     bfd_fatal (filename);
@@ -442,9 +445,20 @@ write_coff_file (filename, target, resources)
   if (! bfd_set_format (abfd, bfd_object))
     bfd_fatal ("bfd_set_format");
 
+#if defined DLLTOOL_SH
+  if (! bfd_set_arch_mach (abfd, bfd_arch_sh, 0))
+    bfd_fatal ("bfd_set_arch_mach(sh)");
+#elif defined DLLTOOL_MIPS
+  if (! bfd_set_arch_mach (abfd, bfd_arch_mips, 0))
+    bfd_fatal ("bfd_set_arch_mach(mips)");
+#elif defined DLLTOOL_ARM
+  if (! bfd_set_arch_mach (abfd, bfd_arch_arm, 0))
+    bfd_fatal ("bfd_set_arch_mach(arm)");
+#else
   /* FIXME: This is obviously i386 specific.  */
   if (! bfd_set_arch_mach (abfd, bfd_arch_i386, 0))
-    bfd_fatal ("bfd_set_arch_mach");
+    bfd_fatal ("bfd_set_arch_mach(i386)");
+#endif
 
   if (! bfd_set_file_flags (abfd, HAS_SYMS | HAS_RELOC))
     bfd_fatal ("bfd_set_file_flags");
@@ -531,9 +545,6 @@ write_coff_file (filename, target, resources)
 
   bfd_set_reloc (abfd, sec, cwi.relocs, cwi.reloc_count);
 
-  /* We allocated the relocs array using malloc.  */
-  free (cwi.relocs);
-
   offset = 0;
   for (d = cwi.dirs.d; d != NULL; d = d->next)
     {
@@ -564,6 +575,9 @@ write_coff_file (filename, target, resources)
 
   if (! bfd_close (abfd))
     bfd_fatal ("bfd_close");
+
+  /* We allocated the relocs array using malloc.  */
+  free (cwi.relocs);
 }
 
 /* Work out the sizes of the various fixed size resource directory
@@ -721,7 +735,7 @@ coff_res_to_bin (res, cwi)
   r->addend = 0;
   r->howto = bfd_reloc_type_lookup (cwi->abfd, BFD_RELOC_RVA);
   if (r->howto == NULL)
-    bfd_fatal ("can't get BFD_RELOC_RVA relocation type");
+    bfd_fatal (_("can't get BFD_RELOC_RVA relocation type"));
 
   cwi->relocs = xrealloc (cwi->relocs,
                          (cwi->reloc_count + 2) * sizeof (arelent *));
This page took 0.028412 seconds and 4 git commands to generate.