summaryrefslogtreecommitdiff
path: root/tools/gator/daemon/mxml/mxml-node.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/gator/daemon/mxml/mxml-node.c')
-rw-r--r--tools/gator/daemon/mxml/mxml-node.c807
1 files changed, 0 insertions, 807 deletions
diff --git a/tools/gator/daemon/mxml/mxml-node.c b/tools/gator/daemon/mxml/mxml-node.c
deleted file mode 100644
index 44af759f9de..00000000000
--- a/tools/gator/daemon/mxml/mxml-node.c
+++ /dev/null
@@ -1,807 +0,0 @@
-/*
- * "$Id: mxml-node.c 436 2011-01-22 01:02:05Z mike $"
- *
- * Node support code for Mini-XML, a small XML-like file parsing library.
- *
- * Copyright 2003-2011 by Michael R Sweet.
- *
- * These coded instructions, statements, and computer programs are the
- * property of Michael R Sweet and are protected by Federal copyright
- * law. Distribution and use rights are outlined in the file "COPYING"
- * which should have been included with this file. If this file is
- * missing or damaged, see the license at:
- *
- * http://www.minixml.org/
- *
- * Contents:
- *
- * mxmlAdd() - Add a node to a tree.
- * mxmlDelete() - Delete a node and all of its children.
- * mxmlGetRefCount() - Get the current reference (use) count for a node.
- * mxmlNewCDATA() - Create a new CDATA node.
- * mxmlNewCustom() - Create a new custom data node.
- * mxmlNewElement() - Create a new element node.
- * mxmlNewInteger() - Create a new integer node.
- * mxmlNewOpaque() - Create a new opaque string.
- * mxmlNewReal() - Create a new real number node.
- * mxmlNewText() - Create a new text fragment node.
- * mxmlNewTextf() - Create a new formatted text fragment node.
- * mxmlRemove() - Remove a node from its parent.
- * mxmlNewXML() - Create a new XML document tree.
- * mxmlRelease() - Release a node.
- * mxmlRetain() - Retain a node.
- * mxml_new() - Create a new node.
- */
-
-/*
- * Include necessary headers...
- */
-
-#include "config.h"
-#include "mxml.h"
-
-
-/*
- * Local functions...
- */
-
-static mxml_node_t *mxml_new(mxml_node_t *parent, mxml_type_t type);
-
-
-/*
- * 'mxmlAdd()' - Add a node to a tree.
- *
- * Adds the specified node to the parent. If the child argument is not
- * NULL, puts the new node before or after the specified child depending
- * on the value of the where argument. If the child argument is NULL,
- * puts the new node at the beginning of the child list (MXML_ADD_BEFORE)
- * or at the end of the child list (MXML_ADD_AFTER). The constant
- * MXML_ADD_TO_PARENT can be used to specify a NULL child pointer.
- */
-
-void
-mxmlAdd(mxml_node_t *parent, /* I - Parent node */
- int where, /* I - Where to add, MXML_ADD_BEFORE or MXML_ADD_AFTER */
- mxml_node_t *child, /* I - Child node for where or MXML_ADD_TO_PARENT */
- mxml_node_t *node) /* I - Node to add */
-{
-#ifdef DEBUG
- fprintf(stderr, "mxmlAdd(parent=%p, where=%d, child=%p, node=%p)\n", parent,
- where, child, node);
-#endif /* DEBUG */
-
- /*
- * Range check input...
- */
-
- if (!parent || !node)
- return;
-
-#if DEBUG > 1
- fprintf(stderr, " BEFORE: node->parent=%p\n", node->parent);
- if (parent)
- {
- fprintf(stderr, " BEFORE: parent->child=%p\n", parent->child);
- fprintf(stderr, " BEFORE: parent->last_child=%p\n", parent->last_child);
- fprintf(stderr, " BEFORE: parent->prev=%p\n", parent->prev);
- fprintf(stderr, " BEFORE: parent->next=%p\n", parent->next);
- }
-#endif /* DEBUG > 1 */
-
- /*
- * Remove the node from any existing parent...
- */
-
- if (node->parent)
- mxmlRemove(node);
-
- /*
- * Reset pointers...
- */
-
- node->parent = parent;
-
- switch (where)
- {
- case MXML_ADD_BEFORE :
- if (!child || child == parent->child || child->parent != parent)
- {
- /*
- * Insert as first node under parent...
- */
-
- node->next = parent->child;
-
- if (parent->child)
- parent->child->prev = node;
- else
- parent->last_child = node;
-
- parent->child = node;
- }
- else
- {
- /*
- * Insert node before this child...
- */
-
- node->next = child;
- node->prev = child->prev;
-
- if (child->prev)
- child->prev->next = node;
- else
- parent->child = node;
-
- child->prev = node;
- }
- break;
-
- case MXML_ADD_AFTER :
- if (!child || child == parent->last_child || child->parent != parent)
- {
- /*
- * Insert as last node under parent...
- */
-
- node->parent = parent;
- node->prev = parent->last_child;
-
- if (parent->last_child)
- parent->last_child->next = node;
- else
- parent->child = node;
-
- parent->last_child = node;
- }
- else
- {
- /*
- * Insert node after this child...
- */
-
- node->prev = child;
- node->next = child->next;
-
- if (child->next)
- child->next->prev = node;
- else
- parent->last_child = node;
-
- child->next = node;
- }
- break;
- }
-
-#if DEBUG > 1
- fprintf(stderr, " AFTER: node->parent=%p\n", node->parent);
- if (parent)
- {
- fprintf(stderr, " AFTER: parent->child=%p\n", parent->child);
- fprintf(stderr, " AFTER: parent->last_child=%p\n", parent->last_child);
- fprintf(stderr, " AFTER: parent->prev=%p\n", parent->prev);
- fprintf(stderr, " AFTER: parent->next=%p\n", parent->next);
- }
-#endif /* DEBUG > 1 */
-}
-
-
-/*
- * 'mxmlDelete()' - Delete a node and all of its children.
- *
- * If the specified node has a parent, this function first removes the
- * node from its parent using the mxmlRemove() function.
- */
-
-void
-mxmlDelete(mxml_node_t *node) /* I - Node to delete */
-{
- int i; /* Looping var */
-
-
-#ifdef DEBUG
- fprintf(stderr, "mxmlDelete(node=%p)\n", node);
-#endif /* DEBUG */
-
- /*
- * Range check input...
- */
-
- if (!node)
- return;
-
- /*
- * Remove the node from its parent, if any...
- */
-
- mxmlRemove(node);
-
- /*
- * Delete children...
- */
-
- while (node->child)
- mxmlDelete(node->child);
-
- /*
- * Now delete any node data...
- */
-
- switch (node->type)
- {
- case MXML_ELEMENT :
- if (node->value.element.name)
- free(node->value.element.name);
-
- if (node->value.element.num_attrs)
- {
- for (i = 0; i < node->value.element.num_attrs; i ++)
- {
- if (node->value.element.attrs[i].name)
- free(node->value.element.attrs[i].name);
- if (node->value.element.attrs[i].value)
- free(node->value.element.attrs[i].value);
- }
-
- free(node->value.element.attrs);
- }
- break;
- case MXML_INTEGER :
- /* Nothing to do */
- break;
- case MXML_OPAQUE :
- if (node->value.opaque)
- free(node->value.opaque);
- break;
- case MXML_REAL :
- /* Nothing to do */
- break;
- case MXML_TEXT :
- if (node->value.text.string)
- free(node->value.text.string);
- break;
- case MXML_CUSTOM :
- if (node->value.custom.data &&
- node->value.custom.destroy)
- (*(node->value.custom.destroy))(node->value.custom.data);
- break;
- default :
- break;
- }
-
- /*
- * Free this node...
- */
-
- free(node);
-}
-
-
-/*
- * 'mxmlGetRefCount()' - Get the current reference (use) count for a node.
- *
- * The initial reference count of new nodes is 1. Use the @link mxmlRetain@
- * and @link mxmlRelease@ functions to increment and decrement a node's
- * reference count.
- *
- * @since Mini-XML 2.7@.
- */
-
-int /* O - Reference count */
-mxmlGetRefCount(mxml_node_t *node) /* I - Node */
-{
- /*
- * Range check input...
- */
-
- if (!node)
- return (0);
-
- /*
- * Return the reference count...
- */
-
- return (node->ref_count);
-}
-
-
-/*
- * 'mxmlNewCDATA()' - Create a new CDATA node.
- *
- * The new CDATA node is added to the end of the specified parent's child
- * list. The constant MXML_NO_PARENT can be used to specify that the new
- * CDATA node has no parent. The data string must be nul-terminated and
- * is copied into the new node. CDATA nodes use the MXML_ELEMENT type.
- *
- * @since Mini-XML 2.3@
- */
-
-mxml_node_t * /* O - New node */
-mxmlNewCDATA(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
- const char *data) /* I - Data string */
-{
- mxml_node_t *node; /* New node */
-
-
-#ifdef DEBUG
- fprintf(stderr, "mxmlNewCDATA(parent=%p, data=\"%s\")\n",
- parent, data ? data : "(null)");
-#endif /* DEBUG */
-
- /*
- * Range check input...
- */
-
- if (!data)
- return (NULL);
-
- /*
- * Create the node and set the name value...
- */
-
- if ((node = mxml_new(parent, MXML_ELEMENT)) != NULL)
- node->value.element.name = _mxml_strdupf("![CDATA[%s]]", data);
-
- return (node);
-}
-
-
-/*
- * 'mxmlNewCustom()' - Create a new custom data node.
- *
- * The new custom node is added to the end of the specified parent's child
- * list. The constant MXML_NO_PARENT can be used to specify that the new
- * element node has no parent. NULL can be passed when the data in the
- * node is not dynamically allocated or is separately managed.
- *
- * @since Mini-XML 2.1@
- */
-
-mxml_node_t * /* O - New node */
-mxmlNewCustom(
- mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
- void *data, /* I - Pointer to data */
- mxml_custom_destroy_cb_t destroy) /* I - Function to destroy data */
-{
- mxml_node_t *node; /* New node */
-
-
-#ifdef DEBUG
- fprintf(stderr, "mxmlNewCustom(parent=%p, data=%p, destroy=%p)\n", parent,
- data, destroy);
-#endif /* DEBUG */
-
- /*
- * Create the node and set the value...
- */
-
- if ((node = mxml_new(parent, MXML_CUSTOM)) != NULL)
- {
- node->value.custom.data = data;
- node->value.custom.destroy = destroy;
- }
-
- return (node);
-}
-
-
-/*
- * 'mxmlNewElement()' - Create a new element node.
- *
- * The new element node is added to the end of the specified parent's child
- * list. The constant MXML_NO_PARENT can be used to specify that the new
- * element node has no parent.
- */
-
-mxml_node_t * /* O - New node */
-mxmlNewElement(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
- const char *name) /* I - Name of element */
-{
- mxml_node_t *node; /* New node */
-
-
-#ifdef DEBUG
- fprintf(stderr, "mxmlNewElement(parent=%p, name=\"%s\")\n", parent,
- name ? name : "(null)");
-#endif /* DEBUG */
-
- /*
- * Range check input...
- */
-
- if (!name)
- return (NULL);
-
- /*
- * Create the node and set the element name...
- */
-
- if ((node = mxml_new(parent, MXML_ELEMENT)) != NULL)
- node->value.element.name = strdup(name);
-
- return (node);
-}
-
-
-/*
- * 'mxmlNewInteger()' - Create a new integer node.
- *
- * The new integer node is added to the end of the specified parent's child
- * list. The constant MXML_NO_PARENT can be used to specify that the new
- * integer node has no parent.
- */
-
-mxml_node_t * /* O - New node */
-mxmlNewInteger(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
- int integer) /* I - Integer value */
-{
- mxml_node_t *node; /* New node */
-
-
-#ifdef DEBUG
- fprintf(stderr, "mxmlNewInteger(parent=%p, integer=%d)\n", parent, integer);
-#endif /* DEBUG */
-
- /*
- * Create the node and set the element name...
- */
-
- if ((node = mxml_new(parent, MXML_INTEGER)) != NULL)
- node->value.integer = integer;
-
- return (node);
-}
-
-
-/*
- * 'mxmlNewOpaque()' - Create a new opaque string.
- *
- * The new opaque node is added to the end of the specified parent's child
- * list. The constant MXML_NO_PARENT can be used to specify that the new
- * opaque node has no parent. The opaque string must be nul-terminated and
- * is copied into the new node.
- */
-
-mxml_node_t * /* O - New node */
-mxmlNewOpaque(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
- const char *opaque) /* I - Opaque string */
-{
- mxml_node_t *node; /* New node */
-
-
-#ifdef DEBUG
- fprintf(stderr, "mxmlNewOpaque(parent=%p, opaque=\"%s\")\n", parent,
- opaque ? opaque : "(null)");
-#endif /* DEBUG */
-
- /*
- * Range check input...
- */
-
- if (!opaque)
- return (NULL);
-
- /*
- * Create the node and set the element name...
- */
-
- if ((node = mxml_new(parent, MXML_OPAQUE)) != NULL)
- node->value.opaque = strdup(opaque);
-
- return (node);
-}
-
-
-/*
- * 'mxmlNewReal()' - Create a new real number node.
- *
- * The new real number node is added to the end of the specified parent's
- * child list. The constant MXML_NO_PARENT can be used to specify that
- * the new real number node has no parent.
- */
-
-mxml_node_t * /* O - New node */
-mxmlNewReal(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
- double real) /* I - Real number value */
-{
- mxml_node_t *node; /* New node */
-
-
-#ifdef DEBUG
- fprintf(stderr, "mxmlNewReal(parent=%p, real=%g)\n", parent, real);
-#endif /* DEBUG */
-
- /*
- * Create the node and set the element name...
- */
-
- if ((node = mxml_new(parent, MXML_REAL)) != NULL)
- node->value.real = real;
-
- return (node);
-}
-
-
-/*
- * 'mxmlNewText()' - Create a new text fragment node.
- *
- * The new text node is added to the end of the specified parent's child
- * list. The constant MXML_NO_PARENT can be used to specify that the new
- * text node has no parent. The whitespace parameter is used to specify
- * whether leading whitespace is present before the node. The text
- * string must be nul-terminated and is copied into the new node.
- */
-
-mxml_node_t * /* O - New node */
-mxmlNewText(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
- int whitespace, /* I - 1 = leading whitespace, 0 = no whitespace */
- const char *string) /* I - String */
-{
- mxml_node_t *node; /* New node */
-
-
-#ifdef DEBUG
- fprintf(stderr, "mxmlNewText(parent=%p, whitespace=%d, string=\"%s\")\n",
- parent, whitespace, string ? string : "(null)");
-#endif /* DEBUG */
-
- /*
- * Range check input...
- */
-
- if (!string)
- return (NULL);
-
- /*
- * Create the node and set the text value...
- */
-
- if ((node = mxml_new(parent, MXML_TEXT)) != NULL)
- {
- node->value.text.whitespace = whitespace;
- node->value.text.string = strdup(string);
- }
-
- return (node);
-}
-
-
-/*
- * 'mxmlNewTextf()' - Create a new formatted text fragment node.
- *
- * The new text node is added to the end of the specified parent's child
- * list. The constant MXML_NO_PARENT can be used to specify that the new
- * text node has no parent. The whitespace parameter is used to specify
- * whether leading whitespace is present before the node. The format
- * string must be nul-terminated and is formatted into the new node.
- */
-
-mxml_node_t * /* O - New node */
-mxmlNewTextf(mxml_node_t *parent, /* I - Parent node or MXML_NO_PARENT */
- int whitespace, /* I - 1 = leading whitespace, 0 = no whitespace */
- const char *format, /* I - Printf-style frmat string */
- ...) /* I - Additional args as needed */
-{
- mxml_node_t *node; /* New node */
- va_list ap; /* Pointer to arguments */
-
-
-#ifdef DEBUG
- fprintf(stderr, "mxmlNewTextf(parent=%p, whitespace=%d, format=\"%s\", ...)\n",
- parent, whitespace, format ? format : "(null)");
-#endif /* DEBUG */
-
- /*
- * Range check input...
- */
-
- if (!format)
- return (NULL);
-
- /*
- * Create the node and set the text value...
- */
-
- if ((node = mxml_new(parent, MXML_TEXT)) != NULL)
- {
- va_start(ap, format);
-
- node->value.text.whitespace = whitespace;
- node->value.text.string = _mxml_vstrdupf(format, ap);
-
- va_end(ap);
- }
-
- return (node);
-}
-
-
-/*
- * 'mxmlRemove()' - Remove a node from its parent.
- *
- * Does not free memory used by the node - use mxmlDelete() for that.
- * This function does nothing if the node has no parent.
- */
-
-void
-mxmlRemove(mxml_node_t *node) /* I - Node to remove */
-{
-#ifdef DEBUG
- fprintf(stderr, "mxmlRemove(node=%p)\n", node);
-#endif /* DEBUG */
-
- /*
- * Range check input...
- */
-
- if (!node || !node->parent)
- return;
-
- /*
- * Remove from parent...
- */
-
-#if DEBUG > 1
- fprintf(stderr, " BEFORE: node->parent=%p\n", node->parent);
- if (node->parent)
- {
- fprintf(stderr, " BEFORE: node->parent->child=%p\n", node->parent->child);
- fprintf(stderr, " BEFORE: node->parent->last_child=%p\n", node->parent->last_child);
- }
- fprintf(stderr, " BEFORE: node->child=%p\n", node->child);
- fprintf(stderr, " BEFORE: node->last_child=%p\n", node->last_child);
- fprintf(stderr, " BEFORE: node->prev=%p\n", node->prev);
- fprintf(stderr, " BEFORE: node->next=%p\n", node->next);
-#endif /* DEBUG > 1 */
-
- if (node->prev)
- node->prev->next = node->next;
- else
- node->parent->child = node->next;
-
- if (node->next)
- node->next->prev = node->prev;
- else
- node->parent->last_child = node->prev;
-
- node->parent = NULL;
- node->prev = NULL;
- node->next = NULL;
-
-#if DEBUG > 1
- fprintf(stderr, " AFTER: node->parent=%p\n", node->parent);
- if (node->parent)
- {
- fprintf(stderr, " AFTER: node->parent->child=%p\n", node->parent->child);
- fprintf(stderr, " AFTER: node->parent->last_child=%p\n", node->parent->last_child);
- }
- fprintf(stderr, " AFTER: node->child=%p\n", node->child);
- fprintf(stderr, " AFTER: node->last_child=%p\n", node->last_child);
- fprintf(stderr, " AFTER: node->prev=%p\n", node->prev);
- fprintf(stderr, " AFTER: node->next=%p\n", node->next);
-#endif /* DEBUG > 1 */
-}
-
-
-/*
- * 'mxmlNewXML()' - Create a new XML document tree.
- *
- * The "version" argument specifies the version number to put in the
- * ?xml element node. If NULL, version 1.0 is assumed.
- *
- * @since Mini-XML 2.3@
- */
-
-mxml_node_t * /* O - New ?xml node */
-mxmlNewXML(const char *version) /* I - Version number to use */
-{
- char element[1024]; /* Element text */
-
-
- snprintf(element, sizeof(element), "?xml version=\"%s\" encoding=\"utf-8\"?",
- version ? version : "1.0");
-
- return (mxmlNewElement(NULL, element));
-}
-
-
-/*
- * 'mxmlRelease()' - Release a node.
- *
- * When the reference count reaches zero, the node (and any children)
- * is deleted via mxmlDelete().
- *
- * @since Mini-XML 2.3@
- */
-
-int /* O - New reference count */
-mxmlRelease(mxml_node_t *node) /* I - Node */
-{
- if (node)
- {
- if ((-- node->ref_count) <= 0)
- {
- mxmlDelete(node);
- return (0);
- }
- else
- return (node->ref_count);
- }
- else
- return (-1);
-}
-
-
-/*
- * 'mxmlRetain()' - Retain a node.
- *
- * @since Mini-XML 2.3@
- */
-
-int /* O - New reference count */
-mxmlRetain(mxml_node_t *node) /* I - Node */
-{
- if (node)
- return (++ node->ref_count);
- else
- return (-1);
-}
-
-
-/*
- * 'mxml_new()' - Create a new node.
- */
-
-static mxml_node_t * /* O - New node */
-mxml_new(mxml_node_t *parent, /* I - Parent node */
- mxml_type_t type) /* I - Node type */
-{
- mxml_node_t *node; /* New node */
-
-
-#if DEBUG > 1
- fprintf(stderr, "mxml_new(parent=%p, type=%d)\n", parent, type);
-#endif /* DEBUG > 1 */
-
- /*
- * Allocate memory for the node...
- */
-
- if ((node = calloc(1, sizeof(mxml_node_t))) == NULL)
- {
-#if DEBUG > 1
- fputs(" returning NULL\n", stderr);
-#endif /* DEBUG > 1 */
-
- return (NULL);
- }
-
-#if DEBUG > 1
- fprintf(stderr, " returning %p\n", node);
-#endif /* DEBUG > 1 */
-
- /*
- * Set the node type...
- */
-
- node->type = type;
- node->ref_count = 1;
-
- /*
- * Add to the parent if present...
- */
-
- if (parent)
- mxmlAdd(parent, MXML_ADD_AFTER, MXML_ADD_TO_PARENT, node);
-
- /*
- * Return the new node...
- */
-
- return (node);
-}
-
-
-/*
- * End of "$Id: mxml-node.c 436 2011-01-22 01:02:05Z mike $".
- */