Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
b065b37a
Commit
b065b37a
authored
Nov 27, 2012
by
Dick Hollenbeck
Browse files
Options
Browse Files
Download
Plain Diff
richio improvements, fix dangling open file
parents
2d1a7e09
9ae4e609
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
180 additions
and
211 deletions
+180
-211
filter_reader.cpp
common/filter_reader.cpp
+32
-5
richio.cpp
common/richio.cpp
+35
-40
dsnlexer.h
include/dsnlexer.h
+3
-1
filter_reader.h
include/filter_reader.h
+4
-15
richio.h
include/richio.h
+29
-11
kicad_plugin.cpp
pcbnew/kicad_plugin.cpp
+2
-18
legacy_plugin.cpp
pcbnew/legacy_plugin.cpp
+58
-87
netlist_reader_firstformat.cpp
pcbnew/netlist_reader_firstformat.cpp
+11
-17
specctra.cpp
pcbnew/specctra.cpp
+6
-17
No files found.
common/filter_reader.cpp
View file @
b065b37a
...
...
@@ -27,14 +27,41 @@
#include <richio.h>
#include <filter_reader.h>
unsigned
FILTER_READER
::
ReadLine
()
throw
(
IO_ERROR
)
FILTER_READER
::
FILTER_READER
(
LINE_READER
&
aReader
)
:
LINE_READER
(
1
),
reader
(
aReader
)
{
unsigned
ret
;
// Not using our own line buffer, will be using aReader's. This changes
// the meaning of this->line to be merely a pointer to aReader's line, which of course
// is not owned here.
delete
[]
line
;
line
=
0
;
}
FILTER_READER
::~
FILTER_READER
()
{
// Our 'line' points to aReader's, and he will delete that buffer.
// Prevent subsequent call to ~LINE_READER() from deleting a buffer we do not own.
line
=
0
;
}
while
(
(
ret
=
reader
.
ReadLine
()
)
!=
0
)
char
*
FILTER_READER
::
ReadLine
()
throw
(
IO_ERROR
)
{
char
*
s
;
while
(
(
s
=
reader
.
ReadLine
()
)
!=
NULL
)
{
if
(
!
strchr
(
"#
\n\r
"
,
reader
[
0
]
)
)
if
(
!
strchr
(
"#
\n\r
"
,
s
[
0
]
)
)
break
;
}
return
ret
;
line
=
reader
.
Line
();
length
=
reader
.
Length
();
return
length
?
line
:
NULL
;
}
common/richio.cpp
View file @
b065b37a
...
...
@@ -64,6 +64,12 @@ LINE_READER::LINE_READER( unsigned aMaxLineLength )
}
LINE_READER
::~
LINE_READER
()
{
delete
[]
line
;
}
void
LINE_READER
::
expandCapacity
(
unsigned
newsize
)
{
// length can equal maxLineLength and nothing breaks, there's room for
...
...
@@ -89,6 +95,27 @@ void LINE_READER::expandCapacity( unsigned newsize )
}
FILE_LINE_READER
::
FILE_LINE_READER
(
const
wxString
&
aFileName
,
unsigned
aStartingLineNumber
,
unsigned
aMaxLineLength
)
throw
(
IO_ERROR
)
:
LINE_READER
(
aMaxLineLength
),
iOwn
(
true
)
{
fp
=
wxFopen
(
aFileName
,
wxT
(
"rt"
)
);
if
(
!
fp
)
{
wxString
msg
=
wxString
::
Format
(
_
(
"Unable to open filename '%s' for reading"
),
aFileName
.
GetData
()
);
THROW_IO_ERROR
(
msg
);
}
setvbuf
(
fp
,
NULL
,
_IOFBF
,
BUFSIZ
*
8
);
source
=
aFileName
;
lineNum
=
aStartingLineNumber
;
}
FILE_LINE_READER
::
FILE_LINE_READER
(
FILE
*
aFile
,
const
wxString
&
aFileName
,
bool
doOwn
,
unsigned
aStartingLineNumber
,
...
...
@@ -97,7 +124,7 @@ FILE_LINE_READER::FILE_LINE_READER( FILE* aFile, const wxString& aFileName,
iOwn
(
doOwn
),
fp
(
aFile
)
{
if
(
doOwn
)
if
(
doOwn
&&
ftell
(
aFile
)
==
0L
)
{
setvbuf
(
fp
,
NULL
,
_IOFBF
,
BUFSIZ
*
8
);
}
...
...
@@ -113,40 +140,8 @@ FILE_LINE_READER::~FILE_LINE_READER()
fclose
(
fp
);
}
#if 0
// The strlen() will trip on embedded nuls which can come in via bad data files.
// Try an alternate technique below.
unsigned FILE_LINE_READER::ReadLine() throw( IO_ERROR )
{
length = 0;
line[0] = 0;
// fgets always puts a terminating nul at end of its read.
while( fgets( line + length, capacity - length, fp ) )
{
length += strlen( line + length );
if( length >= maxLineLength )
THROW_IO_ERROR( _("Line length exceeded") );
// a normal line breaks here, once through while loop
if( length+1 < capacity || line[length-1] == '\n' )
break;
expandCapacity( capacity * 2 );
}
// lineNum is incremented even if there was no line read, because this
// leads to better error reporting when we hit an end of file.
++lineNum;
return length;
}
#else
unsigned
FILE_LINE_READER
::
ReadLine
()
throw
(
IO_ERROR
)
char
*
FILE_LINE_READER
::
ReadLine
()
throw
(
IO_ERROR
)
{
length
=
0
;
...
...
@@ -175,9 +170,8 @@ unsigned FILE_LINE_READER::ReadLine() throw( IO_ERROR )
// leads to better error reporting when we hit an end of file.
++
lineNum
;
return
length
;
return
length
?
line
:
NULL
;
}
#endif
STRING_LINE_READER
::
STRING_LINE_READER
(
const
std
::
string
&
aString
,
const
wxString
&
aSource
)
:
...
...
@@ -203,7 +197,8 @@ STRING_LINE_READER::STRING_LINE_READER( const STRING_LINE_READER& aStartingPoint
lineNum
=
aStartingPoint
.
lineNum
;
}
unsigned
STRING_LINE_READER
::
ReadLine
()
throw
(
IO_ERROR
)
char
*
STRING_LINE_READER
::
ReadLine
()
throw
(
IO_ERROR
)
{
size_t
nlOffset
=
lines
.
find
(
'\n'
,
ndx
);
...
...
@@ -231,7 +226,7 @@ unsigned STRING_LINE_READER::ReadLine() throw( IO_ERROR )
line
[
length
]
=
0
;
return
length
;
return
length
?
line
:
NULL
;
}
...
...
@@ -242,7 +237,7 @@ INPUTSTREAM_LINE_READER::INPUTSTREAM_LINE_READER( wxInputStream* aStream ) :
}
unsigned
INPUTSTREAM_LINE_READER
::
ReadLine
()
throw
(
IO_ERROR
)
char
*
INPUTSTREAM_LINE_READER
::
ReadLine
()
throw
(
IO_ERROR
)
{
length
=
0
;
...
...
@@ -272,7 +267,7 @@ unsigned INPUTSTREAM_LINE_READER::ReadLine() throw( IO_ERROR )
// leads to better error reporting when we hit an end of file.
++
lineNum
;
return
length
;
return
length
?
line
:
NULL
;
}
...
...
include/dsnlexer.h
View file @
b065b37a
...
...
@@ -117,7 +117,9 @@ protected:
{
if
(
reader
)
{
unsigned
len
=
reader
->
ReadLine
();
reader
->
ReadLine
();
unsigned
len
=
reader
->
Length
();
// start may have changed in ReadLine(), which can resize and
// relocate reader's line buffer.
...
...
include/filter_reader.h
View file @
b065b37a
...
...
@@ -45,32 +45,21 @@ public:
* Constructor ( LINE_READER& )
* does not take ownership over @a aReader, so will not destroy it.
*/
FILTER_READER
(
LINE_READER
&
aReader
)
:
reader
(
aReader
)
{
}
FILTER_READER
(
LINE_READER
&
aReader
);
~
FILTER_READER
();
unsigned
ReadLine
()
throw
(
IO_ERROR
);
char
*
ReadLine
()
throw
(
IO_ERROR
);
const
wxString
&
GetSource
()
const
{
return
reader
.
GetSource
();
}
char
*
Line
()
const
{
return
reader
.
Line
();
}
unsigned
LineNumber
()
const
{
return
reader
.
LineNumber
();
}
unsigned
Length
()
const
{
return
reader
.
Length
();
}
};
#endif // FILTER_READER_H_
include/richio.h
View file @
b065b37a
...
...
@@ -227,20 +227,17 @@ public:
*/
LINE_READER
(
unsigned
aMaxLineLength
=
LINE_READER_LINE_DEFAULT_MAX
);
virtual
~
LINE_READER
()
{
delete
[]
line
;
}
virtual
~
LINE_READER
();
/**
* Function ReadLine
* reads a line of text into the buffer and increments the line number
* counter. If the line is larger than aMaxLineLength passed to the
* constructor, then an exception is thrown. The line is nul terminated.
* @return
unsigned - The number of bytes read, 0 at end of file
.
* @return
char* - The beginning of the read line, or NULL if EOF
.
* @throw IO_ERROR when a line is too long.
*/
virtual
unsigned
ReadLine
()
throw
(
IO_ERROR
)
=
0
;
virtual
char
*
ReadLine
()
throw
(
IO_ERROR
)
=
0
;
/**
* Function GetSource
...
...
@@ -258,7 +255,7 @@ public:
* Function Line
* returns a pointer to the last line that was read in.
*/
virtual
char
*
Line
()
const
char
*
Line
()
const
{
return
line
;
}
...
...
@@ -287,7 +284,7 @@ public:
* Function Length
* returns the number of bytes in the last line read from this LINE_READER.
*/
virtual
unsigned
Length
()
const
unsigned
Length
()
const
{
return
length
;
}
...
...
@@ -308,6 +305,27 @@ protected:
public
:
/**
* Constructor FILE_LINE_READER
* takes @a aFileName and the size of the desired line buffer and opens
* the file and assumes the obligation to close it.
*
* @param aFileName is the name of the file to open and to use for error reporting purposes.
*
* @param aStartingLineNumber is the initial line number to report on error, and is
* accessible here for the case where multiple DSNLEXERs are reading from the
* same file in sequence, all from the same open file (with @a doOwn = false).
* Internally it is incremented by one after each ReadLine(), so the first
* reported line number will always be one greater than what is provided here.
*
* @param aMaxLineLength is the number of bytes to use in the line buffer.
*
* @throw IO_ERROR if @a aFileName cannot be opened.
*/
FILE_LINE_READER
(
const
wxString
&
aFileName
,
unsigned
aStartingLineNumber
=
0
,
unsigned
aMaxLineLength
=
LINE_READER_LINE_DEFAULT_MAX
)
throw
(
IO_ERROR
);
/**
* Constructor FILE_LINE_READER
* takes an open FILE and the size of the desired line buffer and takes
...
...
@@ -333,7 +351,7 @@ public:
*/
~
FILE_LINE_READER
();
unsigned
ReadLine
()
throw
(
IO_ERROR
);
// see LINE_READER::ReadLine() description
char
*
ReadLine
()
throw
(
IO_ERROR
);
// see LINE_READER::ReadLine() description
/**
* Function Rewind
...
...
@@ -380,7 +398,7 @@ public:
*/
STRING_LINE_READER
(
const
STRING_LINE_READER
&
aStartingPoint
);
unsigned
ReadLine
()
throw
(
IO_ERROR
);
// see LINE_READER::ReadLine() description
char
*
ReadLine
()
throw
(
IO_ERROR
);
// see LINE_READER::ReadLine() description
};
...
...
@@ -402,7 +420,7 @@ public:
*/
INPUTSTREAM_LINE_READER
(
wxInputStream
*
aStream
);
unsigned
ReadLine
()
throw
(
IO_ERROR
);
// see LINE_READER::ReadLine() description
char
*
ReadLine
()
throw
(
IO_ERROR
);
// see LINE_READER::ReadLine() description
};
...
...
pcbnew/kicad_plugin.cpp
View file @
b065b37a
...
...
@@ -222,16 +222,8 @@ void FP_CACHE::Load()
do
{
FILE
*
fp
=
wxFopen
(
fpFileName
,
wxT
(
"r"
)
);
if
(
!
fp
)
{
THROW_IO_ERROR
(
wxString
::
Format
(
_
(
"cannot open footprint library file '%s'"
),
fpFileName
.
GetData
()
)
);
}
// reader now owns fp, will close on exception or return
FILE_LINE_READER
reader
(
fp
,
fp
FileName
);
FILE_LINE_READER
reader
(
fpFileName
);
m_owner
->
m_parser
->
SetLineReader
(
&
reader
);
...
...
@@ -1551,15 +1543,7 @@ PCB_IO::~PCB_IO()
BOARD
*
PCB_IO
::
Load
(
const
wxString
&
aFileName
,
BOARD
*
aAppendToMe
,
PROPERTIES
*
aProperties
)
{
wxFFile
file
(
aFileName
,
wxT
(
"r"
)
);
if
(
!
file
.
IsOpened
()
)
{
wxString
msg
=
wxString
::
Format
(
_
(
"Unable to read file
\"
%s
\"
"
),
GetChars
(
aFileName
)
);
THROW_IO_ERROR
(
msg
);
}
FILE_LINE_READER
reader
(
file
.
fp
(),
aFileName
,
false
/* wxFFile owns fp */
);
FILE_LINE_READER
reader
(
aFileName
);
m_parser
->
SetLineReader
(
&
reader
);
m_parser
->
SetBoard
(
aAppendToMe
);
...
...
pcbnew/legacy_plugin.cpp
View file @
b065b37a
...
...
@@ -127,9 +127,9 @@ static bool inline isSpace( int c ) { return strchr( delims, c ) != 0; }
/// The function and macro which follow comprise a shim which can be a
/// monitor on lines of text read in from the input file.
/// And it can be used as a trap.
static
inline
unsigned
ReadLine
(
LINE_READER
*
rdr
,
const
char
*
caller
)
static
inline
char
*
ReadLine
(
LINE_READER
*
rdr
,
const
char
*
caller
)
{
unsigned
ret
=
rdr
->
ReadLine
();
char
*
ret
=
rdr
->
ReadLine
();
const
char
*
line
=
rdr
->
Line
();
printf
(
"%-6u %s: %s"
,
rdr
->
LineNumber
(),
caller
,
line
);
...
...
@@ -238,15 +238,7 @@ BOARD* LEGACY_PLUGIN::Load( const wxString& aFileName, BOARD* aAppendToMe, PROPE
// delete on exception, iff I own m_board, according to aAppendToMe
auto_ptr
<
BOARD
>
deleter
(
aAppendToMe
?
NULL
:
m_board
);
FILE
*
fp
=
wxFopen
(
aFileName
,
wxT
(
"r"
)
);
if
(
!
fp
)
{
m_error
.
Printf
(
_
(
"Unable to open file '%s'"
),
aFileName
.
GetData
()
);
THROW_IO_ERROR
(
m_error
);
}
// reader now owns fp, will close on exception or return
FILE_LINE_READER
reader
(
fp
,
aFileName
);
FILE_LINE_READER
reader
(
aFileName
);
m_reader
=
&
reader
;
// member function accessibility
...
...
@@ -268,11 +260,10 @@ void LEGACY_PLUGIN::loadAllSections( bool doAppend )
// $SETUP section is next
// Then follows $EQUIPOT and all the rest
char
*
line
;
while
(
READLINE
(
m_reader
)
)
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
char
*
line
=
m_reader
->
Line
();
// put the more frequent ones at the top, but realize TRACKs are loaded as a group
if
(
TESTLINE
(
"$MODULE"
)
)
...
...
@@ -344,10 +335,9 @@ void LEGACY_PLUGIN::loadAllSections( bool doAppend )
}
else
{
while
(
READLINE
(
m_reader
)
)
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
line
=
m_reader
->
Line
();
// gobble until $EndSetup
// gobble until $EndSetup
if
(
TESTLINE
(
"$EndSETUP"
)
)
break
;
}
...
...
@@ -395,9 +385,10 @@ void LEGACY_PLUGIN::checkVersion()
void
LEGACY_PLUGIN
::
loadGENERAL
()
{
while
(
READLINE
(
m_reader
)
)
char
*
line
;
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
char
*
line
=
m_reader
->
Line
();
const
char
*
data
;
if
(
TESTLINE
(
"Units"
)
)
...
...
@@ -516,11 +507,10 @@ void LEGACY_PLUGIN::loadSHEET()
{
char
buf
[
260
];
TITLE_BLOCK
tb
;
char
*
line
;
while
(
READLINE
(
m_reader
)
)
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
char
*
line
=
m_reader
->
Line
();
if
(
TESTLINE
(
"Sheet"
)
)
{
// e.g. "Sheet A3 16535 11700"
...
...
@@ -631,11 +621,11 @@ void LEGACY_PLUGIN::loadSETUP()
NETCLASS
*
netclass_default
=
m_board
->
m_NetClasses
.
GetDefault
();
BOARD_DESIGN_SETTINGS
bds
=
m_board
->
GetDesignSettings
();
ZONE_SETTINGS
zs
=
m_board
->
GetZoneSettings
();
char
*
line
;
while
(
READLINE
(
m_reader
)
)
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
const
char
*
data
;
char
*
line
=
m_reader
->
Line
();
if
(
TESTLINE
(
"PcbPlotParams"
)
)
{
...
...
@@ -929,11 +919,10 @@ void LEGACY_PLUGIN::loadSETUP()
MODULE
*
LEGACY_PLUGIN
::
LoadMODULE
()
{
auto_ptr
<
MODULE
>
module
(
new
MODULE
(
m_board
)
);
char
*
line
;
while
(
READLINE
(
m_reader
)
)
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
char
*
line
=
m_reader
->
Line
();
const
char
*
data
;
// most frequently encountered ones at the top
...
...
@@ -1139,11 +1128,11 @@ MODULE* LEGACY_PLUGIN::LoadMODULE()
void
LEGACY_PLUGIN
::
loadPAD
(
MODULE
*
aModule
)
{
auto_ptr
<
D_PAD
>
pad
(
new
D_PAD
(
aModule
)
);
char
*
line
;
while
(
READLINE
(
m_reader
)
)
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
const
char
*
data
;
char
*
line
=
m_reader
->
Line
();
if
(
TESTLINE
(
"Sh"
)
)
// (Sh)ape and padname
{
...
...
@@ -1450,13 +1439,11 @@ void LEGACY_PLUGIN::loadMODULE_EDGE( MODULE* aModule )
for
(
int
ii
=
0
;
ii
<
ptCount
;
++
ii
)
{
if
(
!
READLINE
(
m_reader
)
)
if
(
(
line
=
READLINE
(
m_reader
)
)
==
NULL
)
{
THROW_IO_ERROR
(
"S_POLGON point count mismatch."
);
}
line
=
m_reader
->
Line
();
// e.g. "Dl 23 44\n"
if
(
!
TESTLINE
(
"Dl"
)
)
...
...
@@ -1625,10 +1612,9 @@ void LEGACY_PLUGIN::load3D( MODULE* aModule )
t3D
=
n3D
;
}
while
(
READLINE
(
m_reader
)
)
char
*
line
;
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
char
*
line
=
m_reader
->
Line
();
if
(
TESTLINE
(
"Na"
)
)
// Shape File Name
{
char
buf
[
512
];
...
...
@@ -1678,11 +1664,11 @@ void LEGACY_PLUGIN::loadPCB_LINE()
*/
auto_ptr
<
DRAWSEGMENT
>
dseg
(
new
DRAWSEGMENT
(
m_board
)
);
char
*
line
;
while
(
READLINE
(
m_reader
)
)
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
const
char
*
data
;
char
*
line
=
m_reader
->
Line
();
if
(
TESTLINE
(
"Po"
)
)
{
...
...
@@ -1784,11 +1770,11 @@ void LEGACY_PLUGIN::loadNETINFO_ITEM()
char
buf
[
1024
];
NETINFO_ITEM
*
net
=
new
NETINFO_ITEM
(
m_board
);
char
*
line
;
while
(
READLINE
(
m_reader
)
)
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
const
char
*
data
;
char
*
line
=
m_reader
->
Line
();
if
(
TESTLINE
(
"Na"
)
)
{
...
...
@@ -1845,10 +1831,11 @@ void LEGACY_PLUGIN::loadPCB_TEXT()
TEXTE_PCB
*
pcbtxt
=
new
TEXTE_PCB
(
m_board
);
m_board
->
Add
(
pcbtxt
,
ADD_APPEND
);
while
(
READLINE
(
m_reader
)
)
char
*
line
;
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
const
char
*
data
;
char
*
line
=
m_reader
->
Line
();
if
(
TESTLINE
(
"Te"
)
)
// Text line (or first line for multi line texts)
{
...
...
@@ -1947,7 +1934,9 @@ void LEGACY_PLUGIN::loadPCB_TEXT()
void
LEGACY_PLUGIN
::
loadTrackList
(
int
aStructType
)
{
while
(
READLINE
(
m_reader
)
)
char
*
line
;
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
// read two lines per loop iteration, each loop is one TRACK or VIA
// example first line:
...
...
@@ -1955,7 +1944,6 @@ void LEGACY_PLUGIN::loadTrackList( int aStructType )
// e.g. "Po 3 21086 17586 21086 17586 180 -1" for a via (uses sames start and end)
const
char
*
data
;
char
*
line
=
m_reader
->
Line
();
if
(
line
[
0
]
==
'$'
)
// $EndTRACK
return
;
// preferred exit
...
...
@@ -2065,6 +2053,7 @@ void LEGACY_PLUGIN::loadNETCLASS()
{
char
buf
[
1024
];
wxString
netname
;
char
*
line
;
// create an empty NETCLASS without a name, but do not add it to the BOARD
// yet since that would bypass duplicate netclass name checking within the BOARD.
...
...
@@ -2072,10 +2061,8 @@ void LEGACY_PLUGIN::loadNETCLASS()
// just before returning.
auto_ptr
<
NETCLASS
>
nc
(
new
NETCLASS
(
m_board
,
wxEmptyString
)
);
while
(
READLINE
(
m_reader
)
)
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
char
*
line
=
m_reader
->
Line
();
if
(
TESTLINE
(
"AddNet"
)
)
// most frequent type of line
{
// e.g. "AddNet "V3.3D"\n"
...
...
@@ -2164,11 +2151,11 @@ void LEGACY_PLUGIN::loadZONE_CONTAINER()
CPolyLine
::
HATCH_STYLE
outline_hatch
=
CPolyLine
::
NO_HATCH
;
bool
sawCorner
=
false
;
char
buf
[
1024
];
char
*
line
;
while
(
READLINE
(
m_reader
)
)
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
const
char
*
data
;
char
*
line
=
m_reader
->
Line
();
if
(
TESTLINE
(
"ZCorner"
)
)
// new corner found
{
...
...
@@ -2349,10 +2336,8 @@ void LEGACY_PLUGIN::loadZONE_CONTAINER()
// Read the PolysList (polygons used for fill areas in the zone)
std
::
vector
<
CPolyPt
>
polysList
;
while
(
READLINE
(
m_reader
)
)
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
line
=
m_reader
->
Line
();
if
(
TESTLINE
(
"$endPOLYSCORNERS"
)
)
break
;
...
...
@@ -2370,10 +2355,8 @@ void LEGACY_PLUGIN::loadZONE_CONTAINER()
else
if
(
TESTLINE
(
"$FILLSEGMENTS"
)
)
{
while
(
READLINE
(
m_reader
)
)
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
line
=
m_reader
->
Line
();
if
(
TESTLINE
(
"$endFILLSEGMENTS"
)
)
break
;
...
...
@@ -2422,11 +2405,11 @@ void LEGACY_PLUGIN::loadZONE_CONTAINER()
void
LEGACY_PLUGIN
::
loadDIMENSION
()
{
auto_ptr
<
DIMENSION
>
dim
(
new
DIMENSION
(
m_board
)
);
char
*
line
;
while
(
READLINE
(
m_reader
)
)
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
const
char
*
data
;
char
*
line
=
m_reader
->
Line
();
if
(
TESTLINE
(
"$endCOTATION"
)
)
{
...
...
@@ -2617,10 +2600,11 @@ void LEGACY_PLUGIN::loadDIMENSION()
void
LEGACY_PLUGIN
::
loadPCB_TARGET
()
{
while
(
READLINE
(
m_reader
)
)
char
*
line
;
while
(
(
line
=
READLINE
(
m_reader
)
)
!=
NULL
)
{
const
char
*
data
;
char
*
line
=
m_reader
->
Line
();
if
(
TESTLINE
(
"$EndPCB_TARGET"
)
||
TESTLINE
(
"$EndMIREPCB"
)
)
{
...
...
@@ -3928,15 +3912,7 @@ wxDateTime FPL_CACHE::GetLibModificationTime()
void
FPL_CACHE
::
Load
()
{
FILE
*
fp
=
wxFopen
(
m_lib_name
,
wxT
(
"r"
)
);
if
(
!
fp
)
{
THROW_IO_ERROR
(
wxString
::
Format
(
_
(
"Unable to open legacy library file '%s'"
),
m_lib_name
.
GetData
()
)
);
}
// reader now owns fp, will close on exception or return
FILE_LINE_READER
reader
(
fp
,
m_lib_name
);
FILE_LINE_READER
reader
(
m_lib_name
);
ReadAndVerifyHeader
(
&
reader
);
SkipIndex
(
&
reader
);
...
...
@@ -3951,18 +3927,16 @@ void FPL_CACHE::Load()
void
FPL_CACHE
::
ReadAndVerifyHeader
(
LINE_READER
*
aReader
)
{
char
*
line
;
char
*
line
=
aReader
->
ReadLine
()
;
if
(
!
aReader
->
ReadLine
()
)
if
(
!
line
)
goto
L_bad_library
;
line
=
aReader
->
Line
();
if
(
!
TESTLINE
(
"PCBNEW-LibModule-V1"
)
)
goto
L_bad_library
;
while
(
aReader
->
ReadLine
()
)
while
(
(
line
=
aReader
->
ReadLine
()
)
!=
NULL
)
{
line
=
aReader
->
Line
();
if
(
TESTLINE
(
"Units"
)
)
{
const
char
*
units
=
strtok
(
line
+
SZ
(
"Units"
),
delims
);
...
...
@@ -3993,19 +3967,16 @@ void FPL_CACHE::SkipIndex( LINE_READER* aReader )
// So we must read the next line after $EndINDEX tag,
// to see if this is not a new $INDEX tag.
bool
exit
=
false
;
char
*
line
=
aReader
->
Line
();
do
{
char
*
line
=
aReader
->
Line
();
if
(
TESTLINE
(
"$INDEX"
)
)
{
exit
=
false
;
while
(
aReader
->
ReadLine
()
)
while
(
(
line
=
aReader
->
ReadLine
()
)
!=
NULL
)
{
line
=
aReader
->
Line
();
if
(
TESTLINE
(
"$EndINDEX"
)
)
{
exit
=
true
;
...
...
@@ -4015,7 +3986,7 @@ void FPL_CACHE::SkipIndex( LINE_READER* aReader )
}
else
if
(
exit
)
break
;
}
while
(
aReader
->
ReadLine
()
);
}
while
(
(
line
=
aReader
->
ReadLine
()
)
!=
NULL
);
}
...
...
@@ -4023,11 +3994,11 @@ void FPL_CACHE::LoadModules( LINE_READER* aReader )
{
m_owner
->
SetReader
(
aReader
);
char
*
line
=
aReader
->
Line
();
do
{
// test first for the $MODULE, even before reading because of INDEX bug.
char
*
line
=
aReader
->
Line
();
if
(
TESTLINE
(
"$MODULE"
)
)
{
MODULE
*
m
=
m_owner
->
LoadMODULE
();
...
...
@@ -4089,7 +4060,7 @@ void FPL_CACHE::LoadModules( LINE_READER* aReader )
}
}
}
while
(
aReader
->
ReadLine
()
);
}
while
(
(
line
=
aReader
->
ReadLine
()
)
!=
NULL
);
}
...
...
pcbnew/netlist_reader_firstformat.cpp
View file @
b065b37a
...
...
@@ -80,15 +80,10 @@ bool NETLIST_READER::ReadOldFmtdNetList( FILE* aFile )
/* First, read the netlist: Build the list of footprints found in netlist
*/
#ifndef __WXMAC__
// netlineReader dtor will close aFile
FILE_LINE_READER
netlineReader
(
aFile
,
m_netlistFullName
);
#else
//Seems that the setvbuf call destroys the FILE buffer (already allocated)
//And looses the first 4096 bytes so we set doOwn => false
FILE_LINE_READER
netlineReader
(
aFile
,
m_netlistFullName
,
false
);
#endif
COMPONENT_INFO
*
curComponent
=
NULL
;
COMPONENT_INFO
*
curComponent
=
NULL
;
while
(
netlineReader
.
ReadLine
()
)
{
char
*
line
=
StrPurge
(
netlineReader
.
Line
()
);
...
...
@@ -372,23 +367,22 @@ bool NETLIST_READER::ReadOldFmtFootprintFilterList( FILE_LINE_READER& aNetlistR
{
wxString
cmpRef
;
COMPONENT_INFO
*
cmp_info
=
NULL
;
char
*
line
;
while
(
aNetlistReader
.
ReadLine
()
)
while
(
(
line
=
aNetlistReader
.
ReadLine
()
)
!=
NULL
)
{
const
char
*
Line
=
aNetlistReader
.
Line
();
if
(
strnicmp
(
Line
,
"$endlist"
,
8
)
==
0
)
// end of list for the current component
if
(
strnicmp
(
line
,
"$endlist"
,
8
)
==
0
)
// end of list for the current component
{
cmp_info
=
NULL
;
continue
;
}
if
(
strnicmp
(
L
ine
,
"$endfootprintlist"
,
4
)
==
0
)
if
(
strnicmp
(
l
ine
,
"$endfootprintlist"
,
4
)
==
0
)
// End of this section
return
0
;
if
(
strnicmp
(
L
ine
,
"$component"
,
10
)
==
0
)
// New component reference found
if
(
strnicmp
(
l
ine
,
"$component"
,
10
)
==
0
)
// New component reference found
{
cmpRef
=
FROM_UTF8
(
L
ine
+
11
);
cmpRef
=
FROM_UTF8
(
l
ine
+
11
);
cmpRef
.
Trim
(
true
);
cmpRef
.
Trim
(
false
);
...
...
@@ -405,7 +399,7 @@ bool NETLIST_READER::ReadOldFmtFootprintFilterList( FILE_LINE_READER& aNetlistR
else
if
(
cmp_info
)
{
// Add new filter to list
wxString
fp
=
FROM_UTF8
(
L
ine
+
1
);
wxString
fp
=
FROM_UTF8
(
l
ine
+
1
);
fp
.
Trim
(
false
);
fp
.
Trim
(
true
);
cmp_info
->
m_FootprintFilter
.
Add
(
fp
);
...
...
pcbnew/specctra.cpp
View file @
b065b37a
...
...
@@ -230,14 +230,9 @@ void SPECCTRA_DB::readTIME( time_t* time_stamp ) throw( IO_ERROR )
void
SPECCTRA_DB
::
LoadPCB
(
const
wxString
&
filename
)
throw
(
IO_ERROR
)
{
FILE
*
fp
=
wxFopen
(
filename
,
wxT
(
"r"
)
);
FILE
_LINE_READER
reader
(
filename
);
if
(
!
fp
)
{
ThrowIOError
(
_
(
"Unable to open file
\"
%s
\"
"
),
GetChars
(
filename
)
);
}
PushReader
(
new
FILE_LINE_READER
(
fp
,
filename
)
);
PushReader
(
&
reader
);
if
(
NextTok
()
!=
T_LEFT
)
Expecting
(
T_LEFT
);
...
...
@@ -248,21 +243,15 @@ void SPECCTRA_DB::LoadPCB( const wxString& filename ) throw( IO_ERROR )
SetPCB
(
new
PCB
()
);
doPCB
(
pcb
);
delete
PopReader
();
// close fp
PopReader
();
}
void
SPECCTRA_DB
::
LoadSESSION
(
const
wxString
&
filename
)
throw
(
IO_ERROR
)
{
FILE
*
fp
=
wxFopen
(
filename
,
wxT
(
"r"
)
);
if
(
!
fp
)
{
ThrowIOError
(
_
(
"Unable to open file
\"
%s
\"
"
),
GetChars
(
filename
)
);
}
FILE_LINE_READER
reader
(
filename
);
PushReader
(
new
FILE_LINE_READER
(
fp
,
filename
)
);
PushReader
(
&
reader
);
if
(
NextTok
()
!=
T_LEFT
)
Expecting
(
T_LEFT
);
...
...
@@ -274,7 +263,7 @@ void SPECCTRA_DB::LoadSESSION( const wxString& filename ) throw( IO_ERROR )
doSESSION
(
session
);
delete
PopReader
();
// close fp
PopReader
();
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment