|
@@ -29,6 +29,9 @@ int /* O - 0 on success, -1 on failure */
|
|
mxmlSetCDATA(mxml_node_t *node, /* I - Node to set */
|
|
mxmlSetCDATA(mxml_node_t *node, /* I - Node to set */
|
|
const char *data) /* I - New data string */
|
|
const char *data) /* I - New data string */
|
|
{
|
|
{
|
|
|
|
+ char *s; /* String pointer */
|
|
|
|
+
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Range check input...
|
|
* Range check input...
|
|
*/
|
|
*/
|
|
@@ -43,14 +46,19 @@ mxmlSetCDATA(mxml_node_t *node, /* I - Node to set */
|
|
strncmp(node->value.element.name, "![CDATA[", 8))
|
|
strncmp(node->value.element.name, "![CDATA[", 8))
|
|
return (-1);
|
|
return (-1);
|
|
|
|
|
|
|
|
+ if (data == (node->value.element.name + 8))
|
|
|
|
+ return (0);
|
|
|
|
+
|
|
/*
|
|
/*
|
|
- * Free any old element value and set the new value...
|
|
|
|
|
|
+ * Allocate the new value, free any old element value, and set the new value...
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
+ s = _mxml_strdupf("![CDATA[%s", data);
|
|
|
|
+
|
|
if (node->value.element.name)
|
|
if (node->value.element.name)
|
|
free(node->value.element.name);
|
|
free(node->value.element.name);
|
|
|
|
|
|
- node->value.element.name = _mxml_strdupf("![CDATA[%s", data);
|
|
|
|
|
|
+ node->value.element.name = s;
|
|
|
|
|
|
return (0);
|
|
return (0);
|
|
}
|
|
}
|
|
@@ -81,6 +89,12 @@ mxmlSetCustom(
|
|
if (!node || node->type != MXML_CUSTOM)
|
|
if (!node || node->type != MXML_CUSTOM)
|
|
return (-1);
|
|
return (-1);
|
|
|
|
|
|
|
|
+ if (data == node->value.custom.data)
|
|
|
|
+ {
|
|
|
|
+ node->value.custom.destroy = destroy;
|
|
|
|
+ return (0);
|
|
|
|
+ }
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Free any old element value and set the new value...
|
|
* Free any old element value and set the new value...
|
|
*/
|
|
*/
|
|
@@ -112,6 +126,9 @@ mxmlSetElement(mxml_node_t *node, /* I - Node to set */
|
|
if (!node || node->type != MXML_ELEMENT || !name)
|
|
if (!node || node->type != MXML_ELEMENT || !name)
|
|
return (-1);
|
|
return (-1);
|
|
|
|
|
|
|
|
+ if (name == node->value.element.name)
|
|
|
|
+ return (0);
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Free any old element value and set the new value...
|
|
* Free any old element value and set the new value...
|
|
*/
|
|
*/
|
|
@@ -177,6 +194,9 @@ mxmlSetOpaque(mxml_node_t *node, /* I - Node to set */
|
|
if (!node || node->type != MXML_OPAQUE || !opaque)
|
|
if (!node || node->type != MXML_OPAQUE || !opaque)
|
|
return (-1);
|
|
return (-1);
|
|
|
|
|
|
|
|
+ if (node->value.opaque == opaque)
|
|
|
|
+ return (0);
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Free any old opaque value and set the new value...
|
|
* Free any old opaque value and set the new value...
|
|
*/
|
|
*/
|
|
@@ -204,6 +224,7 @@ mxmlSetOpaquef(mxml_node_t *node, /* I - Node to set */
|
|
...) /* I - Additional arguments as needed */
|
|
...) /* I - Additional arguments as needed */
|
|
{
|
|
{
|
|
va_list ap; /* Pointer to arguments */
|
|
va_list ap; /* Pointer to arguments */
|
|
|
|
+ char *s; /* Temporary string */
|
|
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -218,17 +239,17 @@ mxmlSetOpaquef(mxml_node_t *node, /* I - Node to set */
|
|
return (-1);
|
|
return (-1);
|
|
|
|
|
|
/*
|
|
/*
|
|
- * Free any old string value and set the new value...
|
|
|
|
|
|
+ * Format the new string, free any old string value, and set the new value...
|
|
*/
|
|
*/
|
|
|
|
|
|
- if (node->value.opaque)
|
|
|
|
- free(node->value.opaque);
|
|
|
|
-
|
|
|
|
va_start(ap, format);
|
|
va_start(ap, format);
|
|
|
|
+ s = _mxml_vstrdupf(format, ap);
|
|
|
|
+ va_end(ap);
|
|
|
|
|
|
- node->value.opaque = _mxml_strdupf(format, ap);
|
|
|
|
|
|
+ if (node->value.opaque)
|
|
|
|
+ free(node->value.opaque);
|
|
|
|
|
|
- va_end(ap);
|
|
|
|
|
|
+ node->value.opaque = s;
|
|
|
|
|
|
return (0);
|
|
return (0);
|
|
}
|
|
}
|
|
@@ -287,6 +308,12 @@ mxmlSetText(mxml_node_t *node, /* I - Node to set */
|
|
if (!node || node->type != MXML_TEXT || !string)
|
|
if (!node || node->type != MXML_TEXT || !string)
|
|
return (-1);
|
|
return (-1);
|
|
|
|
|
|
|
|
+ if (string == node->value.text.string)
|
|
|
|
+ {
|
|
|
|
+ node->value.text.whitespace = whitespace;
|
|
|
|
+ return (0);
|
|
|
|
+ }
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Free any old string value and set the new value...
|
|
* Free any old string value and set the new value...
|
|
*/
|
|
*/
|
|
@@ -314,6 +341,7 @@ mxmlSetTextf(mxml_node_t *node, /* I - Node to set */
|
|
...) /* I - Additional arguments as needed */
|
|
...) /* I - Additional arguments as needed */
|
|
{
|
|
{
|
|
va_list ap; /* Pointer to arguments */
|
|
va_list ap; /* Pointer to arguments */
|
|
|
|
+ char *s; /* Temporary string */
|
|
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -331,15 +359,15 @@ mxmlSetTextf(mxml_node_t *node, /* I - Node to set */
|
|
* Free any old string value and set the new value...
|
|
* Free any old string value and set the new value...
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
+ va_start(ap, format);
|
|
|
|
+ s = _mxml_vstrdupf(format, ap);
|
|
|
|
+ va_end(ap);
|
|
|
|
+
|
|
if (node->value.text.string)
|
|
if (node->value.text.string)
|
|
free(node->value.text.string);
|
|
free(node->value.text.string);
|
|
|
|
|
|
- va_start(ap, format);
|
|
|
|
-
|
|
|
|
node->value.text.whitespace = whitespace;
|
|
node->value.text.whitespace = whitespace;
|
|
- node->value.text.string = _mxml_strdupf(format, ap);
|
|
|
|
-
|
|
|
|
- va_end(ap);
|
|
|
|
|
|
+ node->value.text.string = s;
|
|
|
|
|
|
return (0);
|
|
return (0);
|
|
}
|
|
}
|