diff options
author | Adrian Kummerländer | 2014-04-20 13:09:32 +0200 |
---|---|---|
committer | Adrian Kummerländer | 2014-04-20 13:09:32 +0200 |
commit | 29a9fb20b4c8414f2590886e43ae86794a53db89 (patch) | |
tree | 4d426d45293a019caee8ee879186111c90b426d3 /src/function/read_file.cc | |
parent | 3383e24e396431eed7d4ab9f69ff8ffaf12d4925 (diff) | |
download | InputXSLT-29a9fb20b4c8414f2590886e43ae86794a53db89.tar InputXSLT-29a9fb20b4c8414f2590886e43ae86794a53db89.tar.gz InputXSLT-29a9fb20b4c8414f2590886e43ae86794a53db89.tar.bz2 InputXSLT-29a9fb20b4c8414f2590886e43ae86794a53db89.tar.lz InputXSLT-29a9fb20b4c8414f2590886e43ae86794a53db89.tar.xz InputXSLT-29a9fb20b4c8414f2590886e43ae86794a53db89.tar.zst InputXSLT-29a9fb20b4c8414f2590886e43ae86794a53db89.zip |
Implemented support for modifying external function base path
* one expects a read-file function to work relative to the directory the transformation is located and not to the executable's location
** from the perspective of the user the transformation is the application, not the actual executable
* removed PlattformGuard struct from TransformerGuard (now TransformerFacade)
* TransformerFacade is instatiated with the appropriate relative working path
** i.e. it will have to be instantiated for every directory containing one or more transformations
Diffstat (limited to 'src/function/read_file.cc')
-rw-r--r-- | src/function/read_file.cc | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/function/read_file.cc b/src/function/read_file.cc index efc1f61..dcbff25 100644 --- a/src/function/read_file.cc +++ b/src/function/read_file.cc @@ -1,7 +1,12 @@ #include "read_file.h" +#include "utility.h" + namespace InputXSLT { +FunctionReadFile::FunctionReadFile(const std::string& path): + path_(path) { } + xalan::XObjectPtr FunctionReadFile::execute( xalan::XPathExecutionContext& executionContext, xalan::XalanNode* context, @@ -16,20 +21,21 @@ xalan::XObjectPtr FunctionReadFile::execute( generalError(executionContext, context, locator); } - xalan::CharVectorType fileNameVector; - std::string fileNameString; + xalan::CharVectorType castHelper; + arguments[0]->str().transcode(castHelper); - arguments[0]->str().transcode(fileNameVector); + std::string fileName(this->path_); + fileName.reserve(fileName.size() + castHelper.size()); std::move( - fileNameVector.begin(), - fileNameVector.end(), - fileNameString.begin() + castHelper.begin(), + castHelper.end(), + fileName.end() ); return executionContext.getXObjectFactory().createString( xalan::XalanDOMString( - InputXSLT::readFile(fileNameString).data() + InputXSLT::readFile(fileName).data() ) ); } |