From 2c89112141530617b51af8c41211c2507ec8c738 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Wed, 20 Aug 2014 22:28:15 +0200 Subject: Setting the correct work directory in FunctionExternalCommand * changed the XObjectValue constructor to accept a pointer to FilesystemContext instead of instantiating the context by itself * the FilesystemContext is now instantiated in the "callConstructDocument" member method of "FunctionBase" ** a const reference to FilesystemContext is passed to all "constructDocument" member method implementations * the FilesystemContext is currently only used by FunctionExternal command to set the correct work directory in "boost::process::context" ** this is required so calling external commands from inside a stylesheet works as expected *** i.e. from inside the directory the stylesheet is located in * modified all remaining external function implementations accordingly --- src/function/external_command.cc | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/function/external_command.cc') diff --git a/src/function/external_command.cc b/src/function/external_command.cc index 7d91a9a..3819a43 100644 --- a/src/function/external_command.cc +++ b/src/function/external_command.cc @@ -40,6 +40,7 @@ inline xercesc::DOMNode* importDocumentElement( namespace InputXSLT { DomDocumentCache::document_ptr FunctionExternalCommand::constructDocument( + const FilesystemContext& fsContext, std::string command, boost::optional input ) const { @@ -51,6 +52,9 @@ DomDocumentCache::document_ptr FunctionExternalCommand::constructDocument( context.environment = boost::process::self::get_environment(); context.stdout_behavior = boost::process::capture_stream(); context.stdin_behavior = boost::process::capture_stream(); + context.work_directory = boost::filesystem::canonical( + fsContext.getBase().parent_path() + ).string(); boost::process::child commandProcess( boost::process::launch_shell(command, context) -- cgit v1.2.3