/* The SAX callback must call mxmlRetain() for any nodes that need to be kept for later use. Otherwise, nodes are deleted when the parent node is closed or after each data, comment, CDATA, or directive node. */
mxml_node_t* mxmlSAXLoadFd(mxml_node_t *top, int fd, mxml_load_cb_t cb, mxml_sax_cb_t sax_cb, void *sax_data)
/* The SAX callback must call mxmlRetain() for any nodes that need to be kept for later use. Otherwise, nodes are deleted when the parent node is closed or after each data, comment, CDATA, or directive node. */
mxml_node_t* mxmlSAXLoadFd(mxml_node_t *top, int fd, mxml_load_cb_t cb, mxml_sax_cb_t sax_cb, void *sax_data)
{
  _mxml_fdbuf_t	buf;
  buf.fd      = fd;
  buf.current = buf.buffer;
  buf.end     = buf.buffer;
  return (mxml_load_data(top, &buf, cb, mxml_fd_getc, sax_cb, sax_data));
}