mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
Create virDomainEventDiskChange to get rid of the huge union
This commit is contained in:
parent
0ac4c9edad
commit
bc7b304336
@ -91,6 +91,8 @@ static virClassPtr virDomainEventWatchdogClass;
|
|||||||
static virClassPtr virDomainEventIOErrorClass;
|
static virClassPtr virDomainEventIOErrorClass;
|
||||||
static virClassPtr virDomainEventGraphicsClass;
|
static virClassPtr virDomainEventGraphicsClass;
|
||||||
static virClassPtr virDomainEventBlockJobClass;
|
static virClassPtr virDomainEventBlockJobClass;
|
||||||
|
static virClassPtr virDomainEventDiskChangeClass;
|
||||||
|
|
||||||
static void virObjectEventDispose(void *obj);
|
static void virObjectEventDispose(void *obj);
|
||||||
static void virDomainEventDispose(void *obj);
|
static void virDomainEventDispose(void *obj);
|
||||||
static void virDomainEventLifecycleDispose(void *obj);
|
static void virDomainEventLifecycleDispose(void *obj);
|
||||||
@ -99,6 +101,7 @@ static void virDomainEventWatchdogDispose(void *obj);
|
|||||||
static void virDomainEventIOErrorDispose(void *obj);
|
static void virDomainEventIOErrorDispose(void *obj);
|
||||||
static void virDomainEventGraphicsDispose(void *obj);
|
static void virDomainEventGraphicsDispose(void *obj);
|
||||||
static void virDomainEventBlockJobDispose(void *obj);
|
static void virDomainEventBlockJobDispose(void *obj);
|
||||||
|
static void virDomainEventDiskChangeDispose(void *obj);
|
||||||
|
|
||||||
struct _virObjectEvent {
|
struct _virObjectEvent {
|
||||||
virObject parent;
|
virObject parent;
|
||||||
@ -111,12 +114,6 @@ struct _virDomainEvent {
|
|||||||
virObjectMeta meta;
|
virObjectMeta meta;
|
||||||
|
|
||||||
union {
|
union {
|
||||||
struct {
|
|
||||||
char *oldSrcPath;
|
|
||||||
char *newSrcPath;
|
|
||||||
char *devAlias;
|
|
||||||
int reason;
|
|
||||||
} diskChange;
|
|
||||||
struct {
|
struct {
|
||||||
char *devAlias;
|
char *devAlias;
|
||||||
int reason;
|
int reason;
|
||||||
@ -189,6 +186,18 @@ struct _virDomainEventGraphics {
|
|||||||
typedef struct _virDomainEventGraphics virDomainEventGraphics;
|
typedef struct _virDomainEventGraphics virDomainEventGraphics;
|
||||||
typedef virDomainEventGraphics *virDomainEventGraphicsPtr;
|
typedef virDomainEventGraphics *virDomainEventGraphicsPtr;
|
||||||
|
|
||||||
|
struct _virDomainEventDiskChange {
|
||||||
|
virDomainEvent parent;
|
||||||
|
|
||||||
|
char *oldSrcPath;
|
||||||
|
char *newSrcPath;
|
||||||
|
char *devAlias;
|
||||||
|
int reason;
|
||||||
|
};
|
||||||
|
typedef struct _virDomainEventDiskChange virDomainEventDiskChange;
|
||||||
|
typedef virDomainEventDiskChange *virDomainEventDiskChangePtr;
|
||||||
|
|
||||||
|
|
||||||
static int virObjectEventOnceInit(void)
|
static int virObjectEventOnceInit(void)
|
||||||
{
|
{
|
||||||
if (!(virObjectEventClass =
|
if (!(virObjectEventClass =
|
||||||
@ -239,6 +248,12 @@ static int virObjectEventOnceInit(void)
|
|||||||
sizeof(virDomainEventBlockJob),
|
sizeof(virDomainEventBlockJob),
|
||||||
virDomainEventBlockJobDispose)))
|
virDomainEventBlockJobDispose)))
|
||||||
return -1;
|
return -1;
|
||||||
|
if (!(virDomainEventDiskChangeClass =
|
||||||
|
virClassNew(virDomainEventClass,
|
||||||
|
"virDomainEventDiskChange",
|
||||||
|
sizeof(virDomainEventDiskChange),
|
||||||
|
virDomainEventDiskChangeDispose)))
|
||||||
|
return -1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -271,11 +286,6 @@ static void virDomainEventDispose(void *obj)
|
|||||||
|
|
||||||
switch (virObjectEventGetEventID(event)) {
|
switch (virObjectEventGetEventID(event)) {
|
||||||
|
|
||||||
case VIR_DOMAIN_EVENT_ID_DISK_CHANGE:
|
|
||||||
VIR_FREE(event->data.diskChange.oldSrcPath);
|
|
||||||
VIR_FREE(event->data.diskChange.newSrcPath);
|
|
||||||
VIR_FREE(event->data.diskChange.devAlias);
|
|
||||||
break;
|
|
||||||
case VIR_DOMAIN_EVENT_ID_TRAY_CHANGE:
|
case VIR_DOMAIN_EVENT_ID_TRAY_CHANGE:
|
||||||
VIR_FREE(event->data.trayChange.devAlias);
|
VIR_FREE(event->data.trayChange.devAlias);
|
||||||
break;
|
break;
|
||||||
@ -349,6 +359,16 @@ static void virDomainEventBlockJobDispose(void *obj)
|
|||||||
VIR_FREE(event->path);
|
VIR_FREE(event->path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void virDomainEventDiskChangeDispose(void *obj)
|
||||||
|
{
|
||||||
|
virDomainEventDiskChangePtr event = obj;
|
||||||
|
VIR_DEBUG("obj=%p", event);
|
||||||
|
|
||||||
|
VIR_FREE(event->oldSrcPath);
|
||||||
|
VIR_FREE(event->newSrcPath);
|
||||||
|
VIR_FREE(event->devAlias);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* virObjectEventCallbackListFree:
|
* virObjectEventCallbackListFree:
|
||||||
* @list: event callback list head
|
* @list: event callback list head
|
||||||
@ -1249,35 +1269,35 @@ virDomainEventPtr virDomainEventControlErrorNewFromObj(virDomainObjPtr obj)
|
|||||||
return ev;
|
return ev;
|
||||||
}
|
}
|
||||||
|
|
||||||
static virDomainEventPtr
|
static
|
||||||
virDomainEventDiskChangeNew(int id, const char *name,
|
virDomainEventPtr virDomainEventDiskChangeNew(int id, const char *name,
|
||||||
unsigned char *uuid,
|
unsigned char *uuid,
|
||||||
const char *oldSrcPath,
|
const char *oldSrcPath,
|
||||||
const char *newSrcPath,
|
const char *newSrcPath,
|
||||||
const char *devAlias, int reason)
|
const char *devAlias, int reason)
|
||||||
{
|
{
|
||||||
virDomainEventPtr ev;
|
virDomainEventDiskChangePtr ev;
|
||||||
|
|
||||||
if (virObjectEventInitialize() < 0)
|
if (virObjectEventInitialize() < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!(ev = virDomainEventNew(virDomainEventClass,
|
if (!(ev = virDomainEventNew(virDomainEventDiskChangeClass,
|
||||||
VIR_DOMAIN_EVENT_ID_DISK_CHANGE,
|
VIR_DOMAIN_EVENT_ID_DISK_CHANGE,
|
||||||
id, name, uuid)))
|
id, name, uuid)))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (VIR_STRDUP(ev->data.diskChange.devAlias, devAlias) < 0)
|
if (VIR_STRDUP(ev->devAlias, devAlias) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (VIR_STRDUP(ev->data.diskChange.oldSrcPath, oldSrcPath) < 0)
|
if (VIR_STRDUP(ev->oldSrcPath, oldSrcPath) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (VIR_STRDUP(ev->data.diskChange.newSrcPath, newSrcPath) < 0)
|
if (VIR_STRDUP(ev->newSrcPath, newSrcPath) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
ev->data.diskChange.reason = reason;
|
ev->reason = reason;
|
||||||
|
|
||||||
return ev;
|
return (virDomainEventPtr)ev;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
virObjectUnref(ev);
|
virObjectUnref(ev);
|
||||||
@ -1671,13 +1691,18 @@ virDomainEventDispatchDefaultFunc(virConnectPtr conn,
|
|||||||
}
|
}
|
||||||
|
|
||||||
case VIR_DOMAIN_EVENT_ID_DISK_CHANGE:
|
case VIR_DOMAIN_EVENT_ID_DISK_CHANGE:
|
||||||
((virConnectDomainEventDiskChangeCallback)cb)(conn, dom,
|
{
|
||||||
event->data.diskChange.oldSrcPath,
|
virDomainEventDiskChangePtr diskChangeEvent;
|
||||||
event->data.diskChange.newSrcPath,
|
|
||||||
event->data.diskChange.devAlias,
|
diskChangeEvent = (virDomainEventDiskChangePtr)event;
|
||||||
event->data.diskChange.reason,
|
((virConnectDomainEventDiskChangeCallback)cb)(conn, dom,
|
||||||
cbopaque);
|
diskChangeEvent->oldSrcPath,
|
||||||
goto cleanup;
|
diskChangeEvent->newSrcPath,
|
||||||
|
diskChangeEvent->devAlias,
|
||||||
|
diskChangeEvent->reason,
|
||||||
|
cbopaque);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
case VIR_DOMAIN_EVENT_ID_TRAY_CHANGE:
|
case VIR_DOMAIN_EVENT_ID_TRAY_CHANGE:
|
||||||
((virConnectDomainEventTrayChangeCallback)cb)(conn, dom,
|
((virConnectDomainEventTrayChangeCallback)cb)(conn, dom,
|
||||||
|
Loading…
Reference in New Issue
Block a user