/* Macros to swap in values. */
+#define get_8(s) (*((unsigned char *)(s)))
#define get_16(be, s) ((be) ? bfd_getb16 (s) : bfd_getl16 (s))
#define get_32(be, s) ((be) ? bfd_getb32 (s) : bfd_getl32 (s))
else
{
int version;
-
+
version = get_16 (big_endian, data);
if (version != 1)
fatal (_("unexpected DIALOGEX version %d"), version);
d->caption = get_unicode (data + off, length - off, big_endian, &sublen);
off += sublen * 2 + 2;
+ if (sublen == 0)
+ d->caption = NULL;
if ((d->style & DS_SETFONT) == 0)
{
{
d->ex->weight = 0;
d->ex->italic = 0;
+ d->ex->charset = 1; /* Default charset. */
}
}
else
if (length < off + 4)
toosmall (_("dialogex font information"));
d->ex->weight = get_16 (big_endian, data + off);
- d->ex->italic = get_16 (big_endian, data + off + 2);
+ d->ex->italic = get_8 (data + off + 2);
+ d->ex->charset = get_8 (data + off + 3);
off += 4;
}
dc->height = get_16 (big_endian, data + off + 6);
if (d->ex != NULL)
- dc->id = get_32 (big_endian, data + off + 8);
+ dc->id = get_32 (big_endian, data + off + 8);
else
- dc->id = get_16 (big_endian, data + off + 8);
+ dc->id = get_16 (big_endian, data + off + 8);
off += 10 + (d->ex != NULL ? 2 : 0);
dc->data->u.buffer.length = datalen;
dc->data->u.buffer.data = data + off;
- off += datalen;
+ off += datalen;
}
dc->next = NULL;
vi->next = NULL;
*pp = vi;
- pp = &vi->next;
+ pp = &vi->next;
}
v = (struct versioninfo *) res_alloc (sizeof *v);
r->type = RES_TYPE_VERSIONINFO;
r->u.versioninfo = v;
- return r;
+ return r;
}
/* Convert an arbitrary user defined resource from binary. */
\f
/* Macros to swap out values. */
+#define put_8(v, s) (*((unsigned char *) (s)) = (unsigned char) (v))
#define put_16(be, v, s) ((be) ? bfd_putb16 ((v), (s)) : bfd_putl16 ((v), (s)))
#define put_32(be, v, s) ((be) ? bfd_putb32 ((v), (s)) : bfd_putl32 ((v), (s)))
if (dialog->ex == NULL)
{
put_16 (big_endian, 0, d->data + 2);
- put_16 (big_endian, 0, d->data + 4);
+ put_8 (0, d->data + 4);
+ put_8 (1, d->data + 5);
}
else
{
put_16 (big_endian, dialog->ex->weight, d->data + 2);
- put_16 (big_endian, dialog->ex->italic, d->data + 4);
+ put_8 (dialog->ex->italic, d->data + 4);
+ put_8 (dialog->ex->charset, d->data + 5);
}
}
put_16 (big_endian, dc->height, d->data + dcoff + 6);
if (dialogex)
- put_32 (big_endian, dc->id, d->data + dcoff + 8);
+ put_32 (big_endian, dc->id, d->data + dcoff + 8);
else
- put_16 (big_endian, dc->id, d->data + dcoff + 8);
+ put_16 (big_endian, dc->id, d->data + dcoff + 8);
*pp = d;
pp = &d->next;
d->next = NULL;
*pp = d;
- pp = &d->next;
+ pp = &d->next;
}
put_16 (big_endian, c, first->data);
- return first;
+ return first;
}
/* Convert a group icon resource to binary. */
d->next = NULL;
*pp = d;
- pp = &d->next;
+ pp = &d->next;
}
return first;
d->next = NULL;
- return d;
+ return d;
}
/* Convert a versioninfo resource to binary. */
vsslen += length - hold;
*pp = unicode_to_bin (vs->value, big_endian);
- put_16 (big_endian, (*pp)->length / 2, vssd->data + 2);
+ put_16 (big_endian, (*pp)->length / 2, vssd->data + 2);
length += (*pp)->length;
vilen += (*pp)->length;
vslen += (*pp)->length;