From: Ian Lance Taylor Date: Wed, 1 Jul 1998 18:30:20 +0000 (+0000) Subject: * rclex.l: Add casts and change types to avoid warnings. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=72574626a96a884b457fdb2c52628e306a635507;p=binutils-gdb.git * rclex.l: Add casts and change types to avoid warnings. * 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 : * 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. --- diff --git a/binutils/.Sanitize b/binutils/.Sanitize index 3917b2ad749..44eda8785ea 100644 --- a/binutils/.Sanitize +++ b/binutils/.Sanitize @@ -111,6 +111,8 @@ testsuite version.c windres.c windres.h +winduni.c +winduni.h wrstabs.c Things-to-lose: diff --git a/binutils/Makefile.am b/binutils/Makefile.am index 553cc7b0b49..36a948ddc43 100644 --- a/binutils/Makefile.am +++ b/binutils/Makefile.am @@ -73,7 +73,7 @@ DEP = mkdep 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 @@ -82,7 +82,7 @@ CFILES = addr2line.c ar.c arsup.c bucomm.c coffdump.c coffgrok.c debug.c \ 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 \ @@ -252,7 +252,7 @@ nlmconv.o: nlmconv.c $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h 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 \ @@ -430,21 +430,24 @@ wrstabs.o: wrstabs.c ../bfd/bfd.h $(INCDIR)/ansidecl.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 @@ -461,9 +464,9 @@ nlmheader.o: nlmheader.c ../bfd/bfd.h bucomm.h config.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 diff --git a/binutils/Makefile.in b/binutils/Makefile.in index 69cec5b55a9..ff9ccc934b7 100644 --- a/binutils/Makefile.in +++ b/binutils/Makefile.in @@ -145,7 +145,7 @@ DEP = mkdep 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 @@ -154,7 +154,7 @@ CFILES = addr2line.c ar.c arsup.c bucomm.c coffdump.c coffgrok.c debug.c \ 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 \ @@ -239,7 +239,7 @@ sysdump_SOURCES = sysdump.c $(BULIBS) 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 \ @@ -289,7 +289,7 @@ filemode.o 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 @@ -425,15 +425,15 @@ install-binPROGRAMS: $(bin_PROGRAMS) $(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: @@ -1202,21 +1202,24 @@ wrstabs.o: wrstabs.c ../bfd/bfd.h $(INCDIR)/ansidecl.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 + 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 @@ -1233,10 +1236,10 @@ nlmheader.o: nlmheader.c ../bfd/bfd.h bucomm.h config.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 diff --git a/binutils/rclex.l b/binutils/rclex.l index 50ef185d8ed..06a66077f28 100644 --- a/binutils/rclex.l +++ b/binutils/rclex.l @@ -235,18 +235,18 @@ cpp_line (s) 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 != '"') @@ -392,8 +392,8 @@ handle_quotes (input, len) else { ++t; - assert (isspace (*t)); - while (isspace (*t)) + assert (isspace ((unsigned char) *t)); + while (isspace ((unsigned char) *t)) ++t; if (*t == '\0') break; diff --git a/binutils/rcparse.y b/binutils/rcparse.y index 0ab87d2cf80..c5de25f5025 100644 --- a/binutils/rcparse.y +++ b/binutils/rcparse.y @@ -107,7 +107,7 @@ static unsigned long class; %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 @@ -221,6 +221,9 @@ acc_entry: $$ = $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")); } ; @@ -228,21 +231,27 @@ acc_event: 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; @@ -258,6 +267,11 @@ acc_options: { $$ = $1 | $3; } + /* I've had one report that the comma is optional. */ + | acc_options acc_option + { + $$ = $1 | $2; + } ; acc_option: @@ -422,7 +436,7 @@ styles: 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; @@ -441,7 +455,7 @@ styles: { sub_res_info.language = $3 | ($4 << 8); } - | styles VERSION numexpr + | styles VERSIONK numexpr { sub_res_info.version = $3; } @@ -500,7 +514,7 @@ control: { $$ = $3; if (dialog.ex == NULL) - rcparse_warning ("IEDIT requires DIALOGEX"); + rcparse_warning (_("IEDIT requires DIALOGEX")); res_string_to_id (&$$->class, "BEDIT"); } | CHECKBOX @@ -530,7 +544,7 @@ control: if ($11 != NULL) { if (dialog.ex == NULL) - rcparse_warning ("control data requires DIALOGEX"); + rcparse_warning (_("control data requires DIALOGEX")); $$->data = $11; } } @@ -539,7 +553,7 @@ control: { $$ = 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; } @@ -593,7 +607,7 @@ control: { $$ = $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 @@ -603,7 +617,7 @@ control: if ($6 != NULL) { if (dialog.ex == NULL) - rcparse_warning ("control data requires DIALOGEX"); + rcparse_warning (_("control data requires DIALOGEX")); $$->data = $6; } } @@ -615,7 +629,7 @@ control: if ($10 != NULL) { if (dialog.ex == NULL) - rcparse_warning ("control data requires DIALOGEX"); + rcparse_warning (_("control data requires DIALOGEX")); $$->data = $10; } } @@ -625,7 +639,7 @@ control: $$ = 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; } @@ -639,7 +653,7 @@ control: { $$ = $3; if (dialog.ex == NULL) - rcparse_warning ("IEDIT requires DIALOGEX"); + rcparse_warning (_("IEDIT requires DIALOGEX")); res_string_to_id (&$$->class, "IEDIT"); } | LISTBOX @@ -748,7 +762,7 @@ control_params: if ($7 != NULL) { if (dialog.ex == NULL) - rcparse_warning ("control data requires DIALOGEX"); + rcparse_warning (_("control data requires DIALOGEX")); $$->data = $7; } } @@ -759,7 +773,7 @@ control_params: if ($9 != NULL) { if (dialog.ex == NULL) - rcparse_warning ("control data requires DIALOGEX"); + rcparse_warning (_("control data requires DIALOGEX")); $$->data = $9; } } @@ -768,7 +782,7 @@ control_params: { $$ = 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; } @@ -1221,8 +1235,8 @@ id: /* 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); } @@ -1255,7 +1269,7 @@ suboptions: $$ = $1; $$.language = $3 | ($4 << 8); } - | suboptions VERSION numexpr + | suboptions VERSIONK numexpr { $$ = $1; $$.version = $3; diff --git a/binutils/resbin.c b/binutils/resbin.c index 7931dbf7a9e..b148ae48ca0 100644 --- a/binutils/resbin.c +++ b/binutils/resbin.c @@ -105,7 +105,7 @@ bin_to_res (type, data, length, big_endian) 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); @@ -127,7 +127,7 @@ static void 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. */ @@ -145,8 +145,8 @@ get_unicode (data, length, big_endian, retlen) 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; @@ -176,13 +176,13 @@ get_resid (id, data, length, big_endian) 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; @@ -226,7 +226,7 @@ bin_to_res_cursor (data, length, big_endian) 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); @@ -260,35 +260,35 @@ bin_to_res_menu (data, length, big_endian) 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; } @@ -311,18 +311,19 @@ bin_to_res_menuitems (data, length, big_endian, read) 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; @@ -330,7 +331,7 @@ bin_to_res_menuitems (data, length, big_endian, read) stroff = 2; if (length < stroff + 2) - toosmall ("menuitem header"); + toosmall (_("menuitem header")); if (get_16 (big_endian, data + stroff) == 0) { @@ -391,11 +392,12 @@ bin_to_res_menuexitems (data, length, big_endian, read) 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); @@ -425,7 +427,7 @@ bin_to_res_menuexitems (data, length, big_endian, read) int subread; if (length < itemlen + 4) - toosmall ("menuitem"); + toosmall (_("menuitem")); mi->help = get_32 (big_endian, data + itemlen); itemlen += 4; @@ -460,12 +462,13 @@ bin_to_res_dialog (data, length, big_endian) { 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); @@ -483,7 +486,7 @@ bin_to_res_dialog (data, length, big_endian) 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); @@ -493,7 +496,7 @@ bin_to_res_dialog (data, length, big_endian) } 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); @@ -525,7 +528,7 @@ bin_to_res_dialog (data, length, big_endian) 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; @@ -533,7 +536,7 @@ bin_to_res_dialog (data, length, big_endian) 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; @@ -558,7 +561,7 @@ bin_to_res_dialog (data, length, big_endian) 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); @@ -568,7 +571,7 @@ bin_to_res_dialog (data, length, big_endian) 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); @@ -576,7 +579,7 @@ bin_to_res_dialog (data, length, big_endian) } 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); @@ -593,7 +596,7 @@ bin_to_res_dialog (data, length, big_endian) off += sublen; if (length < off + 2) - toosmall ("dialog control end"); + toosmall (_("dialog control end")); datalen = get_16 (big_endian, data + off); off += 2; @@ -605,7 +608,7 @@ bin_to_res_dialog (data, length, big_endian) 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))); @@ -645,20 +648,20 @@ bin_to_res_string (data, length, big_endian) 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; @@ -691,7 +694,7 @@ bin_to_res_fontdir (data, length, big_endian) struct res_resource *r; if (length < 2) - toosmall ("fontdir header"); + toosmall (_("fontdir header")); c = get_16 (big_endian, data); @@ -701,10 +704,10 @@ bin_to_res_fontdir (data, length, big_endian) 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); @@ -720,13 +723,13 @@ bin_to_res_fontdir (data, length, big_endian) 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; @@ -769,7 +772,9 @@ bin_to_res_accelerators (data, length, big_endian) 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); @@ -831,11 +836,11 @@ bin_to_res_group_cursor (data, length, big_endian) 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); @@ -850,7 +855,7 @@ bin_to_res_group_cursor (data, length, big_endian) struct group_cursor *gc; if (length < 14) - toosmall ("group cursor"); + toosmall (_("group cursor")); gc = (struct group_cursor *) res_alloc (sizeof *gc); @@ -889,11 +894,11 @@ bin_to_res_group_icon (data, length, big_endian) 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); @@ -908,7 +913,7 @@ bin_to_res_group_icon (data, length, big_endian) struct group_icon *gi; if (length < 14) - toosmall ("group icon"); + toosmall (_("group icon")); gi = (struct group_icon *) res_alloc (sizeof *gi); @@ -978,8 +983,8 @@ get_version_header (data, length, big_endian, key, pkey, len, vallen, type, { 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; @@ -1012,12 +1017,12 @@ bin_to_res_version (data, length, big_endian) 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; @@ -1029,18 +1034,18 @@ bin_to_res_version (data, length, big_endian) 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); @@ -1069,7 +1074,7 @@ bin_to_res_version (data, length, big_endian) int ch; if (length < 8) - toosmall ("version var info"); + toosmall (_("version var info")); vi = (struct ver_info *) res_alloc (sizeof *vi); @@ -1086,7 +1091,7 @@ bin_to_res_version (data, length, big_endian) &off); if (vallen != 0) - fatal ("unexpected stringfileinfo value length %d", vallen); + fatal (_("unexpected stringfileinfo value length %d"), vallen); data += off; length -= off; @@ -1096,7 +1101,7 @@ bin_to_res_version (data, length, big_endian) &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; @@ -1130,7 +1135,7 @@ bin_to_res_version (data, length, big_endian) 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; @@ -1141,7 +1146,7 @@ bin_to_res_version (data, length, big_endian) length -= valoff; if (verlen < subverlen) - fatal ("unexpected version string length %d < %d", + fatal (_("unexpected version string length %d < %d"), verlen, subverlen); verlen -= subverlen; @@ -1158,7 +1163,7 @@ bin_to_res_version (data, length, big_endian) &off); if (vallen != 0) - fatal ("unexpected varfileinfo value length %d", vallen); + fatal (_("unexpected varfileinfo value length %d"), vallen); data += off; length -= off; @@ -1177,7 +1182,7 @@ bin_to_res_version (data, length, big_endian) struct ver_varinfo *vv; if (length < 4) - toosmall ("version varfileinfo"); + toosmall (_("version varfileinfo")); vv = (struct ver_varinfo *) res_alloc (sizeof *vv); @@ -1192,13 +1197,13 @@ bin_to_res_version (data, length, big_endian) 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; @@ -1448,7 +1453,7 @@ res_to_bin_accelerator (accelerators, big_endian) 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); @@ -1559,7 +1564,7 @@ res_to_bin_dialog (dialog, big_endian) 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 @@ -1599,7 +1604,7 @@ res_to_bin_dialog (dialog, big_endian) 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; @@ -1631,7 +1636,6 @@ res_to_bin_dialog (dialog, big_endian) c = 0; for (dc = dialog->controls; dc != NULL; dc = dc->next) { - unsigned long length; struct bindata *d; int dcoff; @@ -1690,14 +1694,21 @@ res_to_bin_dialog (dialog, big_endian) 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; } } diff --git a/binutils/rescoff.c b/binutils/rescoff.c index 6c7f21b15e3..e620f2eb206 100644 --- a/binutils/rescoff.c +++ b/binutils/rescoff.c @@ -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,7 +142,7 @@ 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, + fprintf (stderr, _("%s: %s: no resource section\n"), program_name, filename); xexit (1); } @@ -148,7 +151,7 @@ read_coff_rsrc (filename, target) 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 +177,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 +195,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 +224,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 +232,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 +252,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 +276,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 +292,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 +327,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 +425,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 +437,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); @@ -721,7 +726,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 *)); diff --git a/binutils/windres.h b/binutils/windres.h index dbb9c5c2afa..a0a962dd51c 100644 --- a/binutils/windres.h +++ b/binutils/windres.h @@ -24,6 +24,8 @@ /* 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. */ @@ -55,9 +57,9 @@ struct res_id 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; @@ -162,7 +164,7 @@ struct res_resource struct { unsigned long length; - unsigned char *data; + const unsigned char *data; } data; struct accelerator *acc; struct cursor *cursor; @@ -170,10 +172,10 @@ struct res_resource 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. */ @@ -200,15 +202,15 @@ struct res_resource #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 @@ -247,7 +249,7 @@ struct cursor /* 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. */ @@ -291,11 +293,11 @@ struct dialog /* 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. */ @@ -491,7 +493,7 @@ struct dialog_control /* 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; }; @@ -516,7 +518,7 @@ struct fontdir /* 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. */ @@ -541,6 +543,17 @@ struct group_icon 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 @@ -554,8 +567,8 @@ 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. */ @@ -573,19 +586,11 @@ struct menuitem #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 { @@ -604,12 +609,20 @@ 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; }; @@ -622,9 +635,9 @@ struct stringtable struct { /* Length of string. */ - unsigned short length; + int length; /* String data if length > 0. */ - unsigned short *string; + unichar *string; } strings[16]; }; @@ -677,7 +690,7 @@ struct ver_info struct { /* Language. */ - unsigned short *language; + unichar *language; /* Strings. */ struct ver_stringinfo *strings; } string; @@ -685,7 +698,7 @@ struct ver_info struct { /* Key. */ - unsigned short *key; + unichar *key; /* Values. */ struct ver_varinfo *var; } var; @@ -699,9 +712,9 @@ struct ver_stringinfo /* Next string. */ struct ver_stringinfo *next; /* Key. */ - unsigned short *key; + unichar *key; /* Value. */ - unsigned short *value; + unichar *value; }; /* A list of variable version information. */ @@ -716,6 +729,19 @@ struct ver_varinfo 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 @@ -730,9 +756,16 @@ extern void write_res_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)); @@ -740,12 +773,6 @@ extern void res_id_print PARAMS ((FILE *, struct res_id, int)); 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 @@ -754,7 +781,7 @@ extern struct res_resource *define_standard_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. */ @@ -767,6 +794,9 @@ extern int yylex PARAMS ((void)); 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 *)); @@ -777,7 +807,7 @@ extern void define_cursor 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 @@ -787,23 +817,20 @@ extern void define_icon 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 *)); @@ -811,10 +838,10 @@ extern void define_versioninfo 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));