/* windmc.c -- a program to compile Windows message files.
- Copyright 2007
- Free Software Foundation, Inc.
+ Copyright (C) 2007-2019 Free Software Foundation, Inc.
Written by Kai Tietz, Onevision.
This file is part of GNU Binutils.
struct bin_messagetable_item *res;
} mc_msg_item;
-/* Defined in bfd/binary.c. Used to set architecture and machine of input
- binary files. */
-extern enum bfd_architecture bfd_external_binary_architecture;
-extern unsigned long bfd_external_machine;
-
int target_is_bigendian = 0;
const char *def_target_arch;
void *
res_alloc (rc_uint_type bytes)
{
- return (void *) obstack_alloc (&res_obstack, (size_t) bytes);
+ return obstack_alloc (&res_obstack, (size_t) bytes);
}
static FILE *
sprintf (hsz, "%s%s%s", (path != NULL ? path : ""), mcset_mc_basename,
(ext != NULL ? ext : ""));
if ((ret = fopen (hsz, "wb")) == NULL)
- fatal (_("can't create %s file ,%s' for output.\n"), (ext ? ext : "text"), hsz);
+ fatal (_("can't create %s file `%s' for output.\n"), (ext ? ext : "text"), hsz);
free (hsz);
return ret;
}
-C --codepage_in=<val> Set codepage when reading mc text file\n\
-d --decimal_values Print values to text files decimal\n\
-e --extension=<extension> Set header extension used on export header file\n\
- -F --target <target> Specify output target for endianess.\n\
+ -F --target <target> Specify output target for endianness.\n\
-h --headerdir=<directory> Set the export directory for headers\n\
-u --unicode_in Read input file as UTF16 file\n\
-U --unicode_out Write binary messages as UFT16\n\
}
static void
-set_endianess (bfd *abfd, const char *target)
+set_endianness (bfd *abfd, const char *target)
{
const bfd_target *target_vec;
def_target_arch = NULL;
- target_vec = bfd_find_target (target, abfd);
+ target_vec = bfd_get_target_info (target, abfd, &target_is_bigendian, NULL,
+ &def_target_arch);
if (! target_vec)
- fatal ("Can't detect target endianess and architecture.");
- target_is_bigendian = ((target_vec->byteorder == BFD_ENDIAN_BIG) ? 1 : 0);
- {
- const char *tname = target_vec->name;
- const char **arch = bfd_arch_list ();
-
- if (arch && tname)
- {
- if (strchr (tname, '-') != NULL)
- tname = strchr (tname, '-') + 1;
- while (*arch != NULL)
- {
- const char *in_a = strstr (*arch, tname);
- char end_ch = (in_a ? in_a[strlen (tname)] : 0);
- if (in_a && (in_a == *arch || in_a[-1] == ':')
- && end_ch == 0)
- {
- def_target_arch = *arch;
- break;
- }
- arch++;
- }
- }
- if (! def_target_arch)
- fatal ("Can't detect architecture.");
- }
+ fatal ("Can't detect target endianness and architecture.");
+ if (! def_target_arch)
+ fatal ("Can't detect architecture.");
}
static int
if (*cp != 0 && *cp != CP_UTF16)
{
fprintf (stderr, _("%s: warning: "), program_name);
- fprintf (stderr, _("A codepage was specified switch ,%s' and UTF16.\n"), pswitch);
+ fprintf (stderr, _("A codepage was specified switch `%s' and UTF16.\n"), pswitch);
fprintf (stderr, _("\tcodepage settings are ignored.\n"));
}
*cp = CP_UTF16;
return NULL;
codepage_from_unicode (&l, usz, &s, mcset_codepage_out);
if (! s)
- fatal ("unicode string not mappable to ASCII codepage 0x%lx.\n", (long) mcset_codepage_out);
+ fatal ("unicode string not mappable to ASCII codepage 0x%lx.\n",
+ (unsigned long) mcset_codepage_out);
return s;
}
if (elems <= 0)
return;
mc_bfd.abfd = windmc_open_as_binary (filename);
- mc_bfd.sec = bfd_make_section (mc_bfd.abfd, ".data");
+ mc_bfd.sec = bfd_make_section_with_flags (mc_bfd.abfd, ".data",
+ (SEC_HAS_CONTENTS | SEC_ALLOC
+ | SEC_LOAD | SEC_DATA));
if (mc_bfd.sec == NULL)
bfd_fatal ("bfd_make_section");
- if (! bfd_set_section_flags (mc_bfd.abfd, mc_bfd.sec,
- (SEC_HAS_CONTENTS | SEC_ALLOC
- | SEC_LOAD | SEC_DATA)))
- bfd_fatal ("bfd_set_section_flags");
/* Requiring this is probably a bug in BFD. */
mc_bfd.sec->output_section = mc_bfd.sec;
dta_off += mi[i].res_len;
}
sec_length = (dta_off + 3) & ~3;
- if (! bfd_set_section_size (mc_bfd.abfd, mc_bfd.sec, sec_length))
+ if (!bfd_set_section_size (mc_bfd.sec, sec_length))
bfd_fatal ("bfd_set_section_size");
/* Make sure we write the complete block. */
set_windmc_bfd_content ("\0", sec_length - 1, 1);
int i, l;
fprintf (fp,
- "/* Do not edit this file manually.\n"
- " This file is autogenerated by windmc. */\n\n");
+ "/* Do not edit this file manually.\n"
+ " This file is autogenerated by windmc. */\n\n");
if (! mc_nodes_lang_count)
return;
n = NULL;
++i;
n = mc_nodes_lang[l];
fprintf (fp, "\n// Country: %s\n// Language: %s\n#pragma code_page(%u)\n",
- n->lang->lang_info.country, n->lang->lang_info.name,
- (unsigned) n->lang->lang_info.wincp);
- fprintf (fp, "LANGUAGE 0x%lx, 0x%lx\n", (long) (n->lang->nval & 0x3ff),
- (long) ((n->lang->nval & 0xffff) >> 10));
+ n->lang->lang_info.country, n->lang->lang_info.name,
+ (unsigned) n->lang->lang_info.wincp);
+ fprintf (fp, "LANGUAGE 0x%lx, 0x%lx\n",
+ (unsigned long) (n->lang->nval & 0x3ff),
+ (unsigned long) ((n->lang->nval & 0xffff) >> 10));
fprintf (fp, "1 MESSAGETABLE \"");
if (mcset_prefix_bin)
fprintf (fp, "%s_", mcset_mc_basename);
program_name = argv[0];
xmalloc_set_program_name (program_name);
+ bfd_set_error_program_name (program_name);
expandargv (&argc, &argv);
- bfd_init ();
+ if (bfd_init () != BFD_INIT_MAGIC)
+ fatal (_("fatal error: libbfd ABI mismatch"));
set_default_bfd_target ();
target = NULL;
++optind;
}
- set_endianess (NULL, target);
+ set_endianness (NULL, target);
if (input_filename == NULL)
{
unichar *u;
rc_uint_type ul;
char *buff;
- long flen;
+ bfd_size_type flen;
FILE *fp = fopen (input_filename, "rb");
if (!fp)
- fatal (_("unable to open file ,%s' for input.\n"), input_filename);
+ fatal (_("unable to open file `%s' for input.\n"), input_filename);
fseek (fp, 0, SEEK_END);
flen = ftell (fp);
fseek (fp, 0, SEEK_SET);
buff = malloc (flen + 3);
memset (buff, 0, flen + 3);
- fread (buff, 1, flen, fp);
+ if (fread (buff, 1, flen, fp) < flen)
+ fatal (_("unable to read contents of %s"), input_filename);
fclose (fp);
if (mcset_text_in_is_unicode != 1)
{