diff options
-rw-r--r-- | Source/cmFileCommand.cxx | 28 | ||||
-rw-r--r-- | Source/cmFileCommand.h | 2 |
2 files changed, 26 insertions, 4 deletions
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx index d5d1eb2..a97802c 100644 --- a/Source/cmFileCommand.cxx +++ b/Source/cmFileCommand.cxx @@ -190,9 +190,10 @@ bool cmFileCommand::HandleWriteCommand(std::vector<std::string> const& args, //---------------------------------------------------------------------------- bool cmFileCommand::HandleReadCommand(std::vector<std::string> const& args) { - if ( args.size() != 3 ) + if ( args.size() < 3 ) { - this->SetError("READ must be called with two additional arguments"); + this->SetError("READ must be called with at least two additional " + "arguments"); return false; } @@ -214,11 +215,32 @@ bool cmFileCommand::HandleReadCommand(std::vector<std::string> const& args) return false; } + // if there a limit? + long sizeLimit = -1; + if (args.size() >= 5 && args[3] == "LIMIT") + { + sizeLimit = atof(args[4].c_str()); + } + std::string output; std::string line; bool has_newline = false; - while ( cmSystemTools::GetLineFromStream(file, line, &has_newline) ) + while (sizeLimit != 0 && + cmSystemTools::GetLineFromStream(file, line, &has_newline, + sizeLimit) ) { + if (sizeLimit > 0) + { + sizeLimit -= line.size(); + if (has_newline) + { + sizeLimit--; + } + if (sizeLimit < 0) + { + sizeLimit = 0; + } + } output += line; if ( has_newline ) { diff --git a/Source/cmFileCommand.h b/Source/cmFileCommand.h index 73323a6..ed43207 100644 --- a/Source/cmFileCommand.h +++ b/Source/cmFileCommand.h @@ -66,7 +66,7 @@ public: return " FILE(WRITE filename \"message to write\"... )\n" " FILE(APPEND filename \"message to write\"... )\n" - " FILE(READ filename variable)\n" + " FILE(READ filename variable [LIMIT numBytes])\n" " FILE(GLOB variable [RELATIVE path] [globbing expressions]...)\n" " FILE(GLOB_RECURSE variable [RELATIVE path] \n" " [globbing expressions]...)\n" |