diff --git a/eeschema/class_netlist_object.cpp b/eeschema/class_netlist_object.cpp
index ce3c2bbded..28cda6b3e3 100644
--- a/eeschema/class_netlist_object.cpp
+++ b/eeschema/class_netlist_object.cpp
@@ -81,7 +81,7 @@ void NETLIST_OBJECT::Show( std::ostream& out, int ndx )
out << " \n";
- if( m_Label )
+ if( !m_Label.IsEmpty() )
out << " \n";
if( m_Comp )
diff --git a/eeschema/erc.cpp b/eeschema/erc.cpp
index cffbd49cb0..9efb32e6d2 100644
--- a/eeschema/erc.cpp
+++ b/eeschema/erc.cpp
@@ -174,8 +174,11 @@ static int MinimalReq[PIN_NMAX][PIN_NMAX] =
/** Function TestDuplicateSheetNames( )
* inside a given sheet, one cannot have sheets with duplicate names (file
* names can be duplicated).
+ * @return the error count
+ * @param aCreateMarker: true = create error markers in schematic,
+ * false = calculate error count only
*/
-int TestDuplicateSheetNames()
+int TestDuplicateSheetNames(bool aCreateMarker)
{
int err_count = 0;
EDA_ScreenList ScreenList; // Created the list of screen
@@ -203,17 +206,20 @@ int TestDuplicateSheetNames()
( ( SCH_SHEET* ) item_to_test )-> m_SheetName )
== 0 )
{
- /* Create a new marker type ERC error*/
- SCH_MARKER* Marker = new SCH_MARKER();
- Marker->m_TimeStamp = GetTimeStamp();
- Marker->SetData( ERCE_DUPLICATE_SHEET_NAME,
- ( (SCH_SHEET*) item_to_test )->m_Pos,
- _( "Duplicate Sheet name" ),
- ( (SCH_SHEET*) item_to_test )->m_Pos );
- Marker->SetMarkerType( MARK_ERC );
- Marker->SetErrorLevel( ERR );
- Marker->SetNext( Screen->EEDrawList );
- Screen->EEDrawList = Marker;
+ if( aCreateMarker )
+ {
+ /* Create a new marker type ERC error*/
+ SCH_MARKER* Marker = new SCH_MARKER();
+ Marker->m_TimeStamp = GetTimeStamp();
+ Marker->SetData( ERCE_DUPLICATE_SHEET_NAME,
+ ( (SCH_SHEET*) item_to_test )->m_Pos,
+ _( "Duplicate Sheet name" ),
+ ( (SCH_SHEET*) item_to_test )->m_Pos );
+ Marker->SetMarkerType( MARK_ERC );
+ Marker->SetErrorLevel( ERR );
+ Marker->SetNext( Screen->EEDrawList );
+ Screen->EEDrawList = Marker;
+ }
err_count++;
}
}
@@ -279,9 +285,8 @@ void DIALOG_ERC::TestErc( wxArrayString* aMessagesList )
* inside a given sheet, one cannot have sheets with duplicate names (file
* names can be duplicated).
*/
- int errcnt = TestDuplicateSheetNames();
+ int errcnt = TestDuplicateSheetNames( true );
g_EESchemaVar.NbErrorErc += errcnt;
- g_EESchemaVar.NbWarningErc += errcnt;
m_Parent->BuildNetListBase();
@@ -290,7 +295,6 @@ void DIALOG_ERC::TestErc( wxArrayString* aMessagesList )
for( unsigned ii = 0; ii < g_NetObjectslist.size(); ii++ )
g_NetObjectslist[ii]->m_FlagOfConnection = UNCONNECTED;
-
StartNet = OldItem = 0;
NetNbItems = 0;
MinConn = NOC;
diff --git a/eeschema/netlist_control.cpp b/eeschema/netlist_control.cpp
index 7c47e53bb9..67eb8e1f35 100644
--- a/eeschema/netlist_control.cpp
+++ b/eeschema/netlist_control.cpp
@@ -24,6 +24,8 @@
#include "protos.h"
#include "netlist_control.h"
+//Imported function:
+int TestDuplicateSheetNames(bool aCreateMarker);
// ID for configuration:
#define CUSTOM_NETLIST_TITLE wxT( "CustomNetlistTitle" )
@@ -492,6 +494,13 @@ void WinEDA_NetlistFrame::GenNetlist( wxCommandEvent& event )
return;
}
+ // Test duplicate sheet names:
+ if( TestDuplicateSheetNames(false ) > 0 )
+ {
+ if( !IsOK( this, _( "Error: duplicate sheet names. Continue?" ) ) )
+ return;
+ }
+
/* Cleanup the entire hierarchy */
EDA_ScreenList ScreenList;
for( SCH_SCREEN* screen = ScreenList.GetFirst();
diff --git a/pcbnew/zones_convert_brd_items_to_polygons.cpp b/pcbnew/zones_convert_brd_items_to_polygons.cpp
index e966854346..3c71300d21 100644
--- a/pcbnew/zones_convert_brd_items_to_polygons.cpp
+++ b/pcbnew/zones_convert_brd_items_to_polygons.cpp
@@ -216,11 +216,12 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb )
have_poly_to_substract = false;
D_PAD dummyPad((MODULE*)NULL);
-
+ D_PAD * nextpad;
for( MODULE* module = aPcb->m_Modules; module; module = module->Next() )
{
- for( D_PAD* pad = module->m_Pads; pad != NULL; pad = pad->Next() )
+ for( D_PAD* pad = module->m_Pads; pad != NULL; pad = nextpad )
{
+ nextpad = pad->Next(); // pad pointer can be modified by next code, so calculate the next pad here
if( !pad->IsOnLayer( GetLayer() ) )
{ /* Test fo pads that are on top or bottom only and have a hole.
* There are curious pads but they can be used for some components that are inside the