mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
snapshot: Improve logic of virDomainMomentMoveChildren
Even though Coverity can prove that 'last' is always set if the prior
loop executed, gcc 8.0.1 cannot:
CC conf/libvirt_conf_la-virdomainmomentobjlist.lo
../../src/conf/virdomainmomentobjlist.c: In function 'virDomainMomentMoveChildren':
../../src/conf/virdomainmomentobjlist.c:178:19: error: 'last' may be used uninitialized in this function [-Werror=maybe-uninitialized]
last->sibling = to->first_child;
~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
Rewrite the loop to a form that should be easier for static analysis
to work with.
Fixes: ced0898f86
Reported-by: Bjoern Walk <bwalk@linux.ibm.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
3f7cba3f5e
commit
83b1808ca2
@ -164,18 +164,19 @@ void
|
||||
virDomainMomentMoveChildren(virDomainMomentObjPtr from,
|
||||
virDomainMomentObjPtr to)
|
||||
{
|
||||
virDomainMomentObjPtr child;
|
||||
virDomainMomentObjPtr last;
|
||||
virDomainMomentObjPtr child = from->first_child;
|
||||
|
||||
if (!from->first_child)
|
||||
if (!from->nchildren)
|
||||
return;
|
||||
for (child = from->first_child; child; child = child->sibling) {
|
||||
while (child) {
|
||||
child->parent = to;
|
||||
if (!child->sibling)
|
||||
last = child;
|
||||
if (!child->sibling) {
|
||||
child->sibling = to->first_child;
|
||||
break;
|
||||
}
|
||||
child = child->sibling;
|
||||
}
|
||||
to->nchildren += from->nchildren;
|
||||
last->sibling = to->first_child;
|
||||
to->first_child = from->first_child;
|
||||
from->nchildren = 0;
|
||||
from->first_child = NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user