a885b2c253
Menuselect was originally included in the DAHDI-Tools repository with an svn external. Since git does not handle externals so well, menuselect is being brought into the tree directly. This allows menuselect to be present for all the commits on the 2.4, 2.5, and 2.6 releases. The command is: $ svn export http://svn.asterisk.org/svn/menuselect/trunk menuselect Signed-off-by: Shaun Ruffell <sruffell@digium.com>
182 lines
4.2 KiB
C
182 lines
4.2 KiB
C
/*
|
|
* "$Id: mxml-attr.c 22267 2006-04-24 17:11:45Z kpfleming $"
|
|
*
|
|
* Attribute support code for Mini-XML, a small XML-like file parsing library.
|
|
*
|
|
* Copyright 2003-2005 by Michael Sweet.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* Contents:
|
|
*
|
|
* mxmlElementGetAttr() - Get an attribute.
|
|
* mxmlElementSetAttr() - Set an attribute.
|
|
*/
|
|
|
|
/*
|
|
* Include necessary headers...
|
|
*/
|
|
|
|
#include "config.h"
|
|
#include "mxml.h"
|
|
|
|
|
|
/*
|
|
* 'mxmlElementGetAttr()' - Get an attribute.
|
|
*
|
|
* This function returns NULL if the node is not an element or the
|
|
* named attribute does not exist.
|
|
*/
|
|
|
|
const char * /* O - Attribute value or NULL */
|
|
mxmlElementGetAttr(mxml_node_t *node, /* I - Element node */
|
|
const char *name) /* I - Name of attribute */
|
|
{
|
|
int i; /* Looping var */
|
|
mxml_attr_t *attr; /* Cirrent attribute */
|
|
|
|
|
|
#ifdef DEBUG
|
|
fprintf(stderr, "mxmlElementGetAttr(node=%p, name=\"%s\")\n",
|
|
node, name ? name : "(null)");
|
|
#endif /* DEBUG */
|
|
|
|
/*
|
|
* Range check input...
|
|
*/
|
|
|
|
if (!node || node->type != MXML_ELEMENT || !name)
|
|
return (NULL);
|
|
|
|
/*
|
|
* Look for the attribute...
|
|
*/
|
|
|
|
for (i = node->value.element.num_attrs, attr = node->value.element.attrs;
|
|
i > 0;
|
|
i --, attr ++)
|
|
if (!strcmp(attr->name, name))
|
|
return (attr->value);
|
|
|
|
/*
|
|
* Didn't find attribute, so return NULL...
|
|
*/
|
|
|
|
return (NULL);
|
|
}
|
|
|
|
|
|
/*
|
|
* 'mxmlElementSetAttr()' - Set an attribute.
|
|
*
|
|
* If the named attribute already exists, the value of the attribute
|
|
* is replaced by the new string value. The string value is copied
|
|
* into the element node. This function does nothing if the node is
|
|
* not an element.
|
|
*/
|
|
|
|
void
|
|
mxmlElementSetAttr(mxml_node_t *node, /* I - Element node */
|
|
const char *name, /* I - Name of attribute */
|
|
const char *value) /* I - Attribute value */
|
|
{
|
|
int i; /* Looping var */
|
|
mxml_attr_t *attr; /* New attribute */
|
|
|
|
|
|
#ifdef DEBUG
|
|
fprintf(stderr, "mxmlElementSetAttr(node=%p, name=\"%s\", value=\"%s\")\n",
|
|
node, name ? name : "(null)", value ? value : "(null)");
|
|
#endif /* DEBUG */
|
|
|
|
/*
|
|
* Range check input...
|
|
*/
|
|
|
|
if (!node || node->type != MXML_ELEMENT || !name)
|
|
return;
|
|
|
|
/*
|
|
* Look for the attribute...
|
|
*/
|
|
|
|
for (i = node->value.element.num_attrs, attr = node->value.element.attrs;
|
|
i > 0;
|
|
i --, attr ++)
|
|
if (!strcmp(attr->name, name))
|
|
{
|
|
/*
|
|
* Replace the attribute value and return...
|
|
*/
|
|
|
|
if (attr->value)
|
|
free(attr->value);
|
|
|
|
if (value)
|
|
{
|
|
if ((attr->value = strdup(value)) == NULL)
|
|
mxml_error("Unable to allocate memory for attribute '%s' in element %s!",
|
|
name, node->value.element.name);
|
|
}
|
|
else
|
|
attr->value = NULL;
|
|
|
|
return;
|
|
}
|
|
|
|
/*
|
|
* Attribute not found, so add a new one...
|
|
*/
|
|
|
|
if (node->value.element.num_attrs == 0)
|
|
attr = malloc(sizeof(mxml_attr_t));
|
|
else
|
|
attr = realloc(node->value.element.attrs,
|
|
(node->value.element.num_attrs + 1) * sizeof(mxml_attr_t));
|
|
|
|
if (!attr)
|
|
{
|
|
mxml_error("Unable to allocate memory for attribute '%s' in element %s!",
|
|
name, node->value.element.name);
|
|
return;
|
|
}
|
|
|
|
node->value.element.attrs = attr;
|
|
attr += node->value.element.num_attrs;
|
|
|
|
attr->name = strdup(name);
|
|
if (value)
|
|
attr->value = strdup(value);
|
|
else
|
|
attr->value = NULL;
|
|
|
|
if (!attr->name || (!attr->value && value))
|
|
{
|
|
if (attr->name)
|
|
free(attr->name);
|
|
|
|
if (attr->value)
|
|
free(attr->value);
|
|
|
|
mxml_error("Unable to allocate memory for attribute '%s' in element %s!",
|
|
name, node->value.element.name);
|
|
|
|
return;
|
|
}
|
|
|
|
node->value.element.num_attrs ++;
|
|
}
|
|
|
|
|
|
/*
|
|
* End of "$Id: mxml-attr.c 22267 2006-04-24 17:11:45Z kpfleming $".
|
|
*/
|