Bug#323792: test case
forwarded 323792 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23458
thanks
Oops, forgot to attach the test case.
PS: I also submitted the bug upstream.
--
Kind regards,
+--------------------------------------------------------------------+
| Bas Zoetekouw | GPG key: 0644fab7 |
|----------------------------| Fingerprint: c1f5 f24c d514 3fec 8bf6 |
| bas@o2w.nl, bas@debian.org | a2b1 2bae e41f 0644 fab7 |
+--------------------------------------------------------------------+
typedef unsigned char byte;
typedef signed short gint16;
typedef unsigned int size_t;
typedef struct _resource_struct {
unsigned char *data;
unsigned int size;
} resource_t;
int
sciprintf(char *fmt, ...);
int
sci_hexdump(byte *data, int length, int offsetplus);
static inline gint16
getInt16(byte *d)
{
return (gint16)(*d | (d[1] << 8));
}
static void
script_dump_class(char *data, int seeker, int objsize, char **snames, int snames_nr)
{
int selectors, overloads, selectorsize;
sci_hexdump((unsigned char *) data + seeker, objsize -4, seeker);
selectors = (selectorsize = getInt16((unsigned char *) data + seeker + 6));
seeker += 8;
selectorsize <<= 1;
while (selectors--) {
int selector = getInt16((unsigned char *) data + (seeker) + selectorsize);
sciprintf(" [%03x] %s = 0x%x\n", 0xffff & selector,
(snames && selector >= 0 && selector < snames_nr)? snames[selector] : "<?>",
getInt16((unsigned char *) data + seeker) & 0xffff);
seeker += 2;
}
overloads = getInt16((unsigned char *) data + seeker);
while (overloads--) {
sciprintf("%04x\n", getInt16((unsigned char *) data + seeker + selectors*2 + 2) & 0xffff);
}
}
void
script_dissect(void *resmgr, int res_no, char **snames, int snames_nr)
{
int objectctr[11] = {0,0,0,0,0,0,0,0,0,0,0};
unsigned int _seeker = 0;
resource_t *script = 0;
void **words;
words=0;
while (_seeker < script->size) {
int objtype = getInt16(script->data + _seeker);
int objsize;
unsigned int seeker = _seeker + 4;
if (!objtype) {
sciprintf("Classes: %i, Objects: %i, Export: %i,\n Var: %i (all base 10)",
objectctr[6], objectctr[1], objectctr[7], objectctr[10]);
return;
}
objsize = getInt16(script->data + _seeker + 2);
_seeker += objsize;
objectctr[objtype]++;
switch (objtype) {
case 1:
sci_hexdump(script->data + seeker, objsize -4, seeker);
break;
case 2:
script_dump_class ((char *) script->data, seeker, objsize, snames, snames_nr);
break;
}
}
}
Reply to: