From 521c54833bbf0395e89e02494485c65a583356e6 Mon Sep 17 00:00:00 2001 From: Ken Martin <ken.martin@kitware.com> Date: Thu, 1 Mar 2007 14:30:42 -0500 Subject: [PATCH] ENH: added a limit to the getline method --- SystemTools.cxx | 21 ++++++++++++++++++++- SystemTools.hxx.in | 3 ++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/SystemTools.cxx b/SystemTools.cxx index 19b9891..d3c3713 100644 --- a/SystemTools.cxx +++ b/SystemTools.cxx @@ -3542,7 +3542,8 @@ kwsys_stl::string SystemTools::MakeCindentifier(const char* s) // if any data were read before the end-of-file was reached. bool SystemTools::GetLineFromStream(kwsys_ios::istream& is, kwsys_stl::string& line, - bool* has_newline /* = 0 */) + bool* has_newline /* = 0 */, + long sizeLimit /* = -1 */) { const int bufferSize = 1024; char buffer[bufferSize]; @@ -3552,9 +3553,12 @@ bool SystemTools::GetLineFromStream(kwsys_ios::istream& is, // Start with an empty line. line = ""; + long leftToRead = sizeLimit; + // If no characters are read from the stream, the end of file has // been reached. Clear the fail bit just before reading. while(!haveNewline && + leftToRead != 0 && (is.clear(is.rdstate() & ~kwsys_ios::ios::failbit), is.getline(buffer, bufferSize), is.gcount() > 0)) { @@ -3575,8 +3579,23 @@ bool SystemTools::GetLineFromStream(kwsys_ios::istream& is, buffer[length-1] = 0; } + // if we read too much then truncate the buffer + if (leftToRead > 0) + { + if (length > leftToRead) + { + buffer[leftToRead-1] = 0; + leftToRead = 0; + } + else + { + leftToRead -= length; + } + } + // Append the data read to the line. line.append(buffer); + sizeLimit -= length; } // Return the results. diff --git a/SystemTools.hxx.in b/SystemTools.hxx.in index cb9a518..9c3ea0e 100644 --- a/SystemTools.hxx.in +++ b/SystemTools.hxx.in @@ -434,7 +434,8 @@ public: */ static bool GetLineFromStream(kwsys_ios::istream& istr, kwsys_stl::string& line, - bool* has_newline=0); + bool* has_newline=0, + long sizeLimit=-1); /** * Get the parent directory of the directory or file -- GitLab