提交 1825c655 编写于 作者: J Jim Meyering

domain_conf.c: avoid a leak and the need for "cleanup:" block

* src/conf/domain_conf.c (virDomainChrDefFormat): Plug a leak on
an error path, and at the same time, eliminate the need for a
"cleanup:" block.  Before, the "return -1" after the switch
would leak an "addr" string.  Now, by reversing the port,addr-
getting blocks we can free "addr" immediately and skip the goto.
上级 50b6c95d
/*
* domain_conf.c: domain XML processing
*
* Copyright (C) 2006-2009 Red Hat, Inc.
* Copyright (C) 2006-2010 Red Hat, Inc.
* Copyright (C) 2006-2008 Daniel P. Berrange
*
* This library is free software; you can redistribute it and/or
......@@ -4831,7 +4831,6 @@ virDomainChrDefFormat(virConnectPtr conn,
const char *targetName = virDomainChrTargetTypeToString(def->targetType);
const char *elementName;
const char *addr = NULL;
int ret = 0;
switch (def->targetType) {
......@@ -4847,8 +4846,7 @@ virDomainChrDefFormat(virConnectPtr conn,
if (!type) {
virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR,
_("unexpected char type %d"), def->type);
ret = -1;
goto cleanup;
return -1;
}
/* Compat with legacy <console tty='/dev/pts/5'/> syntax */
......@@ -4931,23 +4929,25 @@ virDomainChrDefFormat(virConnectPtr conn,
switch (def->targetType) {
case VIR_DOMAIN_CHR_TARGET_TYPE_GUESTFWD:
addr = virSocketFormatAddr(def->target.addr);
if (addr == NULL) {
virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR, "%s",
_("Unable to format guestfwd address"));
ret = -1;
goto cleanup;
}
int port = virSocketGetPort(def->target.addr);
if (port < 0) {
virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR, "%s",
_("Unable to format guestfwd port"));
ret = -1;
goto cleanup;
{
int port = virSocketGetPort(def->target.addr);
if (port < 0) {
virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR, "%s",
_("Unable to format guestfwd port"));
return -1;
}
const char *addr = virSocketFormatAddr(def->target.addr);
if (addr == NULL) {
virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR, "%s",
_("Unable to format guestfwd address"));
return -1;
}
virBufferVSprintf(buf,
" <target type='guestfwd' address='%s' port='%d'/>\n",
addr, port);
VIR_FREE(addr);
break;
}
virBufferVSprintf(buf, " <target type='guestfwd' address='%s' port='%d'/>\n",
addr, port);
break;
case VIR_DOMAIN_CHR_TARGET_TYPE_PARALLEL:
case VIR_DOMAIN_CHR_TARGET_TYPE_SERIAL:
......@@ -4969,9 +4969,6 @@ virDomainChrDefFormat(virConnectPtr conn,
virBufferVSprintf(buf, " </%s>\n",
elementName);
cleanup:
VIR_FREE(addr);
return ret;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册