Exporting Topologies to XML.

## Functions

int | hwloc_topology_export_xml (hwloc_topology_t topology, const char *xmlpath)
int | hwloc_topology_export_xmlbuffer (hwloc_topology_t topology, char **xmlbuffer, int *buflen)
void | hwloc_free_xmlbuffer (hwloc_topology_t topology, char *xmlbuffer)
void | hwloc_topology_set_userdata_export_callback (hwloc_topology_t topology, void(*export_cb)(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj))
int | hwloc_export_obj_userdata (void *reserved, hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length)
int | hwloc_export_obj_userdata_base64 (void *reserved, hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length)
void | hwloc_topology_set_userdata_import_callback (hwloc_topology_t topology, void(*import_cb)(hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length))

## Detailed Description

## Function Documentation

int hwloc_export_obj_userdata | ( | void * | reserved,
|  | hwloc_topology_t | topology,
|  | hwloc_obj_t | obj,
|  | const char * | name,
|  | const void * | buffer,
|  | size_t | length
| ) |  |

Export some object userdata to XML.

This function may only be called from within the export() callback passed to hwloc_topology_set_userdata_export_callback(). It may be invoked one of multiple times to export some userdata to XML. The `buffer` content of length `length` is stored with optional name `name`.

When importing this XML file, the import() callback (if set) will be called exactly as many times as hwloc_export_obj_userdata() was called during export(). It will receive the corresponding `name`, `buffer` and `length` arguments.

`reserved`, `topology` and `obj` must be the first three parameters that were given to the export callback.

Only printable characters may be exported to XML string attributes. If a non-printable character is passed in `name` or `buffer`, the function returns -1 with errno set to EINVAL.

If exporting binary data, the application should first encode into printable characters only (or use hwloc_export_obj_userdata_base64()). It should also take care of portability issues if the export may be reimported on a different architecture.

int hwloc_export_obj_userdata_base64 | ( | void * | reserved,
|  | hwloc_topology_t | topology,
|  | hwloc_obj_t | obj,
|  | const char * | name,
|  | const void * | buffer,
|  | size_t | length
| ) |  |

Encode and export some object userdata to XML.

This function is similar to hwloc_export_obj_userdata() but it encodes the input buffer into printable characters before exporting. On import, decoding is automatically performed before the data is given to the import() callback if any.

This function may only be called from within the export() callback passed to hwloc_topology_set_userdata_export_callback().

The function does not take care of portability issues if the export may be reimported on a different architecture.

void hwloc_free_xmlbuffer | ( | hwloc_topology_t | topology,
|  | char * | xmlbuffer
| ) |  |

Free a buffer allocated by hwloc_topology_export_xmlbuffer()

int hwloc_topology_export_xml | ( | hwloc_topology_t | topology,
|  | const char * | xmlpath
| ) |  |

Export the topology into an XML file.

This file may be loaded later through hwloc_topology_set_xml().

Returns
  -1 if a failure occured.

Note
  See also hwloc_topology_set_userdata_export_callback() for exporting application-specific userdata.
  Only printable characters may be exported to XML string attributes. Any other character, especially any non-ASCII character, will be silently dropped.

int hwloc_topology_export_xmlbuffer | ( | hwloc_topology_t | topology,
|  | char ** | xmlbuffer,
|  | int * | buflen
| ) |  |

Export the topology into a newly-allocated XML memory buffer.

`xmlbuffer` is allocated by the callee and should be freed with hwloc_free_xmlbuffer() later in the caller.

This memory buffer may be loaded later through hwloc_topology_set_xmlbuffer().

Returns
  -1 if a failure occured.

Note
  See also hwloc_topology_set_userdata_export_callback() for exporting application-specific userdata.
  Only printable characters may be exported to XML string attributes. Any other character, especially any non-ASCII character, will be silently dropped.

void hwloc_topology_set_userdata_export_callback | ( | hwloc_topology_t | topology,
|  | void(*)(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj) | export_cb
| ) |  |

Set the application-specific callback for exporting userdata.

The object userdata pointer is not exported to XML by default because hwloc does not know what it contains.

This function lets applications set `export_cb` to a callback function that converts this opaque userdata into an exportable string.

`export_cb` is invoked during XML export for each object whose `userdata` pointer is not `NULL`. The callback should use hwloc_export_obj_userdata() or hwloc_export_obj_userdata_base64() to actually export something to XML (possibly multiple times per object).

`export_cb` may be set to `NULL` if userdata should not be exported to XML.

void hwloc_topology_set_userdata_import_callback | ( | hwloc_topology_t | topology,
|  | void(*)(hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length) | import_cb
| ) |  |

Set the application-specific callback for importing userdata.

On XML import, userdata is ignored by default because hwloc does not know how to store it in memory.

This function lets applications set `import_cb` to a callback function that will get the XML-stored userdata and store it in the object as expected by the application.

`import_cb` is called during hwloc_topology_load() as many times as hwloc_export_obj_userdata() was called during export. The topology is not entirely setup yet. Object attributes are ready to consult, but links between objects are not.

`import_cb` may be `NULL` if userdata should be ignored during import.

Note
  `buffer` contains `length` characters followed by a null byte ('\0').
  This function should be called before hwloc_topology_load().