提交 e6b83046 编写于 作者: C Cédric Bosdonnat 提交者: Daniel P. Berrange

Create virDomainEventGraphics to get rid of the huge union

上级 b2232638
...@@ -89,12 +89,14 @@ static virClassPtr virDomainEventLifecycleClass; ...@@ -89,12 +89,14 @@ static virClassPtr virDomainEventLifecycleClass;
static virClassPtr virDomainEventRTCChangeClass; static virClassPtr virDomainEventRTCChangeClass;
static virClassPtr virDomainEventWatchdogClass; static virClassPtr virDomainEventWatchdogClass;
static virClassPtr virDomainEventIOErrorClass; static virClassPtr virDomainEventIOErrorClass;
static virClassPtr virDomainEventGraphicsClass;
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);
static void virDomainEventRTCChangeDispose(void *obj); static void virDomainEventRTCChangeDispose(void *obj);
static void virDomainEventWatchdogDispose(void *obj); static void virDomainEventWatchdogDispose(void *obj);
static void virDomainEventIOErrorDispose(void *obj); static void virDomainEventIOErrorDispose(void *obj);
static void virDomainEventGraphicsDispose(void *obj);
struct _virObjectEvent { struct _virObjectEvent {
virObject parent; virObject parent;
...@@ -107,13 +109,6 @@ struct _virDomainEvent { ...@@ -107,13 +109,6 @@ struct _virDomainEvent {
virObjectMeta meta; virObjectMeta meta;
union { union {
struct {
int phase;
virDomainEventGraphicsAddressPtr local;
virDomainEventGraphicsAddressPtr remote;
char *authScheme;
virDomainEventGraphicsSubjectPtr subject;
} graphics;
struct { struct {
char *path; char *path;
int type; int type;
...@@ -175,6 +170,18 @@ struct _virDomainEventIOError { ...@@ -175,6 +170,18 @@ struct _virDomainEventIOError {
typedef struct _virDomainEventIOError virDomainEventIOError; typedef struct _virDomainEventIOError virDomainEventIOError;
typedef virDomainEventIOError *virDomainEventIOErrorPtr; typedef virDomainEventIOError *virDomainEventIOErrorPtr;
struct _virDomainEventGraphics {
virDomainEvent parent;
int phase;
virDomainEventGraphicsAddressPtr local;
virDomainEventGraphicsAddressPtr remote;
char *authScheme;
virDomainEventGraphicsSubjectPtr subject;
};
typedef struct _virDomainEventGraphics virDomainEventGraphics;
typedef virDomainEventGraphics *virDomainEventGraphicsPtr;
static int virObjectEventOnceInit(void) static int virObjectEventOnceInit(void)
{ {
if (!(virObjectEventClass = if (!(virObjectEventClass =
...@@ -213,6 +220,12 @@ static int virObjectEventOnceInit(void) ...@@ -213,6 +220,12 @@ static int virObjectEventOnceInit(void)
sizeof(virDomainEventIOError), sizeof(virDomainEventIOError),
virDomainEventIOErrorDispose))) virDomainEventIOErrorDispose)))
return -1; return -1;
if (!(virDomainEventGraphicsClass =
virClassNew(virDomainEventClass,
"virDomainEventGraphics",
sizeof(virDomainEventGraphics),
virDomainEventGraphicsDispose)))
return -1;
return 0; return 0;
} }
...@@ -245,28 +258,6 @@ static void virDomainEventDispose(void *obj) ...@@ -245,28 +258,6 @@ static void virDomainEventDispose(void *obj)
switch (virObjectEventGetEventID(event)) { switch (virObjectEventGetEventID(event)) {
case VIR_DOMAIN_EVENT_ID_GRAPHICS:
if (event->data.graphics.local) {
VIR_FREE(event->data.graphics.local->node);
VIR_FREE(event->data.graphics.local->service);
VIR_FREE(event->data.graphics.local);
}
if (event->data.graphics.remote) {
VIR_FREE(event->data.graphics.remote->node);
VIR_FREE(event->data.graphics.remote->service);
VIR_FREE(event->data.graphics.remote);
}
VIR_FREE(event->data.graphics.authScheme);
if (event->data.graphics.subject) {
size_t i;
for (i = 0; i < event->data.graphics.subject->nidentity; i++) {
VIR_FREE(event->data.graphics.subject->identities[i].type);
VIR_FREE(event->data.graphics.subject->identities[i].name);
}
VIR_FREE(event->data.graphics.subject);
}
break;
case VIR_DOMAIN_EVENT_ID_BLOCK_JOB: case VIR_DOMAIN_EVENT_ID_BLOCK_JOB:
VIR_FREE(event->data.blockJob.path); VIR_FREE(event->data.blockJob.path);
break; break;
...@@ -315,6 +306,32 @@ static void virDomainEventIOErrorDispose(void *obj) ...@@ -315,6 +306,32 @@ static void virDomainEventIOErrorDispose(void *obj)
VIR_FREE(event->reason); VIR_FREE(event->reason);
} }
static void virDomainEventGraphicsDispose(void *obj)
{
virDomainEventGraphicsPtr event = obj;
VIR_DEBUG("obj=%p", event);
if (event->local) {
VIR_FREE(event->local->node);
VIR_FREE(event->local->service);
VIR_FREE(event->local);
}
if (event->remote) {
VIR_FREE(event->remote->node);
VIR_FREE(event->remote->service);
VIR_FREE(event->remote);
}
VIR_FREE(event->authScheme);
if (event->subject) {
size_t i;
for (i = 0; i < event->subject->nidentity; i++) {
VIR_FREE(event->subject->identities[i].type);
VIR_FREE(event->subject->identities[i].name);
}
VIR_FREE(event->subject);
}
}
/** /**
* virObjectEventCallbackListFree: * virObjectEventCallbackListFree:
* @list: event callback list head * @list: event callback list head
...@@ -1081,62 +1098,62 @@ virDomainEventPtr virDomainEventIOErrorReasonNewFromObj(virDomainObjPtr obj, ...@@ -1081,62 +1098,62 @@ virDomainEventPtr virDomainEventIOErrorReasonNewFromObj(virDomainObjPtr obj,
virDomainEventPtr virDomainEventGraphicsNewFromDom(virDomainPtr dom, virDomainEventPtr virDomainEventGraphicsNewFromDom(virDomainPtr dom,
int phase, int phase,
virDomainEventGraphicsAddressPtr local, virDomainEventGraphicsAddressPtr local,
virDomainEventGraphicsAddressPtr remote, virDomainEventGraphicsAddressPtr remote,
const char *authScheme, const char *authScheme,
virDomainEventGraphicsSubjectPtr subject) virDomainEventGraphicsSubjectPtr subject)
{ {
virDomainEventPtr ev; virDomainEventGraphicsPtr ev;
if (virObjectEventInitialize() < 0) if (virObjectEventInitialize() < 0)
return NULL; return NULL;
if (!(ev = virDomainEventNew(virDomainEventClass, if (!(ev = virDomainEventNew(virDomainEventGraphicsClass,
VIR_DOMAIN_EVENT_ID_GRAPHICS, VIR_DOMAIN_EVENT_ID_GRAPHICS,
dom->id, dom->name, dom->uuid))) dom->id, dom->name, dom->uuid)))
return NULL; return NULL;
ev->data.graphics.phase = phase; ev->phase = phase;
if (VIR_STRDUP(ev->data.graphics.authScheme, authScheme) < 0) { if (VIR_STRDUP(ev->authScheme, authScheme) < 0) {
virObjectUnref(ev); virObjectUnref(ev);
return NULL; return NULL;
} }
ev->data.graphics.local = local; ev->local = local;
ev->data.graphics.remote = remote; ev->remote = remote;
ev->data.graphics.subject = subject; ev->subject = subject;
return ev; return (virDomainEventPtr)ev;
} }
virDomainEventPtr virDomainEventGraphicsNewFromObj(virDomainObjPtr obj, virDomainEventPtr virDomainEventGraphicsNewFromObj(virDomainObjPtr obj,
int phase, int phase,
virDomainEventGraphicsAddressPtr local, virDomainEventGraphicsAddressPtr local,
virDomainEventGraphicsAddressPtr remote, virDomainEventGraphicsAddressPtr remote,
const char *authScheme, const char *authScheme,
virDomainEventGraphicsSubjectPtr subject) virDomainEventGraphicsSubjectPtr subject)
{ {
virDomainEventPtr ev; virDomainEventGraphicsPtr ev;
if (virObjectEventInitialize() < 0) if (virObjectEventInitialize() < 0)
return NULL; return NULL;
if (!(ev = virDomainEventNew(virDomainEventClass, if (!(ev = virDomainEventNew(virDomainEventGraphicsClass,
VIR_DOMAIN_EVENT_ID_GRAPHICS, VIR_DOMAIN_EVENT_ID_GRAPHICS,
obj->def->id, obj->def->name, obj->def->id, obj->def->name,
obj->def->uuid))) obj->def->uuid)))
return NULL; return NULL;
ev->data.graphics.phase = phase; ev->phase = phase;
if (VIR_STRDUP(ev->data.graphics.authScheme, authScheme) < 0) { if (VIR_STRDUP(ev->authScheme, authScheme) < 0) {
virObjectUnref(ev); virObjectUnref(ev);
return NULL; return NULL;
} }
ev->data.graphics.local = local; ev->local = local;
ev->data.graphics.remote = remote; ev->remote = remote;
ev->data.graphics.subject = subject; ev->subject = subject;
return ev; return (virDomainEventPtr)ev;
} }
static virDomainEventPtr static virDomainEventPtr
...@@ -1600,14 +1617,19 @@ virDomainEventDispatchDefaultFunc(virConnectPtr conn, ...@@ -1600,14 +1617,19 @@ virDomainEventDispatchDefaultFunc(virConnectPtr conn,
} }
case VIR_DOMAIN_EVENT_ID_GRAPHICS: case VIR_DOMAIN_EVENT_ID_GRAPHICS:
((virConnectDomainEventGraphicsCallback)cb)(conn, dom, {
event->data.graphics.phase, virDomainEventGraphicsPtr graphicsEvent;
event->data.graphics.local,
event->data.graphics.remote, graphicsEvent = (virDomainEventGraphicsPtr)event;
event->data.graphics.authScheme, ((virConnectDomainEventGraphicsCallback)cb)(conn, dom,
event->data.graphics.subject, graphicsEvent->phase,
cbopaque); graphicsEvent->local,
goto cleanup; graphicsEvent->remote,
graphicsEvent->authScheme,
graphicsEvent->subject,
cbopaque);
goto cleanup;
}
case VIR_DOMAIN_EVENT_ID_CONTROL_ERROR: case VIR_DOMAIN_EVENT_ID_CONTROL_ERROR:
(cb)(conn, dom, (cb)(conn, dom,
......
...@@ -89,17 +89,17 @@ virDomainEventPtr virDomainEventIOErrorReasonNewFromObj(virDomainObjPtr obj, ...@@ -89,17 +89,17 @@ virDomainEventPtr virDomainEventIOErrorReasonNewFromObj(virDomainObjPtr obj,
const char *reason); const char *reason);
virDomainEventPtr virDomainEventGraphicsNewFromDom(virDomainPtr dom, virDomainEventPtr virDomainEventGraphicsNewFromDom(virDomainPtr dom,
int phase, int phase,
virDomainEventGraphicsAddressPtr local, virDomainEventGraphicsAddressPtr local,
virDomainEventGraphicsAddressPtr remote, virDomainEventGraphicsAddressPtr remote,
const char *authScheme, const char *authScheme,
virDomainEventGraphicsSubjectPtr subject); virDomainEventGraphicsSubjectPtr subject);
virDomainEventPtr virDomainEventGraphicsNewFromObj(virDomainObjPtr obj, virDomainEventPtr virDomainEventGraphicsNewFromObj(virDomainObjPtr obj,
int phase, int phase,
virDomainEventGraphicsAddressPtr local, virDomainEventGraphicsAddressPtr local,
virDomainEventGraphicsAddressPtr remote, virDomainEventGraphicsAddressPtr remote,
const char *authScheme, const char *authScheme,
virDomainEventGraphicsSubjectPtr subject); virDomainEventGraphicsSubjectPtr subject);
virDomainEventPtr virDomainEventControlErrorNewFromDom(virDomainPtr dom); virDomainEventPtr virDomainEventControlErrorNewFromDom(virDomainPtr dom);
virDomainEventPtr virDomainEventControlErrorNewFromObj(virDomainObjPtr obj); virDomainEventPtr virDomainEventControlErrorNewFromObj(virDomainObjPtr obj);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册