#include <stdio.h>
#include <stdlib.h>
#include <libvirt/libvirt.h>

#define MAXLEN 1000

char *read_xml_desc(char *xml_desc, int len, FILE *in)
{
  int c;

  while ((--len > 0) && (c = getc(in)) != EOF)
    *xml_desc++ = c;

  *xml_desc = '\0';

  return (len >= 0 && c == EOF) ? xml_desc : NULL;
}


int main(int argc, char *argv[])
{
  virConnect *conn;
  virDomain *dom;
  char *xml;
  int ret = -1;

  conn = virConnectOpen(NULL);
  if (!conn)
    return ret;

  xml = malloc(MAXLEN);
  if (!xml)
    goto out;

  if (!read_xml_desc(xml, MAXLEN, stdin))
    goto out;

  dom = virDomainCreateXML(conn, xml, 0);
  if (!dom)
    goto out;

  printf("created domain %s\n", virDomainGetName(dom));
  virDomainFree(dom);
  ret = 0;

 out:
  free(xml);
  virConnectClose(conn);
  return ret;
}