diff --git a/ChangeLog b/ChangeLog index a80a078a2..f0e8aa8d5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,8 @@ * Source/NSDistributedNotificationCenter.m: Changed to explicitly use a socket port name server for network wide notifications. + * Source/Additions/GSXML.m: Added ([-abortParser]) + * Source/NSXMLParser.m: Use new abort method. 2004-10-21 Fred Kiefer diff --git a/Headers/Additions/GNUstepBase/GSXML.h b/Headers/Additions/GNUstepBase/GSXML.h index b7e7e44c3..14df8e0e6 100644 --- a/Headers/Additions/GNUstepBase/GSXML.h +++ b/Headers/Additions/GNUstepBase/GSXML.h @@ -191,6 +191,7 @@ withData: (NSData*)data; + (NSString*) xmlEncodingStringForStringEncoding: (NSStringEncoding)encoding; +- (void) abortParsing; - (int) columnNumber; - (GSXMLDocument*) document; - (BOOL) doValidityChecking: (BOOL)yesno; diff --git a/Source/Additions/GSXML.m b/Source/Additions/GSXML.m index 4fc1deffb..8205fa8f2 100644 --- a/Source/Additions/GSXML.m +++ b/Source/Additions/GSXML.m @@ -1808,6 +1808,25 @@ static NSString *endMarker = @"At end of incremental parse"; return xmlEncodingString; } +/** + * If called by a SAX callback routine, this method will terminate + * the parsiong process. + */ +- (void) abortParsing +{ + if (lib != NULL) + { + xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr)lib; + + // Stop SAX callbacks + ctxt->disableSAX = 1; + // Stop incoming data being parsed. + ctxt->instate = XML_PARSER_EOF; + // Pretend we are at end of file (nul byte). + if (ctxt->input != NULL) ctxt->input->cur = ""; + } +} + /** * If executed during a parse operation, returns the current column number. */ @@ -2274,6 +2293,11 @@ static NSString *endMarker = @"At end of incremental parse"; xmlExternalEntityLoader oldLoader; int oldWarnings; + if (lib == NULL || ((xmlParserCtxtPtr)lib)->disableSAX != 0) + { + return; // Parsing impossible or disabled. + } + oldLoader = xmlGetExternalEntityLoader(); oldWarnings = xmlGetWarningsDefaultValue; NS_DURING diff --git a/Source/NSXMLParser.m b/Source/NSXMLParser.m index 8e93966be..b0e06a83a 100644 --- a/Source/NSXMLParser.m +++ b/Source/NSXMLParser.m @@ -309,7 +309,7 @@ NSString* const NSXMLParserErrorDomain = @"NSXMLParserErrorDomain"; #define myHandler ((NSXMLSAXHandler*)_handler) - (void) abortParsing -{ // FIXME +{ NSDictionary *d; NSString *e; NSError *error; @@ -323,14 +323,13 @@ NSString* const NSXMLParserErrorDomain = @"NSXMLParserErrorDomain"; userInfo: d]; ASSIGN(myHandler->_lastError, error); [myHandler->_delegate parser: myHandler->_owner parseErrorOccurred: error]; - [NSException raise: NSGenericException format: @"[%@-%@] not yet implemented", - NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; + [myParser abortParsing]; } - (void) dealloc { - DESTROY((id)_parser); - DESTROY((id)_handler); + DESTROY(_parser); + DESTROY(_handler); [super dealloc]; }