aboutsummaryrefslogtreecommitdiff
path: root/src/function/read_directory.cc
diff options
context:
space:
mode:
authorAdrian Kummerländer2014-05-02 22:06:37 +0200
committerAdrian Kummerländer2014-05-02 22:06:37 +0200
commite5ed418907f09bf8905463f42a44593d51159bc9 (patch)
tree25d70d23625877946486ce8d46d7c4fb98a836f9 /src/function/read_directory.cc
parente9c4e2b716798002c9ccbf96ee509eb91ad56553 (diff)
downloadInputXSLT-e5ed418907f09bf8905463f42a44593d51159bc9.tar
InputXSLT-e5ed418907f09bf8905463f42a44593d51159bc9.tar.gz
InputXSLT-e5ed418907f09bf8905463f42a44593d51159bc9.tar.bz2
InputXSLT-e5ed418907f09bf8905463f42a44593d51159bc9.tar.lz
InputXSLT-e5ed418907f09bf8905463f42a44593d51159bc9.tar.xz
InputXSLT-e5ed418907f09bf8905463f42a44593d51159bc9.tar.zst
InputXSLT-e5ed418907f09bf8905463f42a44593d51159bc9.zip
Changed external functions to enable global installation
* up until now all external functions were locally installed to a specific XalanTransformer instance contained within a TransformationGuard instance ** this had to change as I planned to add a "execute-transformation" function based on TransformationGuard which would have led to recursive self-instantiation ** global external functions have to be thread-safe * as global external function can not be provided with a reference to a transformation-specific FilesystemFacade instance, the working path is now determined using xalan::Locator ** currently using pointer arithmetics on XMLCh* to remove the "file://" prefix of the URI returned by locator->getSystemId(), may be unsafe * added compilation unit for PlattformGuard as it now contains function installation in addition to plattform lifetime management
Diffstat (limited to 'src/function/read_directory.cc')
-rw-r--r--src/function/read_directory.cc16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/function/read_directory.cc b/src/function/read_directory.cc
index f155029..b13be2b 100644
--- a/src/function/read_directory.cc
+++ b/src/function/read_directory.cc
@@ -6,21 +6,27 @@
#include <xercesc/dom/DOMText.hpp>
#include "support/xerces_string_guard.h"
+#include "support/filesystem_context.h"
namespace InputXSLT {
-FunctionReadDirectory::FunctionReadDirectory(const FilesystemContext& context):
- fs_context_(context),
+FunctionReadDirectory::FunctionReadDirectory():
document_cache_(std::make_shared<DomDocumentCache>()) { }
xalan::XObjectPtr FunctionReadDirectory::execute(
xalan::XPathExecutionContext& executionContext,
xalan::XalanNode*,
const xalan::XObjectPtr argument,
- const xalan::Locator*
+ const xalan::Locator* locator
) const {
+ const FilesystemContext fs_context(
+ boost::filesystem::path(
+ xercesc::XMLString::transcode(locator->getSystemId() + 7)
+ ).parent_path().string()
+ );
+
const boost::filesystem::path directoryPath(
- this->fs_context_.resolve(argument->str())
+ fs_context.resolve(argument->str())
);
DomDocumentCache::item* const cachedDocument(
@@ -37,7 +43,7 @@ xalan::XObjectPtr FunctionReadDirectory::execute(
);
if ( boost::filesystem::is_directory(directoryPath) ) {
- this->fs_context_.iterate(
+ fs_context.iterate(
argument->str(),
[&domDocument, &rootNode](const boost::filesystem::path& p) {
xercesc::DOMElement* const itemNode(