From cdf4ad3486debe75fe89b2f04bb62541f3ac8405 Mon Sep 17 00:00:00 2001 From: Adrian Kummerländer Date: Mon, 21 Apr 2014 13:30:23 +0200 Subject: Extracted filesystem path resolution into InputXSLT::FilesystemContext * this class provides methods for resolving paths relative to the contained base path * other filesystem interaction methods will also be implemented in this class ** for instance directory traversal --- src/function/read_file.cc | 16 +++++----------- src/function/read_file.h | 7 +++---- src/function/read_xml_file.cc | 18 ++++++------------ src/function/read_xml_file.h | 7 +++---- 4 files changed, 17 insertions(+), 31 deletions(-) (limited to 'src/function') diff --git a/src/function/read_file.cc b/src/function/read_file.cc index 19ecfc8..9e32f04 100644 --- a/src/function/read_file.cc +++ b/src/function/read_file.cc @@ -6,8 +6,8 @@ namespace InputXSLT { -FunctionReadFile::FunctionReadFile(const std::string& path): - path_(path) { } +FunctionReadFile::FunctionReadFile(const FilesystemContext& context): + fs_context_(context) { } xalan::XObjectPtr FunctionReadFile::execute( xalan::XPathExecutionContext& executionContext, @@ -20,19 +20,13 @@ xalan::XObjectPtr FunctionReadFile::execute( executionContext ); - generalError(executionContext, context, locator); + this->generalError(executionContext, context, locator); } - xalan::CharVectorType castHelper; - arguments[0]->str().transcode(castHelper); - - const std::string fileName( - castHelper.begin(), - castHelper.end() + boost::filesystem::ifstream file( + this->fs_context_.resolve(arguments[0]->str()) ); - boost::filesystem::ifstream file(this->path_ / fileName); - const std::string fileContent( (std::istreambuf_iterator(file)), (std::istreambuf_iterator()) diff --git a/src/function/read_file.h b/src/function/read_file.h index f5bdb9d..b88336a 100644 --- a/src/function/read_file.h +++ b/src/function/read_file.h @@ -6,17 +6,16 @@ #include #include -#include "boost/filesystem.hpp" - #include #include "common.h" +#include "support/filesystem_context.h" namespace InputXSLT { class FunctionReadFile : public xalan::Function { public: - FunctionReadFile(const std::string&); + FunctionReadFile(const FilesystemContext&); virtual xalan::XObjectPtr execute( xalan::XPathExecutionContext&, @@ -31,7 +30,7 @@ class FunctionReadFile : public xalan::Function { bool operator==(const FunctionReadFile&) const = delete; private: - const boost::filesystem::path path_; + const FilesystemContext& fs_context_; const xalan::XalanDOMString& getError(xalan::XalanDOMString&) const; diff --git a/src/function/read_xml_file.cc b/src/function/read_xml_file.cc index 78f81c4..ac42288 100644 --- a/src/function/read_xml_file.cc +++ b/src/function/read_xml_file.cc @@ -4,12 +4,12 @@ namespace InputXSLT { -FunctionReadXmlFile::FunctionReadXmlFile(const std::string& path): - path_(path), +FunctionReadXmlFile::FunctionReadXmlFile(const FilesystemContext& context): + fs_context_(context), parser_() { } FunctionReadXmlFile::FunctionReadXmlFile(const FunctionReadXmlFile& src): - path_(src.path_), + fs_context_(src.fs_context_), parser_() { } xalan::XObjectPtr FunctionReadXmlFile::execute( @@ -23,19 +23,13 @@ xalan::XObjectPtr FunctionReadXmlFile::execute( executionContext ); - generalError(executionContext, context, locator); + this->generalError(executionContext, context, locator); } - xalan::CharVectorType castHelper; - arguments[0]->str().transcode(castHelper); - - const std::string fileName( - castHelper.begin(), - castHelper.end() + boost::filesystem::ifstream file( + this->fs_context_.resolve(arguments[0]->str()) ); - boost::filesystem::ifstream file(this->path_ / fileName); - return executionContext.getXObjectFactory().createNodeSet( this->parser_.parseXMLStream( xalan::XSLTInputSource(file) diff --git a/src/function/read_xml_file.h b/src/function/read_xml_file.h index 6877feb..aa8590a 100644 --- a/src/function/read_xml_file.h +++ b/src/function/read_xml_file.h @@ -7,17 +7,16 @@ #include #include -#include "boost/filesystem.hpp" - #include #include "common.h" +#include "support/filesystem_context.h" namespace InputXSLT { class FunctionReadXmlFile : public xalan::Function { public: - FunctionReadXmlFile(const std::string&); + FunctionReadXmlFile(const FilesystemContext&); FunctionReadXmlFile(const FunctionReadXmlFile&); virtual xalan::XObjectPtr execute( @@ -33,7 +32,7 @@ class FunctionReadXmlFile : public xalan::Function { bool operator==(const FunctionReadXmlFile&) const = delete; private: - const boost::filesystem::path path_; + const FilesystemContext& fs_context_; mutable xalan::XercesParserLiaison parser_; const xalan::XalanDOMString& getError(xalan::XalanDOMString& result) const; -- cgit v1.2.3