⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mxml-attr.c

📁 asterisk 是一个很有知名度开源软件
💻 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. */voidmxmlElementSetAttr(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 $". */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -