pacemaker  2.1.9-49aab99839
Scalable High-Availability cluster resource manager
Data Structures | Macros | Typedefs | Enumerations | Functions
crmcommon_private.h File Reference
#include <stdint.h>
#include <stdbool.h>
#include <sys/types.h>
#include <glib.h>
#include <libxml/tree.h>
#include <qb/qbipcc.h>
Include dependency graph for crmcommon_private.h:

Go to the source code of this file.

Data Structures

struct  pcmk__deleted_xml_s
 
struct  xml_node_private_s
 
struct  xml_doc_private_s
 
struct  pcmk__ipc_methods_s
 
struct  pcmk_ipc_api_s
 
struct  pcmk__ipc_header_s
 
struct  pcmk__schema_version_t
 
struct  pcmk__schema_t
 

Macros

#define PCMK__BUFFER_SIZE   4096
 
#define PCMK__XML_DOC_PRIVATE_MAGIC   0x81726354UL
 
#define PCMK__XML_NODE_PRIVATE_MAGIC   0x54637281UL
 
#define PCMK__XML_ENTITY_AMP   "&amp;"
 
#define PCMK__XML_ENTITY_GT   "&gt;"
 
#define PCMK__XML_ENTITY_LT   "&lt;"
 
#define PCMK__XML_ENTITY_QUOT   "&quot;"
 
#define pcmk__set_xml_flags(xml_priv, flags_to_set)
 
#define pcmk__clear_xml_flags(xml_priv, flags_to_clear)
 
#define PCMK__IPC_VERSION   1
 
#define PCMK__CONTROLD_API_MAJOR   "1"
 
#define PCMK__CONTROLD_API_MINOR   "0"
 
#define PCMK__XML_PREFIX_CREATED   "++"
 XML is newly created. More...
 
#define PCMK__XML_PREFIX_DELETED   "--"
 XML has been deleted. More...
 
#define PCMK__XML_PREFIX_MODIFIED   "+ "
 XML has been modified. More...
 
#define PCMK__XML_PREFIX_MOVED   "+~"
 XML has been moved. More...
 
#define PCMK__PW_BUFFER_LEN   500
 

Typedefs

typedef struct pcmk__deleted_xml_s pcmk__deleted_xml_t
 
typedef struct xml_node_private_s xml_node_private_t
 
typedef struct xml_doc_private_s xml_doc_private_t
 
typedef struct pcmk__ipc_methods_s pcmk__ipc_methods_t
 
typedef struct pcmk__ipc_header_s pcmk__ipc_header_t
 

Enumerations

enum  pcmk__time_component {
  pcmk__time_unknown, pcmk__time_years, pcmk__time_months, pcmk__time_weeks,
  pcmk__time_days, pcmk__time_hours, pcmk__time_minutes, pcmk__time_seconds
}
 
enum  pcmk__comparison {
  pcmk__comparison_unknown, pcmk__comparison_defined, pcmk__comparison_undefined, pcmk__comparison_eq,
  pcmk__comparison_ne, pcmk__comparison_lt, pcmk__comparison_lte, pcmk__comparison_gt,
  pcmk__comparison_gte
}
 
enum  pcmk__type {
  pcmk__type_unknown, pcmk__type_string, pcmk__type_integer, pcmk__type_number,
  pcmk__type_version
}
 
enum  pcmk__reference_source { pcmk__source_unknown, pcmk__source_literal, pcmk__source_instance_attrs, pcmk__source_meta_attrs }
 
enum  pcmk__schema_validator { pcmk__schema_validator_none, pcmk__schema_validator_rng }
 

Functions

G_GNUC_INTERNAL void pcmk__xml_set_parent_flags (xmlNode *xml, uint64_t flags)
 
G_GNUC_INTERNAL void pcmk__xml_new_private_data (xmlNode *xml)
 
G_GNUC_INTERNAL void pcmk__xml_free_private_data (xmlNode *xml)
 
G_GNUC_INTERNAL xmlDoc * pcmk__xml_new_doc (void)
 
G_GNUC_INTERNAL bool pcmk__tracking_xml_changes (xmlNode *xml, bool lazy)
 
G_GNUC_INTERNAL int pcmk__xml_position (const xmlNode *xml, enum xml_private_flags ignore_if_set)
 
