Use signature to identify DIALOGEX.
Add testcase.
This commit is contained in:
parent
91eafb409b
commit
7e8d45b779
4 changed files with 32 additions and 14 deletions
|
@ -10,6 +10,8 @@
|
|||
encodes as binary 8.
|
||||
|
||||
* resrc.c: Print style even if it is 0.
|
||||
|
||||
* resbin.c: Use signature to identify DIALOGEX.
|
||||
|
||||
2002-04-09 Gunnar Degnbol <degnbol@danbbs.dk>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* resbin.c -- manipulate the Windows binary resource format.
|
||||
Copyright 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
Copyright 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
|
||||
Written by Ian Lance Taylor, Cygnus Support.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
@ -68,6 +68,9 @@ static struct res_resource *bin_to_res_version
|
|||
PARAMS ((const unsigned char *, unsigned long, int));
|
||||
static struct res_resource *bin_to_res_userdata
|
||||
PARAMS ((const unsigned char *, unsigned long, int));
|
||||
static void get_version_header
|
||||
PARAMS ((const unsigned char *, unsigned long, int, const char *,
|
||||
unichar **, int *, int *, int *, int *));
|
||||
|
||||
/* Given a resource type ID, a pointer to data, a length, return a
|
||||
res_resource structure which represents that resource. The caller
|
||||
|
@ -460,7 +463,7 @@ bin_to_res_dialog (data, length, big_endian)
|
|||
unsigned long length;
|
||||
int big_endian;
|
||||
{
|
||||
int version;
|
||||
int signature;
|
||||
struct dialog *d;
|
||||
int c, sublen, i;
|
||||
unsigned int off;
|
||||
|
@ -472,8 +475,8 @@ bin_to_res_dialog (data, length, big_endian)
|
|||
|
||||
d = (struct dialog *) res_alloc (sizeof *d);
|
||||
|
||||
version = get_16 (big_endian, data);
|
||||
if (version != 1)
|
||||
signature = get_16 (big_endian, data + 2);
|
||||
if (signature != 0xffff)
|
||||
{
|
||||
d->ex = NULL;
|
||||
d->style = get_32 (big_endian, data);
|
||||
|
@ -482,11 +485,11 @@ bin_to_res_dialog (data, length, big_endian)
|
|||
}
|
||||
else
|
||||
{
|
||||
int signature;
|
||||
|
||||
signature = get_16 (big_endian, data + 2);
|
||||
if (signature != 0xffff)
|
||||
fatal (_("unexpected dialog signature %d"), signature);
|
||||
int version;
|
||||
|
||||
version = get_16 (big_endian, data);
|
||||
if (version != 1)
|
||||
fatal (_("unexpected DIALOGEX version %d"), version);
|
||||
|
||||
d->ex = (struct dialog_ex *) res_alloc (sizeof (struct dialog_ex));
|
||||
d->ex->help = get_32 (big_endian, data + 4);
|
||||
|
@ -808,7 +811,7 @@ static struct res_resource *
|
|||
bin_to_res_rcdata (data, length, big_endian)
|
||||
const unsigned char *data;
|
||||
unsigned long length;
|
||||
int big_endian;
|
||||
int big_endian ATTRIBUTE_UNUSED;
|
||||
{
|
||||
struct rcdata_item *ri;
|
||||
struct res_resource *r;
|
||||
|
@ -1019,7 +1022,7 @@ bin_to_res_version (data, length, big_endian)
|
|||
struct res_resource *r;
|
||||
|
||||
get_version_header (data, length, big_endian, "VS_VERSION_INFO",
|
||||
(unichar *) NULL, &verlen, &vallen, &type, &off);
|
||||
(unichar **) NULL, &verlen, &vallen, &type, &off);
|
||||
|
||||
if ((unsigned int) verlen != length)
|
||||
fatal (_("version length %d does not match resource length %lu"),
|
||||
|
@ -1091,7 +1094,7 @@ bin_to_res_version (data, length, big_endian)
|
|||
vi->type = VERINFO_STRING;
|
||||
|
||||
get_version_header (data, length, big_endian, "StringFileInfo",
|
||||
(unichar *) NULL, &verlen, &vallen, &type,
|
||||
(unichar **) NULL, &verlen, &vallen, &type,
|
||||
&off);
|
||||
|
||||
if (vallen != 0)
|
||||
|
@ -1163,7 +1166,7 @@ bin_to_res_version (data, length, big_endian)
|
|||
vi->type = VERINFO_VAR;
|
||||
|
||||
get_version_header (data, length, big_endian, "VarFileInfo",
|
||||
(unichar *) NULL, &verlen, &vallen, &type,
|
||||
(unichar **) NULL, &verlen, &vallen, &type,
|
||||
&off);
|
||||
|
||||
if (vallen != 0)
|
||||
|
@ -1231,7 +1234,7 @@ static struct res_resource *
|
|||
bin_to_res_userdata (data, length, big_endian)
|
||||
const unsigned char *data;
|
||||
unsigned long length;
|
||||
int big_endian;
|
||||
int big_endian ATTRIBUTE_UNUSED;
|
||||
{
|
||||
struct rcdata_item *ri;
|
||||
struct res_resource *r;
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
101 DIALOG DISCARDABLE 0, 0, 186, 95
|
||||
STYLE 1
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "OK",1,129,7,50,14
|
||||
END
|
|
@ -0,0 +1,8 @@
|
|||
0000 00000000 20000000 ffff0000 ffff0000 .... ...........
|
||||
0010 00000000 00000000 00000000 00000000 ................
|
||||
0020 36000000 20000000 ffff0500 ffff6500 6... .........e.
|
||||
0030 00000000 10100000 00000000 00000000 ................
|
||||
0040 01000000 00000000 01000000 0000ba00 ................
|
||||
0050 5f000000 00000000 01000150 00000000 _..........P....
|
||||
0060 81000700 32000e00 0100ffff 80004f00 ....2.........O.
|
||||
0070 4b000000 00000000 K.......
|
Loading…
Reference in a new issue