void output_moved_methods_map(const char* path, DexClassesVector& dexen, ConfigFiles& cfg) { // print out moved methods map if (cfg.save_move_map() && strcmp(path, "")) { FILE* fd = fopen(path, "w"); if (fd == nullptr) { perror("Error opening method move file"); return; } auto move_map = cfg.get_moved_methods_map(); std::string dummy = "dummy"; for (const auto& it : *move_map) { MethodTuple mt = it.first; auto cls_name = std::get<0>(mt); auto meth_name = std::get<1>(mt); auto src_file = std::get<2>(mt); auto ren_to_cls_name = it.second->get_type()->get_name()->c_str(); const char* src_string; if (src_file != nullptr) { src_string = src_file->c_str(); } else { src_string = dummy.c_str(); } fprintf(fd, "%s %s (%s) -> %s \n", cls_name->c_str(), meth_name->c_str(), src_string, ren_to_cls_name); } fclose(fd); } else { TRACE(MAIN, 1, "No method move map data structure!\n"); } }