be more paranoid about cleaning up

This commit is contained in:
Axel Kohlmeyer
2024-08-20 04:10:15 -04:00
parent 80ea7ac120
commit 2b485a3f62

View File

@ -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) {