Asterisk-1.4.4最新内核源代码

源代码在线查看: mxml-attr.c

软件大小: 17003 K
上传用户: wlflove123
关键词: Asterisk 内核 源代码
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*				 * "$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 $".				 */							

相关资源