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
* all our ivars available rather than just those of the superclass.
*/
NSString *name = @"";
GS_CREATE_INTERNAL(NSXMLElement)
internal->node = (void *)xmlNewNode(NULL,(xmlChar *)[name UTF8String]);
internal->objectValue = @"";
}
return [super initWithKind: kind options: theOptions];
}

View file

@ -416,7 +416,12 @@ GS_PRIVATE_INTERNAL(NSXMLNode)
- (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
@ -525,7 +530,10 @@ GS_PRIVATE_INTERNAL(NSXMLNode)
- (NSString*) stringValue
{
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
@ -566,7 +574,9 @@ GS_PRIVATE_INTERNAL(NSXMLNode)
{
if (NSXMLInvalidKind != internal->kind)
{
ASSIGNCOPY(internal->name, name);
xmlNodePtr node = (xmlNodePtr)(internal->node);
node->name = XMLStringCopy(name);
//ASSIGNCOPY(internal->name, name);
}
}

View file

@ -39,10 +39,21 @@
*/
#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*
StringFromXMLString(const unsigned char *bytes, unsigned length)
{
NSString *str;
if (bytes == NULL)
return @"";
str = [[NSString alloc] initWithBytes: bytes
length: length