static int _decode_map_method_id(AsmFormatPlugin * format, off_t offset, size_t size) { AsmFormatPluginHelper * helper = format->helper; Dex * dex = format; ssize_t s; size_t i; AsmString * string; char const * name; #ifdef DEBUG fprintf(stderr, "DEBUG: %s(%ld, %lu)\n", __func__, offset, size); #endif if(dex->dmii != NULL) return 0; /* already parsed */ if(helper->seek(helper->format, offset, SEEK_SET) != offset) return -1; s = sizeof(*dex->dmii) * size; if((dex->dmii = malloc(s)) == NULL) return -error_set_code(1, "%s", strerror(errno)); if(helper->read(helper->format, dex->dmii, s) != s) return -1; for(i = 0; i < size; i++) { dex->dmii[i].class_idx = _htol16(dex->dmii[i].class_idx); dex->dmii[i].proto_idx = _htol16(dex->dmii[i].proto_idx); dex->dmii[i].name_idx = _htol32(dex->dmii[i].name_idx); if((string = helper->get_string_by_id(helper->format, dex->dmii[i].name_idx)) != NULL) name = string->name; else /* XXX report error? */ name = NULL; helper->set_function(helper->format, i, name, -1, -1); } dex->dmii_cnt = size; return 0; }