
On Wed, May 07, 2008 at 04:21:25PM -0400, Cole Robinson wrote:
+int +xenDaemonDomainGetAutostart(virDomainPtr domain, + int *autostart) +{ + struct sexpr *root; + const char *tmp; + + if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) { + virXendError((domain ? domain->conn : NULL), VIR_ERR_INVALID_ARG, + __FUNCTION__); + return (-1); + }
Since this only works in Xen 3.0.4 or later can you add in: /* xm_internal.c (the support for defined domains from /etc/xen * config files used by old Xen) will handle this. */ if (priv->xendConfigVersion < 3) return(-1); This ensures that users will get a 'operation not supported' error for older XenD - at least until we implement the alternate /etc/xen/auto symlink scheme for xm_internal.c driver.
+xenDaemonDomainSetAutostart(virDomainPtr domain, + int autostart) +{ + struct sexpr *root, *autonode; + const char *autostr; + char buf[4096]; + int ret = -1; + + if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) { + virXendError((domain ? domain->conn : NULL), VIR_ERR_INTERNAL_ERROR, + __FUNCTION__); + return (-1); + }
Same here - add a xendConfigVersion check.
+ root = sexpr_get(domain->conn, "/xend/domain/%s?detail=1", domain->name); + if (root == NULL) { + virXendError (domain->conn, VIR_ERR_XEN_CALL, + _("xenDaemonSetAutostart failed to find this domain")); + return (-1); + } + + autostr = sexpr_node(root, "domain/on_xend_start"); + if (autostr) { + if (!STREQ(autostr, "ignore") && !STREQ(autostr, "start")) { + virXendError(domain->conn, VIR_ERR_INTERNAL_ERROR, + _("unexpected value from on_xend_start")); + goto error; + } + + // Change the autostart value in place, then define the new sexpr + autonode = sexpr_lookup(root, "domain/on_xend_start"); + free(autonode->u.s.car->u.value); + autonode->u.s.car->u.value = (autostart ? strdup("start") + : strdup("ignore")); + if (!(autonode->u.s.car->u.value)) { + virXendError(domain->conn, VIR_ERR_INTERNAL_ERROR, + _("no memory")); + goto error; + } + + if (sexpr2string(root, buf, 4096) == 0) {
Use sizeof(buf) here instead of duplicating 4096 constant. Regards, Dan. -- |: Red Hat, Engineering, Boston -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|