virDomainDiskDefPtr
-virDomainDiskDefNew(void)
+virDomainDiskDefNew(virDomainXMLOptionPtr xmlopt)
{
virDomainDiskDefPtr ret;
if (VIR_ALLOC(ret->src) < 0)
goto error;
+ if (xmlopt &&
+ xmlopt->privateData.diskNew &&
+ !(ret->privateData = xmlopt->privateData.diskNew()))
+ goto error;
+
if (virCondInit(&ret->blockJobSyncCond) < 0) {
virReportSystemError(errno, "%s", _("Failed to initialize condition"));
goto error;
return ret;
error:
- virStorageSourceFree(ret->src);
- VIR_FREE(ret);
-
+ virDomainDiskDefFree(ret);
return NULL;
}
VIR_FREE(def->product);
VIR_FREE(def->domain_name);
virDomainDeviceInfoClear(&def->info);
+ virObjectUnref(def->privateData);
virCondDestroy(&def->blockJobSyncCond);
VIR_FREE(def);
int auth_secret_usage = -1;
int ret = 0;
- if (!(def = virDomainDiskDefNew()))
+ if (!(def = virDomainDiskDefNew(xmlopt)))
return NULL;
def->geometry.cylinders = 0;
struct _virDomainDiskDef {
virStorageSourcePtr src; /* non-NULL. XXX Allow NULL for empty cdrom? */
+ virObjectPtr privateData;
+
int device; /* enum virDomainDiskDevice */
int bus; /* enum virDomainDiskBus */
char *dst;
typedef void *(*virDomainXMLPrivateDataAllocFunc)(void);
typedef void (*virDomainXMLPrivateDataFreeFunc)(void *);
+typedef virObjectPtr (*virDomainXMLPrivateDataNewFunc)(void);
typedef int (*virDomainXMLPrivateDataFormatFunc)(virBufferPtr, void *);
typedef int (*virDomainXMLPrivateDataParseFunc)(xmlXPathContextPtr, void *);
struct _virDomainXMLPrivateDataCallbacks {
virDomainXMLPrivateDataAllocFunc alloc;
virDomainXMLPrivateDataFreeFunc free;
+ virDomainXMLPrivateDataNewFunc diskNew;
virDomainXMLPrivateDataFormatFunc format;
virDomainXMLPrivateDataParseFunc parse;
};
void virDomainResourceDefFree(virDomainResourceDefPtr resource);
void virDomainGraphicsDefFree(virDomainGraphicsDefPtr def);
void virDomainInputDefFree(virDomainInputDefPtr def);
-virDomainDiskDefPtr virDomainDiskDefNew(void);
+virDomainDiskDefPtr virDomainDiskDefNew(virDomainXMLOptionPtr xmlopt);
void virDomainDiskDefFree(virDomainDiskDefPtr def);
void virDomainLeaseDefFree(virDomainLeaseDefPtr def);
int virDomainDiskGetType(virDomainDiskDefPtr def);
PrlHandle_Free(hdd);
hdd = PRL_INVALID_HANDLE;
} else {
- if (!(disk = virDomainDiskDefNew()))
+ if (!(disk = virDomainDiskDefNew(NULL)))
goto error;
if (prlsdkGetDiskInfo(hdd, disk, false) < 0)
pret = PrlVmCfg_GetOpticalDisk(sdkdom, i, &cdrom);
prlsdkCheckRetGoto(pret, error);
- if (!(disk = virDomainDiskDefNew()))
+ if (!(disk = virDomainDiskDefNew(NULL)))
goto error;
if (prlsdkGetDiskInfo(cdrom, disk, true) < 0)
STRPREFIX(arg, "-fd") ||
STREQ(arg, "-cdrom")) {
WANT_VALUE();
- if (!(disk = virDomainDiskDefNew()))
+ if (!(disk = virDomainDiskDefNew(xmlopt)))
goto error;
if (STRPREFIX(val, "/dev/")) {
goto error;
}
} else if (STRPREFIX(val, "disk:")) {
- if (!(disk = virDomainDiskDefNew()))
+ if (!(disk = virDomainDiskDefNew(xmlopt)))
goto error;
if (VIR_STRDUP(disk->src->path, val + strlen("disk:")) < 0)
goto error;
/* Allocate mem, if fails return error */
if (VIR_ALLOC_N(def->disks, def->ndisks) >= 0) {
for (i = 0; i < def->ndisks; i++) {
- virDomainDiskDefPtr disk = virDomainDiskDefNew();
+ virDomainDiskDefPtr disk = virDomainDiskDefNew(NULL);
if (!disk) {
error = true;
break;
/* Allocate mem, if fails return error */
if (VIR_ALLOC_N(def->dom->disks, def->dom->ndisks) >= 0) {
for (i = 0; i < def->dom->ndisks; i++) {
- virDomainDiskDefPtr diskDef = virDomainDiskDefNew();
+ virDomainDiskDefPtr diskDef = virDomainDiskDefNew(NULL);
if (!diskDef)
goto cleanup;
def->dom->disks[i] = diskDef;
if ((def->ndisks > 0) && (VIR_ALLOC_N(def->disks, def->ndisks) >= 0)) {
size_t i;
for (i = 0; i < def->ndisks; i++) {
- if ((def->disks[i] = virDomainDiskDefNew())) {
+ if ((def->disks[i] = virDomainDiskDefNew(NULL))) {
def->disks[i]->device = VIR_DOMAIN_DISK_DEVICE_DISK;
def->disks[i]->bus = VIR_DOMAIN_DISK_BUS_IDE;
virDomainDiskSetType(def->disks[i],
def->ndisks++;
if (VIR_REALLOC_N(def->disks, def->ndisks) >= 0) {
- if ((def->disks[def->ndisks - 1] = virDomainDiskDefNew())) {
+ if ((def->disks[def->ndisks - 1] = virDomainDiskDefNew(NULL))) {
def->disks[def->ndisks - 1]->device = VIR_DOMAIN_DISK_DEVICE_CDROM;
def->disks[def->ndisks - 1]->bus = VIR_DOMAIN_DISK_BUS_IDE;
virDomainDiskSetType(def->disks[def->ndisks - 1],
def->ndisks++;
if (VIR_REALLOC_N(def->disks, def->ndisks) >= 0) {
- if ((def->disks[def->ndisks - 1] = virDomainDiskDefNew())) {
+ if ((def->disks[def->ndisks - 1] = virDomainDiskDefNew(NULL))) {
def->disks[def->ndisks - 1]->device = VIR_DOMAIN_DISK_DEVICE_FLOPPY;
def->disks[def->ndisks - 1]->bus = VIR_DOMAIN_DISK_BUS_FDC;
virDomainDiskSetType(def->disks[def->ndisks - 1],
return -1;
}
- if (!(*def = virDomainDiskDefNew()))
+ if (!(*def = virDomainDiskDefNew(xmlopt)))
return -1;
(*def)->device = device;
bootable = sexpr_node(node, "device/tap/bootable");
}
- if (!(disk = virDomainDiskDefNew()))
+ if (!(disk = virDomainDiskDefNew(NULL)))
goto error;
if (dst == NULL) {
tmp = sexpr_node(root, "domain/image/hvm/cdrom");
if ((tmp != NULL) && (tmp[0] != 0)) {
virDomainDiskDefPtr disk;
- if (!(disk = virDomainDiskDefNew()))
+ if (!(disk = virDomainDiskDefNew(NULL)))
goto error;
if (virDomainDiskSetSource(disk, tmp) < 0) {
virDomainDiskDefFree(disk);
tmp = sexpr_fmt_node(root, "domain/image/hvm/%s", fds[i]);
if ((tmp != NULL) && (tmp[0] != 0)) {
virDomainDiskDefPtr disk;
- if (!(disk = virDomainDiskDefNew()))
+ if (!(disk = virDomainDiskDefNew(NULL)))
goto error;
if (virDomainDiskSetSource(disk, tmp) < 0) {
virDomainDiskDefFree(disk);
if (xlu_disk_parse(xluconf, 1, &disk_spec, libxldisk))
goto fail;
- if (!(disk = virDomainDiskDefNew()))
+ if (!(disk = virDomainDiskDefNew(NULL)))
goto fail;
if (VIR_STRDUP(disk->dst, libxldisk->vdev) < 0)
goto skipdisk;
head = list->str;
- if (!(disk = virDomainDiskDefNew()))
+ if (!(disk = virDomainDiskDefNew(NULL)))
return -1;
/*
if (xenConfigGetString(conf, "cdrom", &str, NULL) < 0)
goto cleanup;
if (str) {
- if (!(disk = virDomainDiskDefNew()))
+ if (!(disk = virDomainDiskDefNew(NULL)))
goto cleanup;
virDomainDiskSetType(disk, VIR_STORAGE_TYPE_FILE);