}
static int
-libxlDomainSave(virDomainPtr dom, const char *to)
+libxlDomainSaveFlags(virDomainPtr dom, const char *to, const char *dxml,
+ unsigned int flags)
{
libxlDriverPrivatePtr driver = dom->conn->privateData;
virDomainObjPtr vm;
int ret = -1;
+ virCheckFlags(0, -1);
+ if (dxml) {
+ libxlError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
+ _("xml modification unsupported"));
+ return -1;
+ }
+
libxlDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
}
static int
-libxlDomainRestore(virConnectPtr conn, const char *from)
+libxlDomainSave(virDomainPtr dom, const char *to)
+{
+ return libxlDomainSaveFlags(dom, to, NULL, 0);
+}
+
+static int
+libxlDomainRestoreFlags(virConnectPtr conn, const char *from,
+ const char *dxml, unsigned int flags)
{
libxlDriverPrivatePtr driver = conn->privateData;
virDomainObjPtr vm = NULL;
int fd = -1;
int ret = -1;
+ virCheckFlags(0, -1);
+ if (dxml) {
+ libxlError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
+ _("xml modification unsupported"));
+ return -1;
+ }
+
libxlDriverLock(driver);
fd = libxlSaveImageOpen(driver, from, &def, &hdr);
return ret;
}
+static int
+libxlDomainRestore(virConnectPtr conn, const char *from)
+{
+ return libxlDomainRestoreFlags(conn, from, NULL, 0);
+}
+
static int
libxlDomainCoreDump(virDomainPtr dom, const char *to, unsigned int flags)
{
.domainGetInfo = libxlDomainGetInfo, /* 0.9.0 */
.domainGetState = libxlDomainGetState, /* 0.9.2 */
.domainSave = libxlDomainSave, /* 0.9.2 */
+ .domainSaveFlags = libxlDomainSaveFlags, /* 0.9.4 */
.domainRestore = libxlDomainRestore, /* 0.9.2 */
+ .domainRestoreFlags = libxlDomainRestoreFlags, /* 0.9.4 */
.domainCoreDump = libxlDomainCoreDump, /* 0.9.2 */
.domainSetVcpus = libxlDomainSetVcpus, /* 0.9.0 */
.domainSetVcpusFlags = libxlDomainSetVcpusFlags, /* 0.9.0 */
* shutdown). So 'vm' must not be referenced by the caller after
* this returns (whether returning success or failure).
*/
-static int qemudDomainSaveFlag(struct qemud_driver *driver, virDomainPtr dom,
- virDomainObjPtr vm, const char *path,
- int compressed)
+static int
+qemuDomainSaveInternal(struct qemud_driver *driver, virDomainPtr dom,
+ virDomainObjPtr vm, const char *path,
+ int compressed)
{
char *xml = NULL;
struct qemud_save_header header;
return true;
}
-static int qemudDomainSave(virDomainPtr dom, const char *path)
+static int
+qemuDomainSaveFlags(virDomainPtr dom, const char *path, const char *dxml,
+ unsigned int flags)
{
struct qemud_driver *driver = dom->conn->privateData;
int compressed;
int ret = -1;
virDomainObjPtr vm = NULL;
+ virCheckFlags(0, -1);
+ if (dxml) {
+ qemuReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
+ _("xml modification unsupported"));
+ return -1;
+ }
+
qemuDriverLock(driver);
if (driver->saveImageFormat == NULL)
goto cleanup;
}
- ret = qemudDomainSaveFlag(driver, dom, vm, path, compressed);
+ ret = qemuDomainSaveInternal(driver, dom, vm, path, compressed);
vm = NULL;
cleanup:
return ret;
}
+static int
+qemuDomainSave(virDomainPtr dom, const char *path)
+{
+ return qemuDomainSaveFlags(dom, path, NULL, 0);
+}
+
static char *
qemuDomainManagedSavePath(struct qemud_driver *driver, virDomainObjPtr vm) {
char *ret;
VIR_INFO("Saving state to %s", name);
compressed = QEMUD_SAVE_FORMAT_RAW;
- ret = qemudDomainSaveFlag(driver, dom, vm, name, compressed);
+ ret = qemuDomainSaveInternal(driver, dom, vm, name, compressed);
vm = NULL;
cleanup:
}
static int
-qemuDomainRestore(virConnectPtr conn,
- const char *path)
+qemuDomainRestoreFlags(virConnectPtr conn,
+ const char *path,
+ const char *dxml,
+ unsigned int flags)
{
struct qemud_driver *driver = conn->privateData;
virDomainDefPtr def = NULL;
int ret = -1;
struct qemud_save_header header;
+ virCheckFlags(0, -1);
+ if (dxml) {
+ qemuReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
+ _("xml modification unsupported"));
+ return -1;
+ }
+
qemuDriverLock(driver);
fd = qemuDomainSaveImageOpen(driver, path, &def, &header);
return ret;
}
+static int
+qemuDomainRestore(virConnectPtr conn,
+ const char *path)
+{
+ return qemuDomainRestoreFlags(conn, path, NULL, 0);
+}
+
static int
qemuDomainObjRestore(virConnectPtr conn,
struct qemud_driver *driver,
.domainGetInfo = qemudDomainGetInfo, /* 0.2.0 */
.domainGetState = qemuDomainGetState, /* 0.9.2 */
.domainGetControlInfo = qemuDomainGetControlInfo, /* 0.9.3 */
- .domainSave = qemudDomainSave, /* 0.2.0 */
+ .domainSave = qemuDomainSave, /* 0.2.0 */
+ .domainSaveFlags = qemuDomainSaveFlags, /* 0.9.4 */
.domainRestore = qemuDomainRestore, /* 0.2.0 */
+ .domainRestoreFlags = qemuDomainRestoreFlags, /* 0.9.4 */
.domainCoreDump = qemudDomainCoreDump, /* 0.7.0 */
.domainScreenshot = qemuDomainScreenshot, /* 0.9.2 */
.domainSetVcpus = qemuDomainSetVcpus, /* 0.4.4 */
#define TEST_SAVE_MAGIC "TestGuestMagic"
-static int testDomainSave(virDomainPtr domain,
- const char *path)
+static int
+testDomainSaveFlags(virDomainPtr domain, const char *path,
+ const char *dxml, unsigned int flags)
{
testConnPtr privconn = domain->conn->privateData;
char *xml = NULL;
virDomainEventPtr event = NULL;
int ret = -1;
+ virCheckFlags(0, -1);
+ if (dxml) {
+ testError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
+ _("xml modification unsupported"));
+ return -1;
+ }
+
testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
return ret;
}
-static int testDomainRestore(virConnectPtr conn,
- const char *path)
+static int
+testDomainSave(virDomainPtr domain,
+ const char *path)
+{
+ return testDomainSaveFlags(domain, path, NULL, 0);
+}
+
+static int
+testDomainRestoreFlags(virConnectPtr conn,
+ const char *path,
+ const char *dxml,
+ unsigned int flags)
{
testConnPtr privconn = conn->privateData;
char *xml = NULL;
virDomainEventPtr event = NULL;
int ret = -1;
+ virCheckFlags(0, -1);
+ if (dxml) {
+ testError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
+ _("xml modification unsupported"));
+ return -1;
+ }
+
if ((fd = open(path, O_RDONLY)) < 0) {
virReportSystemError(errno,
_("cannot read domain image '%s'"),
return ret;
}
+static int
+testDomainRestore(virConnectPtr conn,
+ const char *path)
+{
+ return testDomainRestoreFlags(conn, path, NULL, 0);
+}
+
static int testDomainCoreDump(virDomainPtr domain,
const char *to,
unsigned int flags)
.domainGetInfo = testGetDomainInfo, /* 0.1.1 */
.domainGetState = testDomainGetState, /* 0.9.2 */
.domainSave = testDomainSave, /* 0.3.2 */
+ .domainSaveFlags = testDomainSaveFlags, /* 0.9.4 */
.domainRestore = testDomainRestore, /* 0.3.2 */
+ .domainRestoreFlags = testDomainRestoreFlags, /* 0.9.4 */
.domainCoreDump = testDomainCoreDump, /* 0.3.2 */
.domainSetVcpus = testSetVcpus, /* 0.1.4 */
.domainSetVcpusFlags = testDomainSetVcpusFlags, /* 0.8.5 */
}
static int
-xenUnifiedDomainSave (virDomainPtr dom, const char *to)
+xenUnifiedDomainSaveFlags(virDomainPtr dom, const char *to, const char *dxml,
+ unsigned int flags)
{
GET_PRIVATE(dom->conn);
int i;
+ virCheckFlags(0, -1);
+ if (dxml) {
+ xenUnifiedError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
+ _("xml modification unsupported"));
+ return -1;
+ }
+
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
if (priv->opened[i] &&
drivers[i]->domainSave &&
}
static int
-xenUnifiedDomainRestore (virConnectPtr conn, const char *from)
+xenUnifiedDomainSave(virDomainPtr dom, const char *to)
+{
+ return xenUnifiedDomainSaveFlags(dom, to, NULL, 0);
+}
+
+static int
+xenUnifiedDomainRestoreFlags(virConnectPtr conn, const char *from,
+ const char *dxml, unsigned int flags)
{
GET_PRIVATE(conn);
int i;
+ virCheckFlags(0, -1);
+ if (dxml) {
+ xenUnifiedError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
+ _("xml modification unsupported"));
+ return -1;
+ }
+
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
if (priv->opened[i] &&
drivers[i]->domainRestore &&
return -1;
}
+static int
+xenUnifiedDomainRestore (virConnectPtr conn, const char *from)
+{
+ return xenUnifiedDomainRestoreFlags(conn, from, NULL, 0);
+}
+
static int
xenUnifiedDomainCoreDump (virDomainPtr dom, const char *to, unsigned int flags)
{
.domainGetInfo = xenUnifiedDomainGetInfo, /* 0.0.3 */
.domainGetState = xenUnifiedDomainGetState, /* 0.9.2 */
.domainSave = xenUnifiedDomainSave, /* 0.0.3 */
+ .domainSaveFlags = xenUnifiedDomainSaveFlags, /* 0.9.4 */
.domainRestore = xenUnifiedDomainRestore, /* 0.0.3 */
+ .domainRestoreFlags = xenUnifiedDomainRestoreFlags, /* 0.9.4 */
.domainCoreDump = xenUnifiedDomainCoreDump, /* 0.1.9 */
.domainSetVcpus = xenUnifiedDomainSetVcpus, /* 0.1.4 */
.domainSetVcpusFlags = xenUnifiedDomainSetVcpusFlags, /* 0.8.5 */