|
XMLAPI XML * xml_createtext (const char * value)
{
XML * ret;
ret = (XML *) MALLOC (sizeof (struct _element));
memset (ret, 0, sizeof (struct _element));
ret->attrs = (ATTR *) MALLOC (sizeof (struct _attr));
ret->attrs->name = NULL;
ret->attrs->next = NULL;
if (value) {
ret->attrs->value = xml_strdup (value);
ret->attrs->valsize = strlen (value) + 1;
} else {
ret->attrs->value = xml_strdup ("");
ret->attrs->valsize = 1;
}
return (ret);
}
XMLAPI XML * xml_createtext_nodup (char * value)
{
XML * ret;
ret = (XML *) MALLOC (sizeof (struct _element));
memset (ret, 0, sizeof (struct _element));
ret->attrs = (ATTR *) MALLOC (sizeof (struct _attr));
ret->attrs->name = NULL;
ret->attrs->next = NULL;
if (value) {
ret->attrs->value = value;
ret->attrs->valsize = strlen (value) + 1;
} else {
ret->attrs->value = xml_strdup ("");
ret->attrs->valsize = 1;
}
return (ret);
}
XMLAPI XML * xml_createtextlen (const char * value, int len)
{
XML * ret;
ret = (XML *) MALLOC (sizeof (struct _element));
memset (ret, 0, sizeof (struct _element));
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_formatv (format, args);
va_end (args);
ret = (XML *) MALLOC (sizeof (struct _element));
memset (ret, 0, sizeof (struct _element));
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. */
if (!value) return;
attr = xml->attrs;
if (!attr) {
xml->attrs = (ATTR *) MALLOC (sizeof (struct _attr));
xml->attrs->name = NULL;
xml->attrs->next = NULL;
xml->attrs->value = xml_strdup (value);
xml->attrs->valsize = strlen (value) + 1;
return;
}
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) {
xml_textcat (xml, "");
attr = xml->attrs;
if (!attr) return; /* Shouldn't happen...*/
}
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);
}
|