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; }