G_GNUC_INTERNAL xmlNode * pcmk__xml_match (const xmlNode *haystack, const xmlNode *needle, bool exact)
 
G_GNUC_INTERNAL void pcmk__xml_update (xmlNode *parent, xmlNode *target, xmlNode *update, uint32_t flags, bool as_diff)
 
G_GNUC_INTERNAL xmlNode * pcmk__xc_match (const xmlNode *root, const xmlNode *search_comment, bool exact)
 
G_GNUC_INTERNAL void pcmk__xc_update (xmlNode *parent, xmlNode *target, xmlNode *update)
 
G_GNUC_INTERNAL void pcmk__free_acls (GList *acls)
 
G_GNUC_INTERNAL void pcmk__unpack_acl (xmlNode *source, xmlNode *target, const char *user)
 
G_GNUC_INTERNAL bool pcmk__is_user_in_group (const char *user, const char *group)
 
G_GNUC_INTERNAL void pcmk__apply_acl (xmlNode *xml)
 
G_GNUC_INTERNAL void pcmk__apply_creation_acl (xmlNode *xml, bool check_top)
 
G_GNUC_INTERNAL xmlAttr * pcmk__xe_set_attr_force (xmlNode *node, const char *name, const char *value)
 
G_GNUC_INTERNAL int pcmk__xa_remove (xmlAttr *attr, bool force)
 
G_GNUC_INTERNAL void pcmk__mark_xml_attr_dirty (xmlAttr *a)
 
G_GNUC_INTERNAL bool pcmk__xa_filterable (const char *name)
 
G_GNUC_INTERNAL void pcmk__log_xmllib_err (void *ctx, const char *fmt,...) G_GNUC_PRINTF(2
 
G_GNUC_INTERNAL void G_GNUC_INTERNAL void pcmk__mark_xml_node_dirty (xmlNode *xml)
 
G_GNUC_INTERNAL bool pcmk__marked_as_deleted (xmlAttrPtr a, void *user_data)
 
G_GNUC_INTERNAL void pcmk__dump_xml_attr (const xmlAttr *attr, GString *buffer)
 
G_GNUC_INTERNAL int pcmk__xe_set_score (xmlNode *target, const char *name, const char *value)
 
G_GNUC_INTERNAL const char * pcmk__time_component_attr (enum pcmk__time_component component)
 
G_GNUC_INTERNAL int pcmk__add_time_from_xml (crm_time_t *t, enum pcmk__time_component component, const xmlNode *xml)
 
G_GNUC_INTERNAL void pcmk__set_time_if_earlier (crm_time_t *target, const crm_time_t *source)
 
G_GNUC_INTERNAL int pcmk__send_ipc_request (pcmk_ipc_api_t *api, const xmlNode *request)
 
G_GNUC_INTERNAL void pcmk__call_ipc_callback (pcmk_ipc_api_t *api, enum pcmk_ipc_event event_type, crm_exit_t status, void *event_data)
 
G_GNUC_INTERNAL unsigned int pcmk__ipc_buffer_size (unsigned int max)
 
G_GNUC_INTERNAL bool pcmk__valid_ipc_header (const pcmk__ipc_header_t *header)
 
G_GNUC_INTERNAL pcmk__ipc_methods_tpcmk__attrd_api_methods (void)
 
G_GNUC_INTERNAL pcmk__ipc_methods_tpcmk__controld_api_methods (void)
 
G_GNUC_INTERNAL pcmk__ipc_methods_tpcmk__pacemakerd_api_methods (void)
 
G_GNUC_INTERNAL pcmk__ipc_methods_tpcmk__schedulerd_api_methods (void)
 
G_GNUC_INTERNAL int pcmk__bare_output_new (pcmk__output_t **out, const char *fmt_name, const char *filename, char **argv)
 
G_GNUC_INTERNAL void pcmk__register_option_messages (pcmk__output_t *out)
 
G_GNUC_INTERNAL void pcmk__register_patchset_messages (pcmk__output_t *out)
 
G_GNUC_INTERNAL bool pcmk__output_text_get_fancy (pcmk__output_t *out)
 
G_GNUC_INTERNAL enum pcmk__comparison pcmk__parse_comparison (const char *op)
 
G_GNUC_INTERNAL enum pcmk__type pcmk__parse_type (const char *type, enum pcmk__comparison op, const char *value1, const char *value2)
 
G_GNUC_INTERNAL enum pcmk__reference_source pcmk__parse_source (const char *source)
 
G_GNUC_INTERNAL int pcmk__cmp_by_type (const char *value1, const char *value2, enum pcmk__type type)
 
G_GNUC_INTERNAL int pcmk__unpack_duration (const xmlNode *duration, const crm_time_t *start, crm_time_t **end)
 
G_GNUC_INTERNAL int pcmk__evaluate_date_spec (const xmlNode *date_spec, const crm_time_t *now)
 
G_GNUC_INTERNAL int pcmk__evaluate_attr_expression (const xmlNode *expression, const pcmk_rule_input_t *rule_input)
 
G_GNUC_INTERNAL int pcmk__evaluate_rsc_expression (const xmlNode *expr, const pcmk_rule_input_t *rule_input)
 
G_GNUC_INTERNAL int pcmk__evaluate_op_expression (const xmlNode *expr, const pcmk_rule_input_t *rule_input)
 
G_GNUC_INTERNAL GList * pcmk__find_x_0_schema (void)
 

Macro Definition Documentation

◆ PCMK__BUFFER_SIZE

#define PCMK__BUFFER_SIZE   4096

Definition at line 25 of file crmcommon_private.h.

◆ pcmk__clear_xml_flags

#define pcmk__clear_xml_flags (   xml_priv,
  flags_to_clear 
)
Value:
do { \
(xml_priv)->flags = pcmk__clear_flags_as(__func__, __LINE__, \
LOG_NEVER, "XML", "XML node", (xml_priv)->flags, \
(flags_to_clear), #flags_to_clear); \
} while (0)
#define LOG_NEVER
Definition: logging.h:48
uint64_t flags
Definition: remote.c:215

Definition at line 69 of file crmcommon_private.h.

◆ PCMK__CONTROLD_API_MAJOR

#define PCMK__CONTROLD_API_MAJOR   "1"

Definition at line 186 of file crmcommon_private.h.

◆ PCMK__CONTROLD_API_MINOR

#define PCMK__CONTROLD_API_MINOR   "0"

Definition at line 187 of file crmcommon_private.h.

◆ PCMK__IPC_VERSION

#define PCMK__IPC_VERSION   1

Definition at line 184 of file crmcommon_private.h.

◆ PCMK__PW_BUFFER_LEN

#define PCMK__PW_BUFFER_LEN   500

Definition at line 408 of file crmcommon_private.h.

◆ pcmk__set_xml_flags

#define pcmk__set_xml_flags (   xml_priv,
  flags_to_set 
)
Value:
do { \
(xml_priv)->flags = pcmk__set_flags_as(__func__, __LINE__, \
LOG_NEVER, "XML", "XML node", (xml_priv)->flags, \
(flags_to_set), #flags_to_set); \
} while (0)
#define LOG_NEVER
Definition: logging.h:48
uint64_t flags
Definition: remote.c:215

Definition at line 63 of file crmcommon_private.h.

◆ PCMK__XML_DOC_PRIVATE_MAGIC

#define PCMK__XML_DOC_PRIVATE_MAGIC   0x81726354UL

Definition at line 54 of file crmcommon_private.h.

◆ PCMK__XML_ENTITY_AMP

#define PCMK__XML_ENTITY_AMP   "&amp;"

Definition at line 58 of file crmcommon_private.h.

◆ PCMK__XML_ENTITY_GT

#define PCMK__XML_ENTITY_GT   "&gt;"

Definition at line 59 of file crmcommon_private.h.

◆ PCMK__XML_ENTITY_LT

#define PCMK__XML_ENTITY_LT   "&lt;"

Definition at line 60 of file crmcommon_private.h.

◆ PCMK__XML_ENTITY_QUOT

#define PCMK__XML_ENTITY_QUOT   "&quot;"

Definition at line 61 of file crmcommon_private.h.

◆ PCMK__XML_NODE_PRIVATE_MAGIC

#define PCMK__XML_NODE_PRIVATE_MAGIC   0x54637281UL

Definition at line 55 of file crmcommon_private.h.

◆ PCMK__XML_PREFIX_CREATED

#define PCMK__XML_PREFIX_CREATED   "++"

XML is newly created.

Definition at line 310 of file crmcommon_private.h.

◆ PCMK__XML_PREFIX_DELETED

#define PCMK__XML_PREFIX_DELETED   "--"

XML has been deleted.

Definition at line 313 of file crmcommon_private.h.

◆ PCMK__XML_PREFIX_MODIFIED

#define PCMK__XML_PREFIX_MODIFIED   "+ "

XML has been modified.

Definition at line 316 of file crmcommon_private.h.

◆ PCMK__XML_PREFIX_MOVED

#define PCMK__XML_PREFIX_MOVED   "+~"

XML has been moved.

Definition at line 319 of file crmcommon_private.h.

Typedef Documentation

◆ pcmk__deleted_xml_t

◆ pcmk__ipc_header_t

◆ pcmk__ipc_methods_t

◆ xml_doc_private_t

◆ xml_node_private_t

Enumeration Type Documentation

◆ pcmk__comparison

Enumerator
pcmk__comparison_unknown 
pcmk__comparison_defined 
pcmk__comparison_undefined 
pcmk__comparison_eq 
pcmk__comparison_ne 
pcmk__comparison_lt 
pcmk__comparison_lte 
pcmk__comparison_gt 
pcmk__comparison_gte 

Definition at line 342 of file crmcommon_private.h.

◆ pcmk__reference_source

Enumerator
pcmk__source_unknown 
pcmk__source_literal 
pcmk__source_instance_attrs 
pcmk__source_meta_attrs 

Definition at line 364 of file crmcommon_private.h.

◆ pcmk__schema_validator

Enumerator
pcmk__schema_validator_none 
pcmk__schema_validator_rng 

Definition at line 418 of file crmcommon_private.h.

◆ pcmk__time_component

Enumerator
pcmk__time_unknown 
pcmk__time_years 
pcmk__time_months 
pcmk__time_weeks 
pcmk__time_days 
pcmk__time_hours 
pcmk__time_minutes 
pcmk__time_seconds 

Definition at line 158 of file crmcommon_private.h.

◆ pcmk__type

enum pcmk__type
Enumerator
pcmk__type_unknown 
pcmk__type_string 
pcmk__type_integer 
pcmk__type_number 
pcmk__type_version 

Definition at line 355 of file crmcommon_private.h.

Function Documentation

◆ pcmk__add_time_from_xml()

G_GNUC_INTERNAL int pcmk__add_time_from_xml ( crm_time_t t,
enum pcmk__time_component  component,
const xmlNode *  xml 
)

Definition at line 1615 of file iso8601.c.

◆ pcmk__apply_acl()

G_GNUC_INTERNAL void pcmk__apply_acl ( xmlNode *  xml)

Definition at line 230 of file acl.c.

◆ pcmk__apply_creation_acl()

G_GNUC_INTERNAL void pcmk__apply_creation_acl ( xmlNode *  xml,
bool  check_top 
)

Definition at line 573 of file acl.c.

◆ pcmk__attrd_api_methods()

G_GNUC_INTERNAL pcmk__ipc_methods_t* pcmk__attrd_api_methods ( void  )

Definition at line 118 of file ipc_attrd.c.

◆ pcmk__bare_output_new()

G_GNUC_INTERNAL int pcmk__bare_output_new ( pcmk__output_t **  out,
const char *  fmt_name,
const char *  filename,
char **  argv 
)

Definition at line 63 of file output.c.

◆ pcmk__call_ipc_callback()

G_GNUC_INTERNAL void pcmk__call_ipc_callback ( pcmk_ipc_api_t api,
enum pcmk_ipc_event  event_type,
crm_exit_t  status,
void *  event_data 
)

Definition at line 150 of file ipc_client.c.

◆ pcmk__cmp_by_type()

G_GNUC_INTERNAL int pcmk__cmp_by_type ( const char *  value1,
const char *  value2,
enum pcmk__type  type 
)

Definition at line 815 of file rules.c.

◆ pcmk__controld_api_methods()

G_GNUC_INTERNAL pcmk__ipc_methods_t* pcmk__controld_api_methods ( void  )

Definition at line 292 of file ipc_controld.c.

◆ pcmk__dump_xml_attr()

G_GNUC_INTERNAL void pcmk__dump_xml_attr ( const xmlAttr *  attr,
GString *  buffer 
)

Definition at line 106 of file xml_attr.c.

◆ pcmk__evaluate_attr_expression()

G_GNUC_INTERNAL int pcmk__evaluate_attr_expression ( const xmlNode *  expression,
const pcmk_rule_input_t rule_input 
)

Definition at line 1039 of file rules.c.

◆ pcmk__evaluate_date_spec()

G_GNUC_INTERNAL int pcmk__evaluate_date_spec ( const xmlNode *  date_spec,
const crm_time_t now 
)

Definition at line 193 of file rules.c.

◆ pcmk__evaluate_op_expression()

G_GNUC_INTERNAL int pcmk__evaluate_op_expression ( const xmlNode *  expr,
const pcmk_rule_input_t rule_input 
)

Definition at line 1260 of file rules.c.

◆ pcmk__evaluate_rsc_expression()

G_GNUC_INTERNAL int pcmk__evaluate_rsc_expression ( const xmlNode *  expr,
const pcmk_rule_input_t rule_input 
)

Definition at line 1189 of file rules.c.

◆ pcmk__find_x_0_schema()

G_GNUC_INTERNAL GList* pcmk__find_x_0_schema ( void  )

Definition at line 111 of file schemas.c.

◆ pcmk__free_acls()

G_GNUC_INTERNAL void pcmk__free_acls ( GList *  acls)

Definition at line 43 of file acl.c.

◆ pcmk__ipc_buffer_size()

G_GNUC_INTERNAL unsigned int pcmk__ipc_buffer_size ( unsigned int  max)

Definition at line 31 of file ipc_common.c.

◆ pcmk__is_user_in_group()

G_GNUC_INTERNAL bool pcmk__is_user_in_group ( const char *  user,
const char *  group 
)

Definition at line 51 of file utils.c.

◆ pcmk__log_xmllib_err()

G_GNUC_INTERNAL void pcmk__log_xmllib_err ( void *  ctx,
const char *  fmt,
  ... 
)

◆ pcmk__mark_xml_attr_dirty()

G_GNUC_INTERNAL void pcmk__mark_xml_attr_dirty ( xmlAttr *  a)

Definition at line 75 of file xml_attr.c.

◆ pcmk__mark_xml_node_dirty()

G_GNUC_INTERNAL void G_GNUC_INTERNAL void pcmk__mark_xml_node_dirty ( xmlNode *  xml)

Definition at line 105 of file xml.c.

◆ pcmk__marked_as_deleted()

G_GNUC_INTERNAL bool pcmk__marked_as_deleted ( xmlAttrPtr  a,
void *  user_data 
)

Definition at line 87 of file xml_attr.c.

◆ pcmk__output_text_get_fancy()

G_GNUC_INTERNAL bool pcmk__output_text_get_fancy ( pcmk__output_t out)

Definition at line 372 of file output_text.c.

◆ pcmk__pacemakerd_api_methods()

G_GNUC_INTERNAL pcmk__ipc_methods_t* pcmk__pacemakerd_api_methods ( void  )

Definition at line 270 of file ipc_pacemakerd.c.

◆ pcmk__parse_comparison()

G_GNUC_INTERNAL enum pcmk__comparison pcmk__parse_comparison ( const char *  op)

Definition at line 724 of file rules.c.

◆ pcmk__parse_source()

G_GNUC_INTERNAL enum pcmk__reference_source pcmk__parse_source ( const char *  source)

Definition at line 877 of file rules.c.

◆ pcmk__parse_type()

G_GNUC_INTERNAL enum pcmk__type pcmk__parse_type ( const char *  type,
enum pcmk__comparison  op,
const char *  value1,
const char *  value2 
)

Definition at line 766 of file rules.c.

◆ pcmk__register_option_messages()

G_GNUC_INTERNAL void pcmk__register_option_messages ( pcmk__output_t out)

Definition at line 491 of file options_display.c.

◆ pcmk__register_patchset_messages()

G_GNUC_INTERNAL void pcmk__register_patchset_messages ( pcmk__output_t out)

Definition at line 450 of file patchset_display.c.

◆ pcmk__schedulerd_api_methods()

G_GNUC_INTERNAL pcmk__ipc_methods_t* pcmk__schedulerd_api_methods ( void  )

Definition at line 132 of file ipc_schedulerd.c.

◆ pcmk__send_ipc_request()

G_GNUC_INTERNAL int pcmk__send_ipc_request ( pcmk_ipc_api_t api,
const xmlNode *  request 
)

Definition at line 668 of file ipc_client.c.

◆ pcmk__set_time_if_earlier()

G_GNUC_INTERNAL void pcmk__set_time_if_earlier ( crm_time_t target,
const crm_time_t source 
)

Definition at line 1461 of file iso8601.c.

◆ pcmk__time_component_attr()

G_GNUC_INTERNAL const char* pcmk__time_component_attr ( enum pcmk__time_component  component)

Definition at line 1534 of file iso8601.c.

◆ pcmk__tracking_xml_changes()

G_GNUC_INTERNAL bool pcmk__tracking_xml_changes ( xmlNode *  xml,
bool  lazy 
)

Definition at line 67 of file xml.c.

◆ pcmk__unpack_acl()

G_GNUC_INTERNAL void pcmk__unpack_acl ( xmlNode *  source,
xmlNode *  target,
const char *  user 
)

Definition at line 288 of file acl.c.

◆ pcmk__unpack_duration()

G_GNUC_INTERNAL int pcmk__unpack_duration ( const xmlNode *  duration,
const crm_time_t start,
crm_time_t **  end 
)

Definition at line 293 of file rules.c.

◆ pcmk__valid_ipc_header()

G_GNUC_INTERNAL bool pcmk__valid_ipc_header ( const pcmk__ipc_header_t header)

Definition at line 107 of file ipc_common.c.

◆ pcmk__xa_filterable()

G_GNUC_INTERNAL bool pcmk__xa_filterable ( const char *  name)

Definition at line 232 of file digest.c.

◆ pcmk__xa_remove()

G_GNUC_INTERNAL int pcmk__xa_remove ( xmlAttr *  attr,
bool  force 
)

Definition at line 45 of file xml_attr.c.

◆ pcmk__xc_match()

G_GNUC_INTERNAL xmlNode* pcmk__xc_match ( const xmlNode *  root,
const xmlNode *  search_comment,
bool  exact 
)

Definition at line 50 of file xml_comment.c.

◆ pcmk__xc_update()

G_GNUC_INTERNAL void pcmk__xc_update ( xmlNode *  parent,
xmlNode *  target,
xmlNode *  update 
)

Definition at line 99 of file xml_comment.c.

◆ pcmk__xe_set_attr_force()

G_GNUC_INTERNAL xmlAttr* pcmk__xe_set_attr_force ( xmlNode *  node,
const char *  name,
const char *  value 
)

Definition at line 290 of file nvpair.c.

◆ pcmk__xe_set_score()

G_GNUC_INTERNAL int pcmk__xe_set_score ( xmlNode *  target,
const char *  name,
const char *  value 
)

Definition at line 591 of file xml.c.

◆ pcmk__xml_free_private_data()

G_GNUC_INTERNAL void pcmk__xml_free_private_data ( xmlNode *  xml)

Definition at line 338 of file xml.c.

◆ pcmk__xml_match()

G_GNUC_INTERNAL xmlNode* pcmk__xml_match ( const xmlNode *  haystack,
const xmlNode *  needle,
bool  exact 
)

Definition at line 426 of file xml.c.

◆ pcmk__xml_new_doc()

G_GNUC_INTERNAL xmlDoc* pcmk__xml_new_doc ( void  )

Definition at line 803 of file xml.c.

◆ pcmk__xml_new_private_data()

G_GNUC_INTERNAL void pcmk__xml_new_private_data ( xmlNode *  xml)

Definition at line 326 of file xml.c.

◆ pcmk__xml_position()

G_GNUC_INTERNAL int pcmk__xml_position ( const xmlNode *  xml,
enum xml_private_flags  ignore_if_set 
)

Definition at line 383 of file xml.c.

◆ pcmk__xml_set_parent_flags()

G_GNUC_INTERNAL void pcmk__xml_set_parent_flags ( xmlNode *  xml,
uint64_t  flags 
)

Definition at line 82 of file xml.c.

◆ pcmk__xml_update()

G_GNUC_INTERNAL void pcmk__xml_update ( xmlNode *  parent,
xmlNode *  target,
xmlNode *  update,
uint32_t  flags,
bool  as_diff 
)

Definition at line 1692 of file xml.c.