* rcparse.y: Likewise.
* resbin.c: Likewise.
* rescoff.c: Likewise.
* resrc.c: Likewise.
* Makefile.am: Rebuild dependencies.
(HFILES): Remove readelf.h.
* Makefile.in: Rebuild.
Based on patches from Andrew Kozin
<Andrew.Kozin@p14.f960.n5020.z2.fidonet.org>:
* winduni.h: New file, from windres.h.
* winduni.c: New file, from windres.c.
* windres.c: Move Unicode functions into winduni.c.
* windres.h: Move Unicode declarations into winduni.h. Include
winduni.h.
(RT_ACCELERATOR): Rename from RT_ACCELERATORS to match Windows
macro. Change all uses.
(RT_PLUGPLAY, RT_VXD): Correct values.
* Makefile.am (HFILES): Add windres.h.
(CFILES): Add winduni.c.
(windres_SOURCES): Add winduni.c.
version.c
windres.c
windres.h
+winduni.c
+winduni.h
wrstabs.c
Things-to-lose:
INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) @HDEFINES@ -I$(srcdir)/../intl -I../intl -DLOCALEDIR="\"$(prefix)/share/locale\""
HFILES = arsup.h bucomm.h budbg.h coffgrok.h debug.h nlmconv.h dlltool.h \
- windres.h readelf.h
+ windres.h winduni.h
GENERATED_HFILES = arparse.h sysroff.h sysinfo.h defparse.h
maybe-strip.c nlmconv.c nm.c not-ranlib.c not-strip.c \
objcopy.c objdump.c prdbg.c rdcoff.c rddbg.c size.c srconv.c \
stabs.c strings.c sysdump.c version.c wrstabs.c \
- windres.c resrc.c rescoff.c resbin.c readelf.c
+ windres.c resrc.c rescoff.c resbin.c winduni.c readelf.c
GENERATED_CFILES = \
underscore.c arparse.c arlex.c sysroff.c sysinfo.c syslex.c \
nlmconv_SOURCES = nlmconv.c nlmheader.y $(BULIBS)
windres_SOURCES = windres.c resrc.c rescoff.c resbin.c rcparse.y rclex.l \
- $(BULIBS)
+ winduni.c $(BULIBS)
windres_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(INTLLIBS)
DISTSTUFF = arparse.c arparse.h arlex.c nlmheader.c sysinfo.c sysinfo.h \
$(INCDIR)/aout/stab.def
windres.o: windres.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
$(INCDIR)/getopt.h bucomm.h config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/libiberty.h $(INCDIR)/obstack.h windres.h
+ $(INCDIR)/libiberty.h $(INCDIR)/obstack.h windres.h \
+ winduni.h
resrc.o: resrc.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
bucomm.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
- windres.h
+ windres.h winduni.h
rescoff.o: rescoff.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
bucomm.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
- windres.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
+ windres.h winduni.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
$(INCDIR)/bfdlink.h
resbin.o: resbin.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
bucomm.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
- windres.h
-readelf.o: readelf.c readelf.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ windres.h winduni.h
+winduni.o: winduni.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ bucomm.h config.h $(INCDIR)/fopen-same.h winduni.h
+readelf.o: readelf.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
$(INCDIR)/elf/common.h $(INCDIR)/elf/ppc.h $(INCDIR)/elf/m32r.h \
- $(INCDIR)/elf/mips.h bucomm.h config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/getopt.h
+ $(INCDIR)/elf/mips.h $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h \
+ bucomm.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/getopt.h
underscore.o: underscore.c
arparse.o: arparse.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
bucomm.h config.h $(INCDIR)/fopen-same.h arsup.h
nlmconv.h
rcparse.o: rcparse.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
bucomm.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
- windres.h
+ windres.h winduni.h
rclex.o: rclex.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
bucomm.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
- windres.h rcparse.h
+ windres.h winduni.h rcparse.h
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) @HDEFINES@ -I$(srcdir)/../intl -I../intl -DLOCALEDIR="\"$(prefix)/share/locale\""
HFILES = arsup.h bucomm.h budbg.h coffgrok.h debug.h nlmconv.h dlltool.h \
- windres.h
+ windres.h winduni.h
GENERATED_HFILES = arparse.h sysroff.h sysinfo.h defparse.h
maybe-strip.c nlmconv.c nm.c not-ranlib.c not-strip.c \
objcopy.c objdump.c prdbg.c rdcoff.c rddbg.c size.c srconv.c \
stabs.c strings.c sysdump.c version.c wrstabs.c \
- windres.c resrc.c rescoff.c resbin.c readelf.c
+ windres.c resrc.c rescoff.c resbin.c winduni.c readelf.c
GENERATED_CFILES = \
underscore.c arparse.c arlex.c sysroff.c sysinfo.c syslex.c \
nlmconv_SOURCES = nlmconv.c nlmheader.y $(BULIBS)
windres_SOURCES = windres.c resrc.c rescoff.c resbin.c rcparse.y rclex.l \
- $(BULIBS)
+ winduni.c $(BULIBS)
windres_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(INTLLIBS)
DISTSTUFF = arparse.c arparse.h arlex.c nlmheader.c sysinfo.c sysinfo.h \
dlltool_DEPENDENCIES = ../bfd/libbfd.la ../libiberty/libiberty.a
dlltool_LDFLAGS =
windres_OBJECTS = windres.o resrc.o rescoff.o resbin.o rcparse.o \
-rclex.o bucomm.o version.o filemode.o
+rclex.o winduni.o bucomm.o version.o filemode.o
windres_DEPENDENCIES = ../bfd/libbfd.la ../libiberty/libiberty.a
windres_LDFLAGS =
size_OBJECTS = size.o bucomm.o version.o filemode.o
$(mkinstalldirs) $(DESTDIR)$(bindir)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
if test -f $$p; then \
- echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \
- $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
+ echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+ $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
else :; fi; \
done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
list='$(bin_PROGRAMS)'; for p in $$list; do \
- rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
+ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
done
mostlyclean-noinstPROGRAMS:
$(INCDIR)/aout/stab.def
windres.o: windres.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
$(INCDIR)/getopt.h bucomm.h config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/libiberty.h $(INCDIR)/obstack.h windres.h
+ $(INCDIR)/libiberty.h $(INCDIR)/obstack.h windres.h \
+ winduni.h
resrc.o: resrc.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
bucomm.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
- windres.h
+ windres.h winduni.h
rescoff.o: rescoff.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
bucomm.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
- windres.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
+ windres.h winduni.h $(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h \
$(INCDIR)/bfdlink.h
resbin.o: resbin.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
bucomm.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
- windres.h
+ windres.h winduni.h
+winduni.o: winduni.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ bucomm.h config.h $(INCDIR)/fopen-same.h winduni.h
readelf.o: readelf.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
$(INCDIR)/elf/common.h $(INCDIR)/elf/ppc.h $(INCDIR)/elf/m32r.h \
- $(INCDIR)/elf/mips.h bucomm.h config.h $(INCDIR)/fopen-same.h \
- $(INCDIR)/getopt.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h
+ $(INCDIR)/elf/mips.h $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h \
+ bucomm.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/getopt.h
underscore.o: underscore.c
arparse.o: arparse.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
bucomm.h config.h $(INCDIR)/fopen-same.h arsup.h
nlmconv.h
rcparse.o: rcparse.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
bucomm.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
- windres.h
+ windres.h winduni.h
rclex.o: rclex.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
bucomm.h config.h $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h \
- windres.h rcparse.h
+ windres.h winduni.h rcparse.h
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
char *send, *fn;
++s;
- while (isspace (*s))
+ while (isspace ((unsigned char) *s))
++s;
line = strtol (s, &send, 0);
- if (*send != '\0' && ! isspace (*send))
+ if (*send != '\0' && ! isspace ((unsigned char) *send))
return;
/* Subtract 1 because we are about to count the newline. */
rc_lineno = line - 1;
s = send;
- while (isspace (*s))
+ while (isspace ((unsigned char) *s))
++s;
if (*s != '"')
else
{
++t;
- assert (isspace (*t));
- while (isspace (*t))
+ assert (isspace ((unsigned char) *t));
+ while (isspace ((unsigned char) *t))
++t;
if (*t == '\0')
break;
%token BEDIT HEDIT IEDIT
%token FONT
%token ICON
-%token LANGUAGE CHARACTERISTICS VERSION
+%token LANGUAGE CHARACTERISTICS VERSIONK
%token MENU MENUEX MENUITEM SEPARATOR POPUP CHECKED GRAYED HELP INACTIVE
%token MENUBARBREAK MENUBREAK
%token MESSAGETABLE
$$ = $1;
$$.id = $2;
$$.flags |= $4;
+ if (($$.flags & ACC_VIRTKEY) == 0
+ && ($$.flags & (ACC_SHIFT | ACC_CONTROL | ACC_ALT)) != 0)
+ rcparse_warning (_("inappropriate modifiers for non-VIRTKEY"));
}
;
QUOTEDSTRING
{
const char *s = $1;
+ char ch;
+ $$.next = NULL;
$$.id = 0;
- if (*s != '^')
+ ch = *s;
+ if (ch != '^')
$$.flags = 0;
else
{
- $$.flags = ACC_CONTROL;
+ $$.flags = ACC_CONTROL | ACC_VIRTKEY;
++s;
+ ch = *s;
+ ch = toupper ((unsigned char) ch);
}
- $$.key = *s;
+ $$.key = ch;
if (s[1] != '\0')
- rcparse_warning ("accelerator should only be one character");
+ rcparse_warning (_("accelerator should only be one character"));
}
| posnumexpr
{
+ $$.next = NULL;
$$.flags = 0;
$$.id = 0;
$$.key = $1;
{
$$ = $1 | $3;
}
+ /* I've had one report that the comma is optional. */
+ | acc_options acc_option
+ {
+ $$ = $1 | $2;
+ }
;
acc_option:
dialog.pointsize = $3;
unicode_from_ascii ((int *) NULL, &dialog.font, $5);
if (dialog.ex == NULL)
- rcparse_warning ("extended FONT requires DIALOGEX");
+ rcparse_warning (_("extended FONT requires DIALOGEX"));
else
{
dialog.ex->weight = $6;
{
sub_res_info.language = $3 | ($4 << 8);
}
- | styles VERSION numexpr
+ | styles VERSIONK numexpr
{
sub_res_info.version = $3;
}
{
$$ = $3;
if (dialog.ex == NULL)
- rcparse_warning ("IEDIT requires DIALOGEX");
+ rcparse_warning (_("IEDIT requires DIALOGEX"));
res_string_to_id (&$$->class, "BEDIT");
}
| CHECKBOX
if ($11 != NULL)
{
if (dialog.ex == NULL)
- rcparse_warning ("control data requires DIALOGEX");
+ rcparse_warning (_("control data requires DIALOGEX"));
$$->data = $11;
}
}
{
$$ = define_control ($2, $3, $6, $7, $8, $9, $4, style, $10);
if (dialog.ex == NULL)
- rcparse_warning ("help ID requires DIALOGEX");
+ rcparse_warning (_("help ID requires DIALOGEX"));
$$->help = $11;
$$->data = $12;
}
{
$$ = $3;
if (dialog.ex == NULL)
- rcparse_warning ("IEDIT requires DIALOGEX");
+ rcparse_warning (_("IEDIT requires DIALOGEX"));
res_string_to_id (&$$->class, "HEDIT");
}
| ICON optstringc numexpr cnumexpr cnumexpr opt_control_data
if ($6 != NULL)
{
if (dialog.ex == NULL)
- rcparse_warning ("control data requires DIALOGEX");
+ rcparse_warning (_("control data requires DIALOGEX"));
$$->data = $6;
}
}
if ($10 != NULL)
{
if (dialog.ex == NULL)
- rcparse_warning ("control data requires DIALOGEX");
+ rcparse_warning (_("control data requires DIALOGEX"));
$$->data = $10;
}
}
$$ = define_control ($2, $3, $4, $5, $6, $7, CTL_STATIC,
style, $9);
if (dialog.ex == NULL)
- rcparse_warning ("help ID requires DIALOGEX");
+ rcparse_warning (_("help ID requires DIALOGEX"));
$$->help = $10;
$$->data = $11;
}
{
$$ = $3;
if (dialog.ex == NULL)
- rcparse_warning ("IEDIT requires DIALOGEX");
+ rcparse_warning (_("IEDIT requires DIALOGEX"));
res_string_to_id (&$$->class, "IEDIT");
}
| LISTBOX
if ($7 != NULL)
{
if (dialog.ex == NULL)
- rcparse_warning ("control data requires DIALOGEX");
+ rcparse_warning (_("control data requires DIALOGEX"));
$$->data = $7;
}
}
if ($9 != NULL)
{
if (dialog.ex == NULL)
- rcparse_warning ("control data requires DIALOGEX");
+ rcparse_warning (_("control data requires DIALOGEX"));
$$->data = $9;
}
}
{
$$ = define_control ($1, $2, $3, $4, $5, $6, class, style, $8);
if (dialog.ex == NULL)
- rcparse_warning ("help ID requires DIALOGEX");
+ rcparse_warning (_("help ID requires DIALOGEX"));
$$->help = $9;
$$->data = $10;
}
/* It seems that resource ID's are forced to upper case. */
copy = xstrdup ($1);
for (s = copy; *s != '\0'; s++)
- if (islower (*s))
- *s = toupper (*s);
+ if (islower ((unsigned char) *s))
+ *s = toupper ((unsigned char) *s);
res_string_to_id (&$$, copy);
free (copy);
}
$$ = $1;
$$.language = $3 | ($4 << 8);
}
- | suboptions VERSION numexpr
+ | suboptions VERSIONK numexpr
{
$$ = $1;
$$.version = $3;
return bin_to_res_fontdir (data, length, big_endian);
case RT_FONT:
return bin_to_res_generic (RES_TYPE_FONT, data, length);
- case RT_ACCELERATORS:
+ case RT_ACCELERATOR:
return bin_to_res_accelerators (data, length, big_endian);
case RT_RCDATA:
return bin_to_res_rcdata (data, length, big_endian);
toosmall (msg)
const char *msg;
{
- fatal ("%s: not enough binary data", msg);
+ fatal (_("%s: not enough binary data"), msg);
}
/* Swap in a NULL terminated unicode string. */
c = 0;
while (1)
{
- if (length < c * 2 + 2)
- toosmall ("null terminated unicode string");
+ if (length < (unsigned long) c * 2 + 2)
+ toosmall (_("null terminated unicode string"));
if (get_16 (big_endian, data + c * 2) == 0)
break;
++c;
int first;
if (length < 2)
- toosmall ("resource ID");
+ toosmall (_("resource ID"));
first = get_16 (big_endian, data);
if (first == 0xffff)
{
if (length < 4)
- toosmall ("resource ID");
+ toosmall (_("resource ID"));
id->named = 0;
id->u.id = get_16 (big_endian, data + 2);
return 4;
struct res_resource *r;
if (length < 4)
- toosmall ("cursor");
+ toosmall (_("cursor"));
c = (struct cursor *) res_alloc (sizeof *c);
c->xhotspot = get_16 (big_endian, data);
r->u.menu = m;
if (length < 2)
- toosmall ("menu header");
+ toosmall (_("menu header"));
version = get_16 (big_endian, data);
if (version == 0)
{
if (length < 4)
- toosmall ("menu header");
+ toosmall (_("menu header"));
m->help = 0;
m->items = bin_to_res_menuitems (data + 4, length - 4, big_endian,
&read);
}
else if (version == 1)
{
- int offset;
+ unsigned int offset;
if (length < 8)
- toosmall ("menuex header");
+ toosmall (_("menuex header"));
m->help = get_32 (big_endian, data + 4);
offset = get_16 (big_endian, data + 2);
if (offset + 4 >= length)
- toosmall ("menuex offset");
+ toosmall (_("menuex offset"));
m->items = bin_to_res_menuexitems (data + 4 + offset,
length - (4 + offset),
big_endian,
&read);
}
else
- fatal ("unsupported menu version %d", version);
+ fatal (_("unsupported menu version %d"), version);
return r;
}
while (length > 0)
{
- int flags, stroff, slen, itemlen;
+ int flags, slen, itemlen;
+ unsigned int stroff;
struct menuitem *mi;
if (length < 4)
- toosmall ("menuitem header");
+ toosmall (_("menuitem header"));
mi = (struct menuitem *) res_alloc (sizeof *mi);
mi->state = 0;
mi->help = 0;
flags = get_16 (big_endian, data);
- mi->type = flags;
+ mi->type = flags &~ (MENUITEM_POPUP | MENUITEM_ENDMENU);
if ((flags & MENUITEM_POPUP) == 0)
stroff = 4;
stroff = 2;
if (length < stroff + 2)
- toosmall ("menuitem header");
+ toosmall (_("menuitem header"));
if (get_16 (big_endian, data + stroff) == 0)
{
while (length > 0)
{
- int flags, slen, itemlen;
+ int flags, slen;
+ unsigned int itemlen;
struct menuitem *mi;
if (length < 14)
- toosmall ("menuitem header");
+ toosmall (_("menuitem header"));
mi = (struct menuitem *) res_alloc (sizeof *mi);
mi->type = get_32 (big_endian, data);
int subread;
if (length < itemlen + 4)
- toosmall ("menuitem");
+ toosmall (_("menuitem"));
mi->help = get_32 (big_endian, data + itemlen);
itemlen += 4;
{
int version;
struct dialog *d;
- int c, sublen, off, i;
+ int c, sublen, i;
+ unsigned int off;
struct dialog_control **pp;
struct res_resource *r;
if (length < 18)
- toosmall ("dialog header");
+ toosmall (_("dialog header"));
d = (struct dialog *) res_alloc (sizeof *d);
signature = get_16 (big_endian, data + 2);
if (signature != 1)
- fatal ("unexpected dialog signature %d", signature);
+ fatal (_("unexpected dialog signature %d"), signature);
d->ex = (struct dialog_ex *) res_alloc (sizeof (struct dialog_ex));
d->ex->help = get_32 (big_endian, data + 4);
}
if (length < off + 10)
- toosmall ("dialog header");
+ toosmall (_("dialog header"));
c = get_16 (big_endian, data + off);
d->x = get_16 (big_endian, data + off + 2);
else
{
if (length < off + 2)
- toosmall ("dialog font point size");
+ toosmall (_("dialog font point size"));
d->pointsize = get_16 (big_endian, data + off);
off += 2;
if (d->ex != NULL)
{
if (length < off + 4)
- toosmall ("dialogex font information");
+ toosmall (_("dialogex font information"));
d->ex->weight = get_16 (big_endian, data + off);
d->ex->italic = get_16 (big_endian, data + off + 2);
off += 4;
if (d->ex == NULL)
{
if (length < off + 8)
- toosmall ("dialog control");
+ toosmall (_("dialog control"));
dc->style = get_32 (big_endian, data + off);
dc->exstyle = get_32 (big_endian, data + off + 4);
else
{
if (length < off + 12)
- toosmall ("dialogex control");
+ toosmall (_("dialogex control"));
dc->help = get_32 (big_endian, data + off);
dc->exstyle = get_32 (big_endian, data + off + 4);
dc->style = get_32 (big_endian, data + off + 18);
}
if (length < off + 10)
- toosmall ("dialog control");
+ toosmall (_("dialog control"));
dc->x = get_16 (big_endian, data + off);
dc->y = get_16 (big_endian, data + off + 2);
off += sublen;
if (length < off + 2)
- toosmall ("dialog control end");
+ toosmall (_("dialog control end"));
datalen = get_16 (big_endian, data + off);
off += 2;
off = (off + 3) &~ 3;
if (length < off + datalen)
- toosmall ("dialog control data");
+ toosmall (_("dialog control data"));
dc->data = ((struct rcdata_item *)
res_alloc (sizeof (struct rcdata_item)));
for (i = 0; i < 16; i++)
{
- int slen;
+ unsigned int slen;
if (length < 2)
- toosmall ("stringtable string length");
+ toosmall (_("stringtable string length"));
slen = get_16 (big_endian, data);
st->strings[i].length = slen;
if (slen > 0)
{
unichar *s;
- int j;
+ unsigned int j;
if (length < 2 + 2 * slen)
- toosmall ("stringtable string");
+ toosmall (_("stringtable string"));
s = (unichar *) res_alloc (slen * sizeof (unichar));
st->strings[i].string = s;
struct res_resource *r;
if (length < 2)
- toosmall ("fontdir header");
+ toosmall (_("fontdir header"));
c = get_16 (big_endian, data);
for (i = 0; i < c; i++)
{
struct fontdir *fd;
- int off;
+ unsigned int off;
if (length < 56)
- toosmall ("fontdir");
+ toosmall (_("fontdir"));
fd = (struct fontdir *) res_alloc (sizeof *fd);
fd->index = get_16 (big_endian, data);
while (off < length && data[off] != '\0')
++off;
if (off >= length)
- toosmall ("fontdir device name");
+ toosmall (_("fontdir device name"));
++off;
while (off < length && data[off] != '\0')
++off;
if (off >= length)
- toosmall ("fontdir face name");
+ toosmall (_("fontdir face name"));
++off;
fd->length = off;
struct accelerator *a;
if (length < 8)
- toosmall ("accelerator");
+ toosmall (_("accelerator"));
+
+ a = (struct accelerator *) res_alloc (sizeof *a);
a->flags = get_16 (big_endian, data);
a->key = get_16 (big_endian, data + 2);
struct res_resource *r;
if (length < 6)
- toosmall ("group cursor header");
+ toosmall (_("group cursor header"));
type = get_16 (big_endian, data + 2);
if (type != 2)
- fatal ("unexpected group cursor type %d", type);
+ fatal (_("unexpected group cursor type %d"), type);
c = get_16 (big_endian, data + 4);
struct group_cursor *gc;
if (length < 14)
- toosmall ("group cursor");
+ toosmall (_("group cursor"));
gc = (struct group_cursor *) res_alloc (sizeof *gc);
struct res_resource *r;
if (length < 6)
- toosmall ("group icon header");
+ toosmall (_("group icon header"));
type = get_16 (big_endian, data + 2);
if (type != 1)
- fatal ("unexpected group icon type %d", type);
+ fatal (_("unexpected group icon type %d"), type);
c = get_16 (big_endian, data + 4);
struct group_icon *gi;
if (length < 14)
- toosmall ("group icon");
+ toosmall (_("group icon"));
gi = (struct group_icon *) res_alloc (sizeof *gi);
{
if (length < 2)
toosmall (key);
- if (get_16 (big_endian, data) != *key)
- fatal ("unexpected version string");
+ if (get_16 (big_endian, data) != (unsigned char) *key)
+ fatal (_("unexpected version string"));
*off += 2;
length -= 2;
get_version_header (data, length, big_endian, "VS_VERSION_INFO",
(unichar *) NULL, &verlen, &vallen, &type, &off);
- if (verlen != length)
- fatal ("version length %d does not match resource length %lu",
+ if ((unsigned int) verlen != length)
+ fatal (_("version length %d does not match resource length %lu"),
verlen, length);
if (type != 0)
- fatal ("unexpected version type %d", type);
+ fatal (_("unexpected version type %d"), type);
data += off;
length -= off;
unsigned long signature, fiv;
if (vallen != 52)
- fatal ("unexpected fixed version information length %d", vallen);
+ fatal (_("unexpected fixed version information length %d"), vallen);
if (length < 52)
- toosmall ("fixed version info");
+ toosmall (_("fixed version info"));
signature = get_32 (big_endian, data);
if (signature != 0xfeef04bd)
- fatal ("unexpected fixed version signature %lu", signature);
+ fatal (_("unexpected fixed version signature %lu"), signature);
fiv = get_32 (big_endian, data + 4);
if (fiv != 0 && fiv != 0x10000)
- fatal ("unexpected fixed version info version %lu", fiv);
+ fatal (_("unexpected fixed version info version %lu"), fiv);
fi = (struct fixed_versioninfo *) res_alloc (sizeof *fi);
int ch;
if (length < 8)
- toosmall ("version var info");
+ toosmall (_("version var info"));
vi = (struct ver_info *) res_alloc (sizeof *vi);
&off);
if (vallen != 0)
- fatal ("unexpected stringfileinfo value length %d", vallen);
+ fatal (_("unexpected stringfileinfo value length %d"), vallen);
data += off;
length -= off;
&type, &off);
if (vallen != 0)
- fatal ("unexpected version stringtable value length %d", vallen);
+ fatal (_("unexpected version stringtable value length %d"), vallen);
data += off;
length -= off;
valoff = (valoff + 3) &~ 3;
if (off + valoff != subverlen)
- fatal ("unexpected version string length %d != %d + %d",
+ fatal (_("unexpected version string length %d != %d + %d"),
subverlen, off, valoff);
vs->next = NULL;
length -= valoff;
if (verlen < subverlen)
- fatal ("unexpected version string length %d < %d",
+ fatal (_("unexpected version string length %d < %d"),
verlen, subverlen);
verlen -= subverlen;
&off);
if (vallen != 0)
- fatal ("unexpected varfileinfo value length %d", vallen);
+ fatal (_("unexpected varfileinfo value length %d"), vallen);
data += off;
length -= off;
struct ver_varinfo *vv;
if (length < 4)
- toosmall ("version varfileinfo");
+ toosmall (_("version varfileinfo"));
vv = (struct ver_varinfo *) res_alloc (sizeof *vv);
length -= 4;
if (vallen < 4)
- fatal ("unexpected version value length %d", vallen);
+ fatal (_("unexpected version value length %d"), vallen);
vallen -= 4;
}
}
else
- fatal ("unexpected version string");
+ fatal (_("unexpected version string"));
vi->next = NULL;
*pp = vi;
d->data = (unsigned char *) reswr_alloc (8);
put_16 (big_endian,
- a->flags | (a->next == NULL ? 0 : ACC_LAST),
+ a->flags | (a->next != NULL ? 0 : ACC_LAST),
d->data);
put_16 (big_endian, a->key, d->data + 2);
put_16 (big_endian, a->id, d->data + 4);
if (! dialogex)
{
put_32 (big_endian, dialog->style, first->data);
- put_32 (big_endian, dialog->style, first->data + 4);
+ put_32 (big_endian, dialog->exstyle, first->data + 4);
off = 8;
}
else
struct bindata *d;
d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = dialogex ? 2 : 6;
+ d->length = dialogex ? 6 : 2;
d->data = (unsigned char *) reswr_alloc (d->length);
length += d->length;
c = 0;
for (dc = dialog->controls; dc != NULL; dc = dc->next)
{
- unsigned long length;
struct bindata *d;
int dcoff;
put_16 (big_endian, 0, d->data);
else
{
+ unsigned long sublen;
+
dword_align_bin (&pp, &length);
*pp = res_to_bin_rcdata (dc->data, big_endian);
+ sublen = 0;
while (*pp != NULL)
{
- length += (*pp)->length;
+ sublen += (*pp)->length;
pp = &(*pp)->next;
}
+
+ put_16 (big_endian, sublen, d->data);
+
+ length += sublen;
}
}
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);
sec = bfd_get_section_by_name (abfd, ".rsrc");
if (sec == NULL)
{
- fprintf (stderr, "%s: %s: no resource section\n", program_name,
+ fprintf (stderr, _("%s: %s: no resource section\n"), program_name,
filename);
xexit (1);
}
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;
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. */
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;
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);
/* 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;
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);
}
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);
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);
}
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);
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;
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);
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 is the header file for the windres program. It defines
structures and declares functions used within the program. */
+#include "winduni.h"
+
/* We represent resources internally as a tree, similar to the tree
used in the .rsrc section of a COFF file. The root is a
res_directory structure. */
struct
{
/* Length of the name. */
- unsigned short length;
+ int length;
/* Pointer to the name, which is a Unicode string. */
- unsigned short *name;
+ unichar *name;
} n;
/* If the named field is zero, this is the ID. */
unsigned long id;
struct
{
unsigned long length;
- unsigned char *data;
+ const unsigned char *data;
} data;
struct accelerator *acc;
struct cursor *cursor;
struct dialog *dialog;
struct fontdir *fontdir;
struct group_icon *group_icon;
- struct menuitem *menu;
- struct rcdata_data *rcdata;
+ struct menu *menu;
+ struct rcdata_item *rcdata;
struct stringtable *stringtable;
- struct rcdata_data *userdata;
+ struct rcdata_item *userdata;
struct versioninfo *versioninfo;
} u;
/* Information from a res file. */
#define RT_STRING 6
#define RT_FONTDIR 7
#define RT_FONT 8
-#define RT_ACCELERATORS 9
+#define RT_ACCELERATOR 9
#define RT_RCDATA 10
#define RT_MESSAGETABLE 11
#define RT_GROUP_CURSOR 12
#define RT_GROUP_ICON 14
#define RT_VERSION 16
#define RT_DLGINCLUDE 17
-#define RT_PLUGPLAY 18
-#define RT_VXD 19
+#define RT_PLUGPLAY 19
+#define RT_VXD 20
#define RT_ANICURSOR 21
#define RT_ANIICON 22
/* Length of bitmap data. */
unsigned long length;
/* Data. */
- unsigned char *data;
+ const unsigned char *data;
};
/* A group_cursor resource is a list of group_cursor structures. */
/* Class name. */
struct res_id class;
/* Caption. */
- char *caption;
+ unichar *caption;
/* Font point size. */
unsigned short pointsize;
/* Font name. */
- char *font;
+ unichar *font;
/* Extended information for a dialogex. */
struct dialog_ex *ex;
/* Controls. */
/* Associated text. */
struct res_id text;
/* Extra data for the window procedure. */
- struct rcdata_data *data;
+ struct rcdata_item *data;
/* Help ID. Only used in an extended dialog. */
unsigned long help;
};
/* Length of font information. */
unsigned long length;
/* Font information. */
- unsigned char *data;
+ const unsigned char *data;
};
/* A group_icon resource is a list of group_icon structures. */
unsigned short index;
};
+/* A menu resource. */
+
+struct menu
+{
+ /* List of menuitems. */
+ struct menuitem *items;
+ /* Help ID. I don't think there is any way to set this in an rc
+ file, but it can appear in the binary format. */
+ unsigned long help;
+};
+
/* A menu resource is a list of menuitem structures. */
struct menuitem
unsigned long state;
/* Id. */
unsigned short id;
- /* Text. */
- char *text;
+ /* Unicode text. */
+ unichar *text;
/* Popup menu items for a popup. */
struct menuitem *popup;
/* Help ID. This is only used in a menuex. */
#define MENUITEM_POPUP 0x010
#define MENUITEM_MENUBARBREAK 0x020
#define MENUITEM_MENUBREAK 0x040
+#define MENUITEM_ENDMENU 0x080
#define MENUITEM_HELP 0x4000
-/* An rcdata resource is a pointer to an rcdata_data structure. */
-
-struct rcdata_data
-{
- /* First data item. */
- struct rcdata_item *first;
- /* Last data item. */
- struct rcdata_item *last;
-};
-
-/* For an rcdata resource we keep a list of rcdata_item structures. */
+/* An rcdata resource is a pointer to a list of rcdata_item
+ structures. */
struct rcdata_item
{
{
unsigned int word;
unsigned long dword;
- char *string;
- unsigned short *wstring;
struct
{
unsigned long length;
- unsigned char *data;
+ const char *s;
+ } string;
+ struct
+ {
+ unsigned long length;
+ const unichar *w;
+ } wstring;
+ struct
+ {
+ unsigned long length;
+ const unsigned char *data;
} buffer;
} u;
};
struct
{
/* Length of string. */
- unsigned short length;
+ int length;
/* String data if length > 0. */
- unsigned short *string;
+ unichar *string;
} strings[16];
};
struct
{
/* Language. */
- unsigned short *language;
+ unichar *language;
/* Strings. */
struct ver_stringinfo *strings;
} string;
struct
{
/* Key. */
- unsigned short *key;
+ unichar *key;
/* Values. */
struct ver_varinfo *var;
} var;
/* Next string. */
struct ver_stringinfo *next;
/* Key. */
- unsigned short *key;
+ unichar *key;
/* Value. */
- unsigned short *value;
+ unichar *value;
};
/* A list of variable version information. */
unsigned short charset;
};
+/* This structure is used when converting resource information to
+ binary. */
+
+struct bindata
+{
+ /* Next data. */
+ struct bindata *next;
+ /* Length of data. */
+ unsigned long length;
+ /* Data. */
+ unsigned char *data;
+};
+
/* Function declarations. */
extern struct res_directory *read_rc_file
extern void write_coff_file
PARAMS ((const char *, const char *, const struct res_directory *));
+extern struct res_resource *bin_to_res
+ PARAMS ((struct res_id, const unsigned char *, unsigned long, int));
+extern struct bindata *res_to_bin PARAMS ((const struct res_resource *, int));
+
extern FILE *open_file_search
PARAMS ((const char *, const char *, const char *, char **));
+extern PTR res_alloc PARAMS ((size_t));
+extern PTR reswr_alloc PARAMS ((size_t));
+
/* Resource ID handling. */
extern int res_id_cmp PARAMS ((struct res_id, struct res_id));
extern void res_ids_print PARAMS ((FILE *, int, const struct res_id *));
extern void res_string_to_id PARAMS ((struct res_id *, const char *));
-/* Unicode support. */
-
-extern void unicode_from_ascii
- PARAMS ((unsigned short *, unsigned short **, const char *));
-extern void unicode_print PARAMS ((FILE *, const unsigned short *, int));
-
/* Manipulation of the resource tree. */
extern struct res_resource *define_resource
PARAMS ((struct res_directory **, int, struct res_id, int, int));
extern int extended_dialog PARAMS ((const struct dialog *));
-extern int extended_menu PARAMS ((const struct menuitem *));
+extern int extended_menu PARAMS ((const struct menu *));
/* Communication between the rc file support and the parser and lexer. */
extern void yyerror PARAMS ((const char *));
extern void rcparse_warning PARAMS ((const char *));
extern void rcparse_set_language PARAMS ((int));
+extern void rcparse_discard_strings PARAMS ((void));
+extern void rcparse_rcdata PARAMS ((void));
+extern void rcparse_normal PARAMS ((void));
extern void define_accelerator
PARAMS ((struct res_id, const struct res_res_info *, struct accelerator *));
extern void define_dialog
PARAMS ((struct res_id, const struct res_res_info *, const struct dialog *));
extern struct dialog_control *define_control
- PARAMS ((char *, unsigned long, unsigned long, unsigned long,
+ PARAMS ((const char *, unsigned long, unsigned long, unsigned long,
unsigned long, unsigned long, unsigned long, unsigned long,
unsigned long));
extern void define_font
extern void define_menu
PARAMS ((struct res_id, const struct res_res_info *, struct menuitem *));
extern struct menuitem *define_menuitem
- PARAMS ((char *, int, unsigned long, unsigned long, unsigned long,
+ PARAMS ((const char *, int, unsigned long, unsigned long, unsigned long,
struct menuitem *));
extern void define_messagetable
PARAMS ((struct res_id, const struct res_res_info *, const char *));
extern void define_rcdata
- PARAMS ((struct res_id, const struct res_res_info *, struct rcdata_data *));
-extern struct rcdata_data *append_rcdata_item
- PARAMS ((struct rcdata_data *, struct rcdata_item *));
-extern struct rcdata_data *append_rcdata_string
- PARAMS ((struct rcdata_data *, char *));
-extern struct rcdata_data *append_rcdata_number
- PARAMS ((struct rcdata_data *, unsigned long, int));
+ PARAMS ((struct res_id, const struct res_res_info *, struct rcdata_item *));
+extern struct rcdata_item *define_rcdata_string
+ PARAMS ((const char *, unsigned long));
+extern struct rcdata_item *define_rcdata_number PARAMS ((unsigned long, int));
extern void define_stringtable
- PARAMS ((const struct res_res_info *, unsigned long, char *));
+ PARAMS ((const struct res_res_info *, unsigned long, const char *));
extern void define_user_data
PARAMS ((struct res_id, struct res_id, const struct res_res_info *,
- struct rcdata_data *));
+ struct rcdata_item *));
extern void define_user_file
PARAMS ((struct res_id, struct res_id, const struct res_res_info *,
const char *));
PARAMS ((struct res_id, int, struct fixed_versioninfo *,
struct ver_info *));
extern struct ver_info *append_ver_stringfileinfo
- PARAMS ((struct ver_info *, char *, struct ver_stringinfo *));
+ PARAMS ((struct ver_info *, const char *, struct ver_stringinfo *));
extern struct ver_info *append_ver_varfileinfo
- PARAMS ((struct ver_info *, char *, struct ver_varinfo *));
+ PARAMS ((struct ver_info *, const char *, struct ver_varinfo *));
extern struct ver_stringinfo *append_verval
- PARAMS ((struct ver_stringinfo *, char *, char *));
+ PARAMS ((struct ver_stringinfo *, const char *, const char *));
extern struct ver_varinfo *append_vertrans
PARAMS ((struct ver_varinfo *, unsigned long, unsigned long));