mirror of https://gitee.com/openkylin/libvirt.git
qemu: drop virCapsPtr param & vars from many APIs
Now that the domain XML APIs don't use virCapsPtr we can stop passing it around many QEMU driver methods. Reviewed-by: Michal Privoznik <mprivozn@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
575d9d2504
commit
bc1676fc2f
|
@ -78,7 +78,6 @@ qemuCheckpointObjFromCheckpoint(virDomainObjPtr vm,
|
|||
static int
|
||||
qemuCheckpointWriteMetadata(virDomainObjPtr vm,
|
||||
virDomainMomentObjPtr checkpoint,
|
||||
virCapsPtr caps G_GNUC_UNUSED,
|
||||
virDomainXMLOptionPtr xmlopt,
|
||||
const char *checkpointDir)
|
||||
{
|
||||
|
@ -197,7 +196,7 @@ qemuCheckpointDiscard(virQEMUDriverPtr driver,
|
|||
virDomainCheckpointSetCurrent(vm->checkpoints, NULL);
|
||||
if (update_parent && parent) {
|
||||
virDomainCheckpointSetCurrent(vm->checkpoints, parent);
|
||||
if (qemuCheckpointWriteMetadata(vm, parent, driver->caps,
|
||||
if (qemuCheckpointWriteMetadata(vm, parent,
|
||||
driver->xmlopt,
|
||||
cfg->checkpointDir) < 0) {
|
||||
VIR_WARN("failed to set parent checkpoint '%s' as current",
|
||||
|
@ -239,7 +238,6 @@ qemuCheckpointDiscardAllMetadata(virQEMUDriverPtr driver,
|
|||
/* Called inside job lock */
|
||||
static int
|
||||
qemuCheckpointPrepare(virQEMUDriverPtr driver,
|
||||
virCapsPtr caps G_GNUC_UNUSED,
|
||||
virDomainObjPtr vm,
|
||||
virDomainCheckpointDefPtr def)
|
||||
{
|
||||
|
@ -373,7 +371,6 @@ qemuCheckpointRedefine(virQEMUDriverPtr driver,
|
|||
int
|
||||
qemuCheckpointCreateCommon(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
virCapsPtr caps,
|
||||
virDomainCheckpointDefPtr *def,
|
||||
virJSONValuePtr *actions,
|
||||
virDomainMomentObjPtr *chk)
|
||||
|
@ -381,7 +378,7 @@ qemuCheckpointCreateCommon(virQEMUDriverPtr driver,
|
|||
g_autoptr(virJSONValue) tmpactions = NULL;
|
||||
virDomainMomentObjPtr parent;
|
||||
|
||||
if (qemuCheckpointPrepare(driver, caps, vm, *def) < 0)
|
||||
if (qemuCheckpointPrepare(driver, vm, *def) < 0)
|
||||
return -1;
|
||||
|
||||
if ((parent = virDomainCheckpointGetCurrent(vm->checkpoints)))
|
||||
|
@ -406,14 +403,13 @@ qemuCheckpointCreateCommon(virQEMUDriverPtr driver,
|
|||
static virDomainMomentObjPtr
|
||||
qemuCheckpointCreate(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
virCapsPtr caps,
|
||||
virDomainCheckpointDefPtr *def)
|
||||
{
|
||||
g_autoptr(virJSONValue) actions = NULL;
|
||||
virDomainMomentObjPtr chk = NULL;
|
||||
int rc;
|
||||
|
||||
if (qemuCheckpointCreateCommon(driver, vm, caps, def, &actions, &chk) < 0)
|
||||
if (qemuCheckpointCreateCommon(driver, vm, def, &actions, &chk) < 0)
|
||||
return NULL;
|
||||
|
||||
qemuDomainObjEnterMonitor(driver, vm);
|
||||
|
@ -437,7 +433,7 @@ qemuCheckpointCreateFinalize(virQEMUDriverPtr driver,
|
|||
if (update_current)
|
||||
virDomainCheckpointSetCurrent(vm->checkpoints, chk);
|
||||
|
||||
if (qemuCheckpointWriteMetadata(vm, chk, driver->caps,
|
||||
if (qemuCheckpointWriteMetadata(vm, chk,
|
||||
driver->xmlopt,
|
||||
cfg->checkpointDir) < 0) {
|
||||
/* if writing of metadata fails, error out rather than trying
|
||||
|
@ -469,7 +465,6 @@ qemuCheckpointCreateXML(virDomainPtr domain,
|
|||
bool redefine = flags & VIR_DOMAIN_CHECKPOINT_CREATE_REDEFINE;
|
||||
unsigned int parse_flags = 0;
|
||||
g_autoptr(virQEMUDriverConfig) cfg = NULL;
|
||||
g_autoptr(virCaps) caps = NULL;
|
||||
g_autoptr(virDomainCheckpointDef) def = NULL;
|
||||
|
||||
virCheckFlags(VIR_DOMAIN_CHECKPOINT_CREATE_REDEFINE, NULL);
|
||||
|
@ -485,9 +480,6 @@ qemuCheckpointCreateXML(virDomainPtr domain,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
|
||||
return NULL;
|
||||
|
||||
if (!virDomainObjIsActive(vm)) {
|
||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||
_("cannot create checkpoint for inactive domain"));
|
||||
|
@ -506,7 +498,7 @@ qemuCheckpointCreateXML(virDomainPtr domain,
|
|||
if (redefine) {
|
||||
chk = qemuCheckpointRedefine(driver, vm, &def, &update_current);
|
||||
} else {
|
||||
chk = qemuCheckpointCreate(driver, vm, caps, &def);
|
||||
chk = qemuCheckpointCreate(driver, vm, &def);
|
||||
}
|
||||
|
||||
if (!chk)
|
||||
|
@ -557,7 +549,6 @@ struct virQEMUCheckpointReparent {
|
|||
const char *dir;
|
||||
virDomainMomentObjPtr parent;
|
||||
virDomainObjPtr vm;
|
||||
virCapsPtr caps;
|
||||
virDomainXMLOptionPtr xmlopt;
|
||||
int err;
|
||||
};
|
||||
|
@ -579,7 +570,7 @@ qemuCheckpointReparentChildren(void *payload,
|
|||
if (rep->parent->def)
|
||||
moment->def->parent_name = g_strdup(rep->parent->def->name);
|
||||
|
||||
rep->err = qemuCheckpointWriteMetadata(rep->vm, moment, rep->caps,
|
||||
rep->err = qemuCheckpointWriteMetadata(rep->vm, moment,
|
||||
rep->xmlopt, rep->dir);
|
||||
return 0;
|
||||
}
|
||||
|
@ -639,7 +630,7 @@ qemuCheckpointDelete(virDomainObjPtr vm,
|
|||
if (rem.found) {
|
||||
virDomainCheckpointSetCurrent(vm->checkpoints, chk);
|
||||
if (flags & VIR_DOMAIN_CHECKPOINT_DELETE_CHILDREN_ONLY) {
|
||||
if (qemuCheckpointWriteMetadata(vm, chk, driver->caps,
|
||||
if (qemuCheckpointWriteMetadata(vm, chk,
|
||||
driver->xmlopt,
|
||||
cfg->checkpointDir) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
|
@ -655,7 +646,6 @@ qemuCheckpointDelete(virDomainObjPtr vm,
|
|||
rep.parent = chk->parent;
|
||||
rep.vm = vm;
|
||||
rep.err = 0;
|
||||
rep.caps = driver->caps;
|
||||
rep.xmlopt = driver->xmlopt;
|
||||
virDomainMomentForEachChild(chk, qemuCheckpointReparentChildren,
|
||||
&rep);
|
||||
|
|
|
@ -57,7 +57,6 @@ qemuCheckpointDelete(virDomainObjPtr vm,
|
|||
int
|
||||
qemuCheckpointCreateCommon(virQEMUDriverPtr driver,
|
||||
virDomainObjPtr vm,
|
||||
virCapsPtr caps,
|
||||
virDomainCheckpointDefPtr *def,
|
||||
virJSONValuePtr *actions,
|
||||
virDomainMomentObjPtr *chk);
|
||||
|
|
|
@ -9713,7 +9713,6 @@ qemuFindQemuImgBinary(virQEMUDriverPtr driver)
|
|||
int
|
||||
qemuDomainSnapshotWriteMetadata(virDomainObjPtr vm,
|
||||
virDomainMomentObjPtr snapshot,
|
||||
virCapsPtr caps G_GNUC_UNUSED,
|
||||
virDomainXMLOptionPtr xmlopt,
|
||||
const char *snapshotDir)
|
||||
{
|
||||
|
@ -9886,7 +9885,7 @@ qemuDomainSnapshotDiscard(virQEMUDriverPtr driver,
|
|||
snap->def->parent_name);
|
||||
} else {
|
||||
virDomainSnapshotSetCurrent(vm->snapshots, parentsnap);
|
||||
if (qemuDomainSnapshotWriteMetadata(vm, parentsnap, driver->caps,
|
||||
if (qemuDomainSnapshotWriteMetadata(vm, parentsnap,
|
||||
driver->xmlopt,
|
||||
cfg->snapshotDir) < 0) {
|
||||
VIR_WARN("failed to set parent snapshot '%s' as current",
|
||||
|
|
|
@ -763,7 +763,6 @@ const char *qemuFindQemuImgBinary(virQEMUDriverPtr driver);
|
|||
|
||||
int qemuDomainSnapshotWriteMetadata(virDomainObjPtr vm,
|
||||
virDomainMomentObjPtr snapshot,
|
||||
virCapsPtr caps,
|
||||
virDomainXMLOptionPtr xmlopt,
|
||||
const char *snapshotDir);
|
||||
|
||||
|
|
|
@ -8063,7 +8063,6 @@ qemuCheckDiskConfigAgainstDomain(const virDomainDef *def,
|
|||
static int
|
||||
qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef,
|
||||
virDomainDeviceDefPtr dev,
|
||||
virCapsPtr caps G_GNUC_UNUSED,
|
||||
virQEMUCapsPtr qemuCaps,
|
||||
unsigned int parse_flags,
|
||||
virDomainXMLOptionPtr xmlopt)
|
||||
|
@ -8273,7 +8272,6 @@ qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef,
|
|||
static int
|
||||
qemuDomainDetachDeviceConfig(virDomainDefPtr vmdef,
|
||||
virDomainDeviceDefPtr dev,
|
||||
virCapsPtr caps G_GNUC_UNUSED,
|
||||
virQEMUCapsPtr qemuCaps,
|
||||
unsigned int parse_flags,
|
||||
virDomainXMLOptionPtr xmlopt)
|
||||
|
@ -8475,7 +8473,6 @@ qemuDomainDetachDeviceConfig(virDomainDefPtr vmdef,
|
|||
static int
|
||||
qemuDomainUpdateDeviceConfig(virDomainDefPtr vmdef,
|
||||
virDomainDeviceDefPtr dev,
|
||||
virCapsPtr caps G_GNUC_UNUSED,
|
||||
virQEMUCapsPtr qemuCaps,
|
||||
unsigned int parse_flags,
|
||||
virDomainXMLOptionPtr xmlopt)
|
||||
|
@ -8592,7 +8589,6 @@ qemuDomainAttachDeviceLiveAndConfig(virDomainObjPtr vm,
|
|||
virDomainDeviceDefPtr devConf = NULL;
|
||||
virDomainDeviceDefPtr devLive = NULL;
|
||||
int ret = -1;
|
||||
g_autoptr(virCaps) caps = NULL;
|
||||
unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE |
|
||||
VIR_DOMAIN_DEF_PARSE_ABI_UPDATE;
|
||||
|
||||
|
@ -8601,9 +8597,6 @@ qemuDomainAttachDeviceLiveAndConfig(virDomainObjPtr vm,
|
|||
|
||||
cfg = virQEMUDriverGetConfig(driver);
|
||||
|
||||
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
|
||||
goto cleanup;
|
||||
|
||||
/* The config and live post processing address auto-generation algorithms
|
||||
* rely on the correct vm->def or vm->newDef being passed, so call the
|
||||
* device parse based on which definition is in use */
|
||||
|
@ -8627,7 +8620,7 @@ qemuDomainAttachDeviceLiveAndConfig(virDomainObjPtr vm,
|
|||
false) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (qemuDomainAttachDeviceConfig(vmdef, devConf, caps, priv->qemuCaps,
|
||||
if (qemuDomainAttachDeviceConfig(vmdef, devConf, priv->qemuCaps,
|
||||
parse_flags,
|
||||
driver->xmlopt) < 0)
|
||||
goto cleanup;
|
||||
|
@ -8733,7 +8726,6 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom,
|
|||
bool force = (flags & VIR_DOMAIN_DEVICE_MODIFY_FORCE) != 0;
|
||||
int ret = -1;
|
||||
g_autoptr(virQEMUDriverConfig) cfg = NULL;
|
||||
g_autoptr(virCaps) caps = NULL;
|
||||
unsigned int parse_flags = 0;
|
||||
|
||||
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
|
||||
|
@ -8744,9 +8736,6 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom,
|
|||
|
||||
cfg = virQEMUDriverGetConfig(driver);
|
||||
|
||||
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
|
||||
goto cleanup;
|
||||
|
||||
if (!(vm = qemuDomainObjFromDomain(dom)))
|
||||
goto cleanup;
|
||||
|
||||
|
@ -8792,7 +8781,7 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom,
|
|||
|
||||
/* virDomainDefCompatibleDevice call is delayed until we know the
|
||||
* device we're going to update. */
|
||||
if ((ret = qemuDomainUpdateDeviceConfig(vmdef, dev, caps, priv->qemuCaps,
|
||||
if ((ret = qemuDomainUpdateDeviceConfig(vmdef, dev, priv->qemuCaps,
|
||||
parse_flags,
|
||||
driver->xmlopt)) < 0)
|
||||
goto endjob;
|
||||
|
@ -8843,7 +8832,6 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriverPtr driver,
|
|||
unsigned int flags)
|
||||
{
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
g_autoptr(virCaps) caps = NULL;
|
||||
g_autoptr(virQEMUDriverConfig) cfg = NULL;
|
||||
virDomainDeviceDefPtr dev = NULL, dev_copy = NULL;
|
||||
unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE;
|
||||
|
@ -8853,9 +8841,6 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriverPtr driver,
|
|||
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
|
||||
VIR_DOMAIN_AFFECT_CONFIG, -1);
|
||||
|
||||
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
|
||||
goto cleanup;
|
||||
|
||||
cfg = virQEMUDriverGetConfig(driver);
|
||||
|
||||
if ((flags & VIR_DOMAIN_AFFECT_CONFIG) &&
|
||||
|
@ -8886,7 +8871,7 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriverPtr driver,
|
|||
if (!vmdef)
|
||||
goto cleanup;
|
||||
|
||||
if (qemuDomainDetachDeviceConfig(vmdef, dev, caps, priv->qemuCaps,
|
||||
if (qemuDomainDetachDeviceConfig(vmdef, dev, priv->qemuCaps,
|
||||
parse_flags,
|
||||
driver->xmlopt) < 0)
|
||||
goto cleanup;
|
||||
|
@ -8937,7 +8922,6 @@ qemuDomainDetachDeviceAliasLiveAndConfig(virQEMUDriverPtr driver,
|
|||
unsigned int flags)
|
||||
{
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
g_autoptr(virCaps) caps = NULL;
|
||||
g_autoptr(virQEMUDriverConfig) cfg = NULL;
|
||||
virDomainDefPtr def = NULL;
|
||||
virDomainDefPtr persistentDef = NULL;
|
||||
|
@ -8948,9 +8932,6 @@ qemuDomainDetachDeviceAliasLiveAndConfig(virQEMUDriverPtr driver,
|
|||
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
|
||||
VIR_DOMAIN_AFFECT_CONFIG, -1);
|
||||
|
||||
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
|
||||
goto cleanup;
|
||||
|
||||
cfg = virQEMUDriverGetConfig(driver);
|
||||
|
||||
if ((flags & VIR_DOMAIN_AFFECT_CONFIG) &&
|
||||
|
@ -8970,7 +8951,7 @@ qemuDomainDetachDeviceAliasLiveAndConfig(virQEMUDriverPtr driver,
|
|||
if (virDomainDefFindDevice(vmdef, alias, &dev, true) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (qemuDomainDetachDeviceConfig(vmdef, &dev, caps, priv->qemuCaps,
|
||||
if (qemuDomainDetachDeviceConfig(vmdef, &dev, priv->qemuCaps,
|
||||
parse_flags, driver->xmlopt) < 0)
|
||||
goto cleanup;
|
||||
}
|
||||
|
@ -16029,7 +16010,7 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain,
|
|||
if (snapshot && !(flags & VIR_DOMAIN_SNAPSHOT_CREATE_NO_METADATA)) {
|
||||
if (update_current)
|
||||
virDomainSnapshotSetCurrent(vm->snapshots, snap);
|
||||
if (qemuDomainSnapshotWriteMetadata(vm, snap, driver->caps,
|
||||
if (qemuDomainSnapshotWriteMetadata(vm, snap,
|
||||
driver->xmlopt,
|
||||
cfg->snapshotDir) < 0) {
|
||||
/* if writing of metadata fails, error out rather than trying
|
||||
|
@ -16855,7 +16836,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
|
|||
cleanup:
|
||||
if (ret == 0) {
|
||||
virDomainSnapshotSetCurrent(vm->snapshots, snap);
|
||||
if (qemuDomainSnapshotWriteMetadata(vm, snap, driver->caps,
|
||||
if (qemuDomainSnapshotWriteMetadata(vm, snap,
|
||||
driver->xmlopt,
|
||||
cfg->snapshotDir) < 0) {
|
||||
virDomainSnapshotSetCurrent(vm->snapshots, NULL);
|
||||
|
@ -16889,11 +16870,10 @@ struct _virQEMUMomentReparent {
|
|||
const char *dir;
|
||||
virDomainMomentObjPtr parent;
|
||||
virDomainObjPtr vm;
|
||||
virCapsPtr caps;
|
||||
virDomainXMLOptionPtr xmlopt;
|
||||
int err;
|
||||
int (*writeMetadata)(virDomainObjPtr, virDomainMomentObjPtr,
|
||||
virCapsPtr, virDomainXMLOptionPtr, const char *);
|
||||
virDomainXMLOptionPtr, const char *);
|
||||
};
|
||||
|
||||
|
||||
|
@ -16913,7 +16893,7 @@ qemuDomainMomentReparentChildren(void *payload,
|
|||
if (rep->parent->def)
|
||||
moment->def->parent_name = g_strdup(rep->parent->def->name);
|
||||
|
||||
rep->err = rep->writeMetadata(rep->vm, moment, rep->caps, rep->xmlopt,
|
||||
rep->err = rep->writeMetadata(rep->vm, moment, rep->xmlopt,
|
||||
rep->dir);
|
||||
return 0;
|
||||
}
|
||||
|
@ -16984,7 +16964,7 @@ qemuDomainSnapshotDelete(virDomainSnapshotPtr snapshot,
|
|||
if (rem.found) {
|
||||
virDomainSnapshotSetCurrent(vm->snapshots, snap);
|
||||
if (flags & VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY) {
|
||||
if (qemuDomainSnapshotWriteMetadata(vm, snap, driver->caps,
|
||||
if (qemuDomainSnapshotWriteMetadata(vm, snap,
|
||||
driver->xmlopt,
|
||||
cfg->snapshotDir) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
|
@ -17000,7 +16980,6 @@ qemuDomainSnapshotDelete(virDomainSnapshotPtr snapshot,
|
|||
rep.parent = snap->parent;
|
||||
rep.vm = vm;
|
||||
rep.err = 0;
|
||||
rep.caps = driver->caps;
|
||||
rep.xmlopt = driver->xmlopt;
|
||||
rep.writeMetadata = qemuDomainSnapshotWriteMetadata;
|
||||
virDomainMomentForEachChild(snap,
|
||||
|
|
|
@ -6725,7 +6725,6 @@ qemuProcessLaunch(virConnectPtr conn,
|
|||
virCommandPtr cmd = NULL;
|
||||
struct qemuProcessHookData hookData;
|
||||
virQEMUDriverConfigPtr cfg;
|
||||
virCapsPtr caps = NULL;
|
||||
size_t nnicindexes = 0;
|
||||
int *nicindexes = NULL;
|
||||
size_t i;
|
||||
|
@ -6762,9 +6761,6 @@ qemuProcessLaunch(virConnectPtr conn,
|
|||
/* We don't increase cfg's reference counter here. */
|
||||
hookData.cfg = cfg;
|
||||
|
||||
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
|
||||
goto cleanup;
|
||||
|
||||
VIR_DEBUG("Creating domain log file");
|
||||
if (!(logCtxt = qemuDomainLogContextNew(driver, vm,
|
||||
QEMU_DOMAIN_LOG_CONTEXT_MODE_START))) {
|
||||
|
@ -7042,7 +7038,6 @@ qemuProcessLaunch(virConnectPtr conn,
|
|||
virCommandFree(cmd);
|
||||
virObjectUnref(logCtxt);
|
||||
virObjectUnref(cfg);
|
||||
virObjectUnref(caps);
|
||||
VIR_FREE(nicindexes);
|
||||
return ret;
|
||||
}
|
||||
|
@ -8009,7 +8004,6 @@ qemuProcessReconnect(void *opaque)
|
|||
size_t i;
|
||||
unsigned int stopFlags = 0;
|
||||
bool jobStarted = false;
|
||||
virCapsPtr caps = NULL;
|
||||
bool retry = true;
|
||||
bool tryMonReconn = false;
|
||||
|
||||
|
@ -8024,9 +8018,6 @@ qemuProcessReconnect(void *opaque)
|
|||
cfg = virQEMUDriverGetConfig(driver);
|
||||
priv = obj->privateData;
|
||||
|
||||
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
|
||||
goto error;
|
||||
|
||||
if (qemuDomainObjBeginJob(driver, obj, QEMU_JOB_MODIFY) < 0)
|
||||
goto error;
|
||||
jobStarted = true;
|
||||
|
@ -8257,7 +8248,6 @@ qemuProcessReconnect(void *opaque)
|
|||
}
|
||||
virDomainObjEndAPI(&obj);
|
||||
virObjectUnref(cfg);
|
||||
virObjectUnref(caps);
|
||||
virNWFilterUnlockFilterUpdates();
|
||||
virIdentitySetCurrent(NULL);
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue