mirror of https://gitee.com/openkylin/libvirt.git
qemu: eliminate nested switch, simplify code
qemuBuildHostNetStr had a switch-within-a-switch where both were looking at the same variable. This was apparently to take advantage of code common to three different cases (while also taking care of some code that was different). However, there were only 2 lines common to all, one of those can be eliminated by merging it into the virAsprintfs that are in each case. On top of that, all the extra empty cases cause Coverity complaints (because they are unreachable), but absence of the empty cases causes a compile error due to "enumeration value not handled in switch". The solution is to just make each toplevel case independent, folding in the common code to each.
This commit is contained in:
parent
1133ee2b38
commit
ecde15910a
|
@ -2721,8 +2721,7 @@ qemuBuildHostNetStr(virDomainNetDefPtr net,
|
|||
case VIR_DOMAIN_NET_TYPE_NETWORK:
|
||||
case VIR_DOMAIN_NET_TYPE_BRIDGE:
|
||||
case VIR_DOMAIN_NET_TYPE_DIRECT:
|
||||
virBufferAddLit(&buf, "tap");
|
||||
virBufferAsprintf(&buf, "%cfd=%s", type_sep, tapfd);
|
||||
virBufferAsprintf(&buf, "tap%cfd=%s", type_sep, tapfd);
|
||||
type_sep = ',';
|
||||
is_tap = true;
|
||||
break;
|
||||
|
@ -2742,40 +2741,28 @@ qemuBuildHostNetStr(virDomainNetDefPtr net,
|
|||
break;
|
||||
|
||||
case VIR_DOMAIN_NET_TYPE_CLIENT:
|
||||
virBufferAsprintf(&buf, "socket%cconnect=%s:%d",
|
||||
type_sep,
|
||||
net->data.socket.address,
|
||||
net->data.socket.port);
|
||||
type_sep = ',';
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_NET_TYPE_SERVER:
|
||||
virBufferAsprintf(&buf, "socket%clisten=%s:%d",
|
||||
type_sep,
|
||||
net->data.socket.address,
|
||||
net->data.socket.port);
|
||||
type_sep = ',';
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_NET_TYPE_MCAST:
|
||||
virBufferAddLit(&buf, "socket");
|
||||
switch (netType) {
|
||||
case VIR_DOMAIN_NET_TYPE_CLIENT:
|
||||
virBufferAsprintf(&buf, "%cconnect=%s:%d",
|
||||
type_sep,
|
||||
net->data.socket.address,
|
||||
net->data.socket.port);
|
||||
break;
|
||||
case VIR_DOMAIN_NET_TYPE_SERVER:
|
||||
virBufferAsprintf(&buf, "%clisten=%s:%d",
|
||||
type_sep,
|
||||
net->data.socket.address,
|
||||
net->data.socket.port);
|
||||
break;
|
||||
case VIR_DOMAIN_NET_TYPE_MCAST:
|
||||
virBufferAsprintf(&buf, "%cmcast=%s:%d",
|
||||
type_sep,
|
||||
net->data.socket.address,
|
||||
net->data.socket.port);
|
||||
break;
|
||||
case VIR_DOMAIN_NET_TYPE_USER:
|
||||
case VIR_DOMAIN_NET_TYPE_ETHERNET:
|
||||
case VIR_DOMAIN_NET_TYPE_NETWORK:
|
||||
case VIR_DOMAIN_NET_TYPE_BRIDGE:
|
||||
case VIR_DOMAIN_NET_TYPE_INTERNAL:
|
||||
case VIR_DOMAIN_NET_TYPE_DIRECT:
|
||||
case VIR_DOMAIN_NET_TYPE_HOSTDEV:
|
||||
case VIR_DOMAIN_NET_TYPE_LAST:
|
||||
break;
|
||||
}
|
||||
type_sep = ',';
|
||||
break;
|
||||
virBufferAsprintf(&buf, "socket%cmcast=%s:%d",
|
||||
type_sep,
|
||||
net->data.socket.address,
|
||||
net->data.socket.port);
|
||||
type_sep = ',';
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_NET_TYPE_USER:
|
||||
default:
|
||||
|
|
Loading…
Reference in New Issue