be more paranoid about cleaning up
This commit is contained in:
@ -86,7 +86,10 @@ TextFileReader::TextFileReader(FILE *fp, std::string filetype) :
|
|||||||
|
|
||||||
TextFileReader::~TextFileReader()
|
TextFileReader::~TextFileReader()
|
||||||
{
|
{
|
||||||
if (closefp) fclose(fp);
|
if (closefp) {
|
||||||
|
if (fp) fclose(fp);
|
||||||
|
fp = nullptr;
|
||||||
|
}
|
||||||
delete[] line;
|
delete[] line;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,6 +100,10 @@ void TextFileReader::set_bufsize(int newsize)
|
|||||||
if (newsize < 100) {
|
if (newsize < 100) {
|
||||||
delete[] line;
|
delete[] line;
|
||||||
line = nullptr;
|
line = nullptr;
|
||||||
|
if (closefp) {
|
||||||
|
fclose(fp);
|
||||||
|
fp = nullptr;
|
||||||
|
}
|
||||||
throw FileReaderException(
|
throw FileReaderException(
|
||||||
fmt::format("line buffer size {} for {} file too small, must be > 100", newsize, filetype));
|
fmt::format("line buffer size {} for {} file too small, must be > 100", newsize, filetype));
|
||||||
}
|
}
|
||||||
@ -116,11 +123,16 @@ void TextFileReader::rewind()
|
|||||||
|
|
||||||
void TextFileReader::skip_line()
|
void TextFileReader::skip_line()
|
||||||
{
|
{
|
||||||
|
if (!line) return;
|
||||||
char *ptr = fgets(line, bufsize, fp);
|
char *ptr = fgets(line, bufsize, fp);
|
||||||
if (ptr == nullptr) {
|
if (ptr == nullptr) {
|
||||||
// EOF
|
// EOF
|
||||||
delete[] line;
|
delete[] line;
|
||||||
line = nullptr;
|
line = nullptr;
|
||||||
|
if (closefp) {
|
||||||
|
fclose(fp);
|
||||||
|
fp = nullptr;
|
||||||
|
}
|
||||||
throw EOFException(fmt::format("Missing line in {} file!", filetype));
|
throw EOFException(fmt::format("Missing line in {} file!", filetype));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -145,6 +157,7 @@ char *TextFileReader::next_line(int nparams)
|
|||||||
int n = 0;
|
int n = 0;
|
||||||
int nwords = 0;
|
int nwords = 0;
|
||||||
|
|
||||||
|
if (!line) return nullptr;
|
||||||
char *ptr = fgets(line, bufsize, fp);
|
char *ptr = fgets(line, bufsize, fp);
|
||||||
|
|
||||||
if (ptr == nullptr) {
|
if (ptr == nullptr) {
|
||||||
|
|||||||
Reference in New Issue
Block a user