diff --git a/src/Autopilot/autopilot.cxx b/src/Autopilot/autopilot.cxx index d37c38d7d..809001d61 100644 --- a/src/Autopilot/autopilot.cxx +++ b/src/Autopilot/autopilot.cxx @@ -93,11 +93,16 @@ void Autopilot::add_component( Component * component ) { if( component == NULL ) return; + // check for duplicate name std::string name = component->get_name(); - if( get_subsystem( name.c_str() ) != NULL ) { - SG_LOG( SG_ALL, SG_ALERT, "Duplicate autopilot component " << name << " ignored" ); - return; + for( unsigned i = 0; get_subsystem( name.c_str() ) != NULL; i++ ) { + ostringstream buf; + buf << name << "_" << i; + name = buf.str(); } + if( name != component->get_name() ) + SG_LOG( SG_ALL, SG_ALERT, "Duplicate autopilot component " << component->get_name() << ", renamed to " << name ); + set_subsystem( name.c_str(), component ); } diff --git a/src/Autopilot/autopilotgroup.cxx b/src/Autopilot/autopilotgroup.cxx index be1572a7a..81b4d8101 100644 --- a/src/Autopilot/autopilotgroup.cxx +++ b/src/Autopilot/autopilotgroup.cxx @@ -177,6 +177,18 @@ void FGXMLAutopilotGroup::init() apName = buf.str(); } + { + // check for duplicate names + string name = apName; + for( unsigned i = 0; get_subsystem( apName.c_str() ) != NULL; i++ ) { + ostringstream buf; + buf << apName << "_" << i; + apName = buf.str(); + } + if( apName != name ) + SG_LOG( SG_ALL, SG_ALERT, "Duplicate autopilot component " << name << ", renamed to " << apName ); + } + if( get_subsystem( apName.c_str() ) != NULL ) { SG_LOG( SG_ALL, SG_ALERT, "Duplicate autopilot configuration name " << apName << " ignored" ); continue;