Page Menu
Home
ClusterLabs Projects
Search
Configure Global Search
Log In
Files
F4624351
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/include/crm/common/xml.h b/include/crm/common/xml.h
index 3ae3a50746..4f80e0d226 100644
--- a/include/crm/common/xml.h
+++ b/include/crm/common/xml.h
@@ -1,208 +1,202 @@
-/* $Id: xml.h,v 1.6 2004/09/15 20:19:23 andrew Exp $ */
+/* $Id: xml.h,v 1.7 2004/09/20 12:16:35 andrew Exp $ */
/*
* Copyright (C) 2004 Andrew Beekhof <andrew@beekhof.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This software 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.
*
* You should have received a copy of the GNU General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef CRM_COMMON_XML__H
#define CRM_COMMON_XML__H
#include <portability.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <clplumbing/cl_log.h>
#include <libxml/tree.h>
/*
* Replacement function for xmlCopyPropList which at the very least,
* doesnt work the way *I* would expect it to.
*
* Copy all the attributes/properties from src into target.
*
* Not recursive, does not return anything.
*
*/
extern void copy_in_properties(xmlNodePtr target, xmlNodePtr src);
/*
* Find a child named search_path[i] at level i in the XML fragment where i=0
* is an immediate child of <i>root</i>.
*
* Terminate with success if i == len, or search_path[i] == NULL.
*
* On success, returns the sub-fragment described by search_path.
* On failure, returns NULL.
*/
extern xmlNodePtr find_xml_node_nested(
xmlNodePtr root, const char **search_path, int len);
/*
* Find a child named search_path[i] at level i in the XML fragment where i=0
* is an immediate child of <i>root</i>.
*
* Once the last child specified by node_path is found, find the value
* of attr_name.
*
* If <i>error<i> is set to TRUE, then it is an error for the attribute not
* to be found and the function will log accordingly.
*
* On success, returns the value of attr_name.
* On failure, returns NULL.
*/
extern const char *get_xml_attr_nested(xmlNodePtr parent,
const char **node_path, int length,
const char *attr_name, gboolean error);
/*
* Free the XML "stuff" associated with a_node
*
* If a_node is part of a document, free the whole thing
*
* Otherwise, unlink it from its current location and free everything
* from there down.
*
* Wont barf on NULL.
*
*/
extern void free_xml(xmlNodePtr a_node);
/*
* Create a node named "name" as a child of "parent"
* If parent is NULL, creates an unconnected node.
*
* Returns the created node
*
*/
extern xmlNodePtr create_xml_node(xmlNodePtr parent, const char *name);
/*
* Make a copy of name and value and use the copied memory to create
* an attribute for node.
*
* If node, name or value are NULL, nothing is done.
*
* If name or value are an empty string, nothing is done.
*
* Returns NULL on failure and the attribute created on success.
*
*/
extern xmlAttrPtr set_xml_property_copy(xmlNodePtr node,
const xmlChar *name,
const xmlChar *value);
/*
* Unlink the node and set its doc pointer to NULL so free_xml()
* will act appropriately
*/
extern void unlink_xml_node(xmlNodePtr node);
/*
* Set a timestamp attribute on a_node
*/
extern void set_node_tstamp(xmlNodePtr a_node);
/*
* Returns a deep copy of src_node
*
* Either calls xmlCopyNode() or a home grown alternative (based on
* XML_TRACE being defined) that does more logging...
* helpful when part of the XML document has been freed :)
*/
extern xmlNodePtr copy_xml_node_recursive(xmlNodePtr src_node);
/*
* Add a copy of xml_node to new_parent
*/
extern xmlNodePtr add_node_copy(xmlNodePtr new_parent, xmlNodePtr xml_node);
/*
* Read in the contents of a pre-opened file descriptor (until EOF) and
* produce an XML fragment (it will have an attached document).
*
* input will need to be closed on completion.
*
* Whitespace between tags is discarded.
*
*/
extern xmlNodePtr file2xml(FILE *input);
/*
* Read in the contents of a string and produce an XML fragment (it will
* have an attached document).
*
* input will need to be freed on completion.
*
* Whitespace between tags is discarded.
*
*/
extern xmlNodePtr string2xml(const char *input);
/* convience "wrapper" functions */
extern xmlNodePtr find_xml_node(xmlNodePtr cib, const char * node_path);
extern xmlNodePtr find_entity(xmlNodePtr parent,
const char *node_name,
const char *id,
gboolean siblings);
extern const char *get_xml_attr(xmlNodePtr parent,
const char *node_name, const char *attr_name,
gboolean error);
extern xmlNodePtr set_xml_attr(xmlNodePtr parent,
const char *node_name,
const char *attr_name,
const char *attr_value,
gboolean create);
extern int write_xml_file(xmlNodePtr xml_node, const char *filename);
extern char *dump_xml_formatted(xmlNodePtr msg);
extern char *dump_xml_unformatted(xmlNodePtr msg);
extern void print_xml_formatted(int log_level, const char *function, xmlNodePtr an_xml_node, const char *text);
#define xml_child_iter(a,b,c,d) if(a != NULL) { \
- xmlNodePtr b = a->children; \
- while(b != NULL) { \
+ xmlNodePtr b = NULL; \
+ xmlNodePtr __crm_xml_iter = a->children; \
+ while(__crm_xml_iter != NULL) { \
+ b = __crm_xml_iter; \
+ __crm_xml_iter = __crm_xml_iter->next; \
if(c == NULL || safe_str_eq(c, b->name)) { \
d; \
} else { \
crm_trace("Skipping <%s../>", b->name); \
} \
- b=b->next; \
} \
} else { \
crm_trace("Parent of loop was NULL"); \
}
-/* } else { \ */
-/* crm_debug("Ignoring node %s (filter %s)", \ */
-/* b->name, (const char*)c); \ */
-
-
-/* make sure the looop progresses before continuing */
-#define xml_iter_continue(a) a=a->next; continue
-
#endif
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Tue, Jul 8, 6:16 PM (12 h, 11 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2002549
Default Alt Text
(6 KB)
Attached To
Mode
rP Pacemaker
Attached
Detach File
Event Timeline
Log In to Comment