[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: