added XMLStringCopy to properly copy NSStrings as xml strings; use it for setting name

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/branches/nsxml_using_libxml2@34505 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Doug Simons 2012-01-12 18:50:56 +00:00
parent 065ac2bce2
commit 8772885b71
3 changed files with 27 additions and 3 deletions

View file

@ -68,7 +68,10 @@ GS_PRIVATE_INTERNAL(NSXMLElement)
/* Create holder for internal instance variables so that we'll have /* Create holder for internal instance variables so that we'll have
* all our ivars available rather than just those of the superclass. * all our ivars available rather than just those of the superclass.
*/ */
NSString *name = @"";
GS_CREATE_INTERNAL(NSXMLElement) GS_CREATE_INTERNAL(NSXMLElement)
internal->node = (void *)xmlNewNode(NULL,(xmlChar *)[name UTF8String]);
internal->objectValue = @"";
} }
return [super initWithKind: kind options: theOptions]; return [super initWithKind: kind options: theOptions];
} }

View file

@ -416,7 +416,12 @@ GS_PRIVATE_INTERNAL(NSXMLNode)
- (NSString*) name - (NSString*) name
{ {
return internal->name; xmlNodePtr node = (xmlNodePtr)(internal->node);
if (node->name)
return StringFromXMLString(node->name,strlen((char *)node->name));
else
return @"";
//return internal->name;
} }
- (NSXMLNode*) _nodeFollowingInNaturalDirection: (BOOL)forward - (NSXMLNode*) _nodeFollowingInNaturalDirection: (BOOL)forward
@ -525,7 +530,10 @@ GS_PRIVATE_INTERNAL(NSXMLNode)
- (NSString*) stringValue - (NSString*) stringValue
{ {
xmlNodePtr node = (xmlNodePtr)(internal->node); xmlNodePtr node = (xmlNodePtr)(internal->node);
return StringFromXMLString(node->content,strlen((char *)node->content)); if (node->content)
return StringFromXMLString(node->content,strlen((char *)node->content));
else
return @"";
} }
- (NSString*) URI - (NSString*) URI
@ -566,7 +574,9 @@ GS_PRIVATE_INTERNAL(NSXMLNode)
{ {
if (NSXMLInvalidKind != internal->kind) if (NSXMLInvalidKind != internal->kind)
{ {
ASSIGNCOPY(internal->name, name); xmlNodePtr node = (xmlNodePtr)(internal->node);
node->name = XMLStringCopy(name);
//ASSIGNCOPY(internal->name, name);
} }
} }

View file

@ -39,11 +39,22 @@
*/ */
#define XMLSTRING(X) ((const unsigned char*)[X UTF8String]) #define XMLSTRING(X) ((const unsigned char*)[X UTF8String])
inline static unsigned char *XMLStringCopy(NSString *source)
{
unsigned int len = [source maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1;
unsigned char *xmlstr = malloc(len);
[source getCString:xmlstr maxLength:len encoding:NSUTF8StringEncoding];
return xmlstr;
}
inline static NSString* inline static NSString*
StringFromXMLString(const unsigned char *bytes, unsigned length) StringFromXMLString(const unsigned char *bytes, unsigned length)
{ {
NSString *str; NSString *str;
if (bytes == NULL)
return @"";
str = [[NSString alloc] initWithBytes: bytes str = [[NSString alloc] initWithBytes: bytes
length: length length: length
encoding: NSUTF8StringEncoding]; encoding: NSUTF8StringEncoding];