diff options
| author | Adrian Kummerländer | 2014-04-25 17:44:32 +0200 | 
|---|---|---|
| committer | Adrian Kummerländer | 2014-04-25 17:44:32 +0200 | 
| commit | 938ed7622656c3494ae8fdb83bc2ad4b1f31d901 (patch) | |
| tree | 75ef069d66ce3709139955cccaa05b531fa6f9a0 /src/function/read_directory.cc | |
| parent | 78d3873061f1a974da4d0ccdcc1778c6a11139e8 (diff) | |
| download | InputXSLT-938ed7622656c3494ae8fdb83bc2ad4b1f31d901.tar InputXSLT-938ed7622656c3494ae8fdb83bc2ad4b1f31d901.tar.gz InputXSLT-938ed7622656c3494ae8fdb83bc2ad4b1f31d901.tar.bz2 InputXSLT-938ed7622656c3494ae8fdb83bc2ad4b1f31d901.tar.lz InputXSLT-938ed7622656c3494ae8fdb83bc2ad4b1f31d901.tar.xz InputXSLT-938ed7622656c3494ae8fdb83bc2ad4b1f31d901.tar.zst InputXSLT-938ed7622656c3494ae8fdb83bc2ad4b1f31d901.zip | |
Improved argument resolution and error handling
* execute member method internal argument count checks are not needed when using between one and two arguments
** xalan automatically generates the appropriate message containing the getError message when only offered fixed argument execute member overloads
* improved FunctionReadDirectory attribute element generation
* added additional validations to FunctionReadFile and FunctionReadXMLFile
* I plan to return errors inside a DOM tree alongside the function return values in the future
Diffstat (limited to 'src/function/read_directory.cc')
| -rw-r--r-- | src/function/read_directory.cc | 48 | 
1 files changed, 25 insertions, 23 deletions
| diff --git a/src/function/read_directory.cc b/src/function/read_directory.cc index 245f311..9711239 100644 --- a/src/function/read_directory.cc +++ b/src/function/read_directory.cc @@ -15,41 +15,43 @@ FunctionReadDirectory::FunctionReadDirectory(const FilesystemContext& context):  	documents_(std::make_shared<std::stack<DomDocumentGuard>>()) { }  xalan::XObjectPtr FunctionReadDirectory::execute( -	xalan::XPathExecutionContext&                executionContext, -	xalan::XalanNode*                            context, -	const xalan::Function::XObjectArgVectorType& arguments, -	const xalan::Locator*                        locator +	xalan::XPathExecutionContext& executionContext, +	xalan::XalanNode*, +	const xalan::XObjectPtr argument, +	const xalan::Locator*  ) const { -	if ( arguments.size() != 1 ) { -		xalan::XPathExecutionContext::GetAndReleaseCachedString guard( -			executionContext -		); - -		this->generalError(executionContext, context, locator); -	} -  	this->documents_->emplace("content");  	DomDocumentGuard& domDocument = this->documents_->top();  	xercesc::DOMNode* const rootNode = domDocument->getDocumentElement();  	this->fs_context_.iterate( -		arguments[0]->str(), +		argument->str(),  		[&domDocument, &rootNode](const boost::filesystem::path& p) {  		xercesc::DOMElement* const itemNode(  			domDocument->createElement(*XercesStringGuard("item"))  		); -		if ( boost::filesystem::is_regular_file(p) ) { -			itemNode->setAttribute( -				*XercesStringGuard("type"), -				*XercesStringGuard("file") -			); -		} else if ( boost::filesystem::is_directory(p) ) { -			itemNode->setAttribute( -				*XercesStringGuard("type"), -				*XercesStringGuard("directory") -			); +		switch ( boost::filesystem::status(p).type() ) { +			case boost::filesystem::regular_file: { +				itemNode->setAttribute( +					*XercesStringGuard("type"), +					*XercesStringGuard("file") +				); + +				break; +			}; +			case boost::filesystem::directory_file: { +				itemNode->setAttribute( +					*XercesStringGuard("type"), +					*XercesStringGuard("directory") +				); + +				break; +			}; +			default: { +				break; +			};  		}  		xercesc::DOMText* const textNode( | 
