Exemplo n.º 1
0
static int _decode_map_string_id(AsmFormatPlugin * format, off_t offset,
		size_t size)
{
	AsmFormatPluginHelper * helper = format->helper;
	DexStringIdItem * dsii;
	ssize_t s;
	size_t i;
	uint8_t u8;

#ifdef DEBUG
	fprintf(stderr, "DEBUG: %s(%ld, %lu)\n", __func__, offset, size);
#endif
	if(helper->seek(helper->format, offset, SEEK_SET) != offset)
		return -1;
	s = sizeof(*dsii) * size;
	if((dsii = malloc(s)) == NULL)
		return -error_set_code(1, "%s", strerror(errno));
	if(helper->read(helper->format, dsii, s) != s)
		return -1;
	for(i = 0; i < size; i++)
	{
		dsii[i].string_data_off = _htol32(dsii[i].string_data_off);
		offset = dsii[i].string_data_off;
		if(helper->seek(helper->format, offset, SEEK_SET) != offset)
			break;
		if(helper->read(helper->format, &u8, sizeof(u8)) != sizeof(u8))
			break;
#ifdef DEBUG
		fprintf(stderr, "DEBUG: %s() string %lu offset 0x%lx len %u\n",
				__func__, i, offset, u8);
#endif
		helper->set_string(helper->format, i, NULL, offset + 1, u8);
	}
	free(dsii);
	return (i == size) ? 0 : -1;
}