|
XMLAPI XML * xml_createtext (const char * value)
{
XML * ret;
ret = (XML *) MALLOC (sizeof (struct _element));
ret->name = NULL;
ret->children = NULL;
ret->parent = NULL;
ret->attrs = (ATTR *) MALLOC (sizeof (struct _attr));
ret->attrs->name = NULL;
ret->attrs->next = NULL;
ret->attrs->value = strdup (value);
ret->attrs->valsize = strlen (value) + 1;
return (ret);
}
XMLAPI XML * xml_createtext_nodup (char * value)
{
XML * ret;
ret = (XML *) MALLOC (sizeof (struct _element));
ret->name = NULL;
ret->children = NULL;
ret->parent = NULL;
ret->attrs = (ATTR *) MALLOC (sizeof (struct _attr));
ret->attrs->name = NULL;
ret->attrs->next = NULL;
ret->attrs->value = value;
ret->attrs->valsize = strlen (value) + 1;
return (ret);
}
XMLAPI XML * xml_createtextlen (const char * value, int len)
{
XML * ret;
ret = (XML *) MALLOC (sizeof (struct _element));
ret->name = NULL;
ret->children = NULL;
ret->attrs = (ATTR *) MALLOC (sizeof (struct _attr));
ret->attrs->name = NULL;
ret->attrs->next = NULL;
ret->attrs->value = (char *) MALLOC (len + 1);
ret->attrs->valsize = len + 1;
strncpy (ret->attrs->value, value, len);
ret->attrs->value[len] = '\0';
return (ret);
}
XMLAPI XML * xml_createtextf (const char * format, ...)
{
XML * ret;
char * value;
va_list args;
va_start (args, format);
value = _xml_string_format (format, args);
va_end (args);
ret = (XML *) MALLOC (sizeof (struct _element));
ret->name = NULL;
ret->children = NULL;
ret->parent = NULL;
ret->attrs = (ATTR *) MALLOC (sizeof (struct _attr));
ret->attrs->name = NULL;
ret->attrs->next = NULL;
ret->attrs->value = value;
ret->attrs->valsize = strlen (value) + 1;
return (ret);
}
XMLAPI void xml_textcat (XML * xml, const char * value)
{
ATTR * attr;
int len;
if (xml_is_element (xml)) return; /* We refuse to work with non-elements. */
attr = xml->attrs;
if (!attr) return; /* This shouldn't happen, but... */
len = strlen (attr->value) + strlen (value) + 1;
if (len > attr->valsize) {
while (attr->valsize < len) attr->valsize += 256;
attr->value = (char *) REALLOC (attr->value, attr->valsize);
}
strcat (attr->value, value);
}
XMLAPI void xml_textncat (XML * xml, const char * value, int length)
{
ATTR * attr;
int len;
if (xml_is_element (xml)) return; /* We refuse to work with non-elements. */
attr = xml->attrs;
if (!attr) return; /* This shouldn't happen, but... */
len = strlen (attr->value) + length + 1;
if (len > attr->valsize) {
while (attr->valsize < len) attr->valsize += 256;
attr->value = (char *) REALLOC (attr->value, attr->valsize);
}
strncat (attr->value, value, length);
}
|