diff options
Diffstat (limited to 'Source/cmFileCommand.cxx')
-rw-r--r-- | Source/cmFileCommand.cxx | 75 |
1 files changed, 68 insertions, 7 deletions
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx index 5b3390d..f75ed79 100644 --- a/Source/cmFileCommand.cxx +++ b/Source/cmFileCommand.cxx @@ -76,6 +76,10 @@ bool cmFileCommand::InitialPass(std::vector<std::string> const& args) { return this->HandleStringsCommand(args); } +/* else if ( subCommand == "HEX_TO_BIN" ) + { + return this->HandleHex2BinCommand(args); + }*/ else if ( subCommand == "GLOB" ) { return this->HandleGlobCommand(args, false); @@ -258,6 +262,53 @@ bool cmFileCommand::HandleReadCommand(std::vector<std::string> const& args) } //---------------------------------------------------------------------------- +/*bool cmFileCommand::HandleHex2BinCommand(std::vector<std::string> const& args) +{ + if(args.size() != 3) + { + this->SetError("HEX_TO_BIN requires an input and an output file name"); + return false; + } + // Get the file to read. + std::string inFileName = args[1]; + if(!cmsys::SystemTools::FileIsFullPath(inFileName.c_str())) + { + inFileName = this->Makefile->GetCurrentDirectory(); + inFileName += "/" + args[1]; + } + + // Get the file to write. + std::string outFileName = args[2]; + if(!cmsys::SystemTools::FileIsFullPath(outFileName.c_str())) + { + outFileName = this->Makefile->GetCurrentDirectory(); + outFileName += "/" + args[2]; + } + + if ( !this->Makefile->CanIWriteThisFile(outFileName.c_str()) ) + { + std::string e + = "attempted to write a file: " + outFileName + + " into a source directory."; + this->SetError(e.c_str()); + cmSystemTools::SetFatalErrorOccured(); + return false; + } + + std::string dir = cmSystemTools::GetFilenamePath(outFileName); + cmSystemTools::MakeDirectory(dir.c_str()); + + bool success = cmHexFileConverter::TryConvert(inFileName.c_str(), + outFileName.c_str()); + if (!success) + { + success = cmSystemTools::CopyFileAlways(inFileName.c_str(), + outFileName.c_str()); + } + return success; +} */ + +//---------------------------------------------------------------------------- bool cmFileCommand::HandleStringsCommand(std::vector<std::string> const& args) { if(args.size() < 3) @@ -294,6 +345,7 @@ bool cmFileCommand::HandleStringsCommand(std::vector<std::string> const& args) cmsys::RegularExpression regex; bool have_regex = false; bool newline_consume = false; + bool hex_conversion_enabled = true; int arg_mode = arg_none; for(unsigned int i=3; i < args.size(); ++i) { @@ -326,6 +378,11 @@ bool cmFileCommand::HandleStringsCommand(std::vector<std::string> const& args) newline_consume = true; arg_mode = arg_none; } + else if(args[i] == "NO_HEX_CONVERSION") + { + hex_conversion_enabled = false; + arg_mode = arg_none; + } else if(arg_mode == arg_limit_input) { if(sscanf(args[i].c_str(), "%d", &limit_input) != 1 || @@ -416,15 +473,19 @@ bool cmFileCommand::HandleStringsCommand(std::vector<std::string> const& args) return false; } } - - std::string binaryFileName = this->Makefile->GetCurrentOutputDirectory(); - binaryFileName += cmake::GetCMakeFilesDirectory(); - binaryFileName += "/FileCommandStringsBinaryFile"; - if (cmHexFileConverter::TryConvert(fileName.c_str(), binaryFileName.c_str())) + + if (hex_conversion_enabled) { - fileName = binaryFileName; + // TODO: should work without temp file, but just on a memory buffer + std::string binaryFileName = this->Makefile->GetCurrentOutputDirectory(); + binaryFileName += cmake::GetCMakeFilesDirectory(); + binaryFileName += "/FileCommandStringsBinaryFile"; + if (cmHexFileConverter::TryConvert(fileName.c_str(), binaryFileName.c_str())) + { + fileName = binaryFileName; + } } - + // Open the specified file. #if defined(_WIN32) || defined(__CYGWIN__) std::ifstream fin(fileName.c_str(), std::ios::in | std::ios::binary); |