From 5f4f3f003e1f08e5495e0fe30fae18eb6029888d Mon Sep 17 00:00:00 2001 From: Adrian Kummerländer Date: Sun, 20 Apr 2014 23:30:25 +0200 Subject: Switched filesystem interaction code to boost::filesystem * while plain read access on files is doesn't require boost::filesystem it will greatly simplify the implementation of external directory traversal functions * it also improves the portability of relative path construction --- CMakeLists.txt | 2 ++ src/function/read_file.cc | 16 +++++++--------- src/function/read_file.h | 6 +++--- src/function/read_xml_file.cc | 15 ++++++++++++--- src/function/read_xml_file.h | 6 +++--- 5 files changed, 27 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c87ca68..095480a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,4 +22,6 @@ target_link_libraries( test xalan-c xerces-c + boost_system + boost_filesystem ) diff --git a/src/function/read_file.cc b/src/function/read_file.cc index ea7a758..19ecfc8 100644 --- a/src/function/read_file.cc +++ b/src/function/read_file.cc @@ -1,5 +1,7 @@ #include "read_file.h" +#include "boost/filesystem/fstream.hpp" + #include namespace InputXSLT { @@ -24,24 +26,20 @@ xalan::XObjectPtr FunctionReadFile::execute( xalan::CharVectorType castHelper; arguments[0]->str().transcode(castHelper); - std::string fileName(this->path_); - fileName.reserve(fileName.size() + castHelper.size()); - - std::move( + const std::string fileName( castHelper.begin(), - castHelper.end(), - fileName.end() + castHelper.end() ); - std::ifstream file(fileName); + boost::filesystem::ifstream file(this->path_ / fileName); - std::string content( + const std::string fileContent( (std::istreambuf_iterator(file)), (std::istreambuf_iterator()) ); return executionContext.getXObjectFactory().createString( - xalan::XalanDOMString(content.data()) + xalan::XalanDOMString(fileContent.data()) ); } diff --git a/src/function/read_file.h b/src/function/read_file.h index f800c37..f5bdb9d 100644 --- a/src/function/read_file.h +++ b/src/function/read_file.h @@ -1,13 +1,13 @@ #ifndef INPUTXSLT_SRC_FUNCTION_READ_FILE_H_ #define INPUTXSLT_SRC_FUNCTION_READ_FILE_H_ -#include -#include #include #include #include #include +#include "boost/filesystem.hpp" + #include #include "common.h" @@ -31,7 +31,7 @@ class FunctionReadFile : public xalan::Function { bool operator==(const FunctionReadFile&) const = delete; private: - const std::string path_; + const boost::filesystem::path path_; const xalan::XalanDOMString& getError(xalan::XalanDOMString&) const; diff --git a/src/function/read_xml_file.cc b/src/function/read_xml_file.cc index be091a0..78f81c4 100644 --- a/src/function/read_xml_file.cc +++ b/src/function/read_xml_file.cc @@ -1,5 +1,7 @@ #include "read_xml_file.h" +#include "boost/filesystem/fstream.hpp" + namespace InputXSLT { FunctionReadXmlFile::FunctionReadXmlFile(const std::string& path): @@ -24,12 +26,19 @@ xalan::XObjectPtr FunctionReadXmlFile::execute( generalError(executionContext, context, locator); } - xalan::XalanDOMString fileName(this->path_.data()); - fileName.append(arguments[0]->str()); + xalan::CharVectorType castHelper; + arguments[0]->str().transcode(castHelper); + + const std::string fileName( + castHelper.begin(), + castHelper.end() + ); + + boost::filesystem::ifstream file(this->path_ / fileName); return executionContext.getXObjectFactory().createNodeSet( this->parser_.parseXMLStream( - xalan::XSLTInputSource(fileName) + xalan::XSLTInputSource(file) ) ); } diff --git a/src/function/read_xml_file.h b/src/function/read_xml_file.h index c755852..6877feb 100644 --- a/src/function/read_xml_file.h +++ b/src/function/read_xml_file.h @@ -1,14 +1,14 @@ #ifndef INPUTXSLT_SRC_FUNCTION_READ_XML_FILE_H_ #define INPUTXSLT_SRC_FUNCTION_READ_XML_FILE_H_ -#include -#include #include #include #include #include #include +#include "boost/filesystem.hpp" + #include #include "common.h" @@ -33,7 +33,7 @@ class FunctionReadXmlFile : public xalan::Function { bool operator==(const FunctionReadXmlFile&) const = delete; private: - const std::string path_; + const boost::filesystem::path path_; mutable xalan::XercesParserLiaison parser_; const xalan::XalanDOMString& getError(xalan::XalanDOMString& result) const; -- cgit v1.2.3