/* #<pydoc> def unregister_custom_data_format(dtid, dfid): """ Unregisters a custom data format @param dtid: data type id @param dfid: data format id @return: Boolean """ pass #</pydoc> */ static bool py_unregister_custom_data_format(int dtid, int dfid) { py_custom_data_format_list_t::POS pos; py_custom_data_format_t *inst = py_df_list.find(dtid, dfid, &pos); // Maybe the user is trying to unregister a C api data format? if ( inst == NULL ) return unregister_custom_data_format(dtid, dfid); bool ok = inst->unregister_df(dtid); // Perhaps it was automatically unregistered because the type was unregistered? if ( !ok ) { // Is this format still registered with IDA? // If not, mark the context for deletion ok = find_custom_data_format(inst->get_name()) < 0; } if ( ok ) { py_df_list.erase(pos); delete inst; } return ok; }
//-------------------------------------------------------------------------- // Terminate PPC debugger plugin static void term_plugin(void) { gdb_deinit(); for (int k = 0; k < custom_format_count; ++k) { if (!unregister_custom_data_format(0, (int)custom_formats[k].ud)) msg("---: %d - Could not unregister custom format: %s - %lld bytes - %d wide\n", (uint32)k, custom_formats[k].name, (uint64)custom_formats[k].value_size, (uint32)custom_formats[k].text_width); else msg("---: %d - Unregistered custom format: %s - %lld bytes - %d wide\n", (uint32)k, custom_formats[k].name, (uint64)custom_formats[k].value_size, (uint32)custom_formats[k].text_width); custom_formats[k].ud = (void*)-1; } }
bool unregister_df(int dtid) { PYW_GIL_CHECK_LOCKED_SCOPE(); // Never registered? if ( dfid < 0 ) return true; if ( !unregister_custom_data_format(dtid, dfid) ) return false; // Release reference of Python object Py_XDECREF(py_self); py_self = NULL; dfid = -1; return true; }