libvirt/src/xen
Eric Blake b9dd878ff8 util: make it easier to grab only regular command exit
Auditing all callers of virCommandRun and virCommandWait that
passed a non-NULL pointer for exit status turned up some
interesting observations.  Many callers were merely passing
a pointer to avoid the overall command dying, but without
caring what the exit status was - but these callers would
be better off treating a child death by signal as an abnormal
exit.  Other callers were actually acting on the status, but
not all of them remembered to filter by WIFEXITED and convert
with WEXITSTATUS; depending on the platform, this can result
in a status being reported as 256 times too big.  And among
those that correctly parse the output, it gets rather verbose.
Finally, there were the callers that explicitly checked that
the status was 0, and gave their own message, but with fewer
details than what virCommand gives for free.

So the best idea is to move the complexity out of callers and
into virCommand - by default, we return the actual exit status
already cleaned through WEXITSTATUS and treat signals as a
failed command; but the few callers that care can ask for raw
status and act on it themselves.

* src/util/vircommand.h (virCommandRawStatus): New prototype.
* src/libvirt_private.syms (util/command.h): Export it.
* docs/internals/command.html.in: Document it.
* src/util/vircommand.c (virCommandRawStatus): New function.
(virCommandWait): Adjust semantics.
* tests/commandtest.c (test1): Test it.
* daemon/remote.c (remoteDispatchAuthPolkit): Adjust callers.
* src/access/viraccessdriverpolkit.c (virAccessDriverPolkitCheck):
Likewise.
* src/fdstream.c (virFDStreamCloseInt): Likewise.
* src/lxc/lxc_process.c (virLXCProcessStart): Likewise.
* src/qemu/qemu_command.c (qemuCreateInBridgePortWithHelper):
Likewise.
* src/xen/xen_driver.c (xenUnifiedXendProbe): Simplify.
* tests/reconnect.c (mymain): Likewise.
* tests/statstest.c (mymain): Likewise.
* src/bhyve/bhyve_process.c (virBhyveProcessStart)
(virBhyveProcessStop): Don't overwrite virCommand error.
* src/libvirt.c (virConnectAuthGainPolkit): Likewise.
* src/openvz/openvz_driver.c (openvzDomainGetBarrierLimit)
(openvzDomainSetBarrierLimit): Likewise.
* src/util/virebtables.c (virEbTablesOnceInit): Likewise.
* src/util/viriptables.c (virIpTablesOnceInit): Likewise.
* src/util/virnetdevveth.c (virNetDevVethCreate): Fix debug
message.
* src/qemu/qemu_capabilities.c (virQEMUCapsInitQMP): Add comment.
* src/storage/storage_backend_iscsi.c
(virStorageBackendISCSINodeUpdate): Likewise.

Signed-off-by: Eric Blake <eblake@redhat.com>
2014-03-03 12:40:32 -07:00
..
block_stats.c Convert 'int i' to 'size_t i' in src/{xen,xenapi,xenxs} files 2013-07-10 17:40:13 +01:00
block_stats.h Convert Xen domain stats/peek driver methods to use virDomainDefPtr 2013-05-21 16:11:39 +01:00
xen_driver.c util: make it easier to grab only regular command exit 2014-03-03 12:40:32 -07:00
xen_driver.h Use virObjectEventPtr instead of virDomainEventPtr 2013-12-10 12:45:21 +00:00
xen_hypervisor.c Don't call regfree() if regcomp() fails 2013-09-05 10:53:24 -06:00
xen_hypervisor.h Convert Xen domain stats/peek driver methods to use virDomainDefPtr 2013-05-21 16:11:39 +01:00
xen_inotify.c Use virObjectEventPtr instead of virDomainEventPtr 2013-12-10 12:45:21 +00:00
xen_inotify.h Simplify opening of Xen drivers 2013-05-09 13:16:19 +01:00
xend_internal.c xen: fix parsing xend http response 2014-01-28 18:32:49 -07:00
xend_internal.h Convert Xen domain core dump driver methods to use virDomainDefPtr 2013-05-21 16:11:39 +01:00
xm_internal.c maint: avoid 'const fooPtr' in all remaining places 2013-10-14 14:34:38 -06:00
xm_internal.h Convert Xen domain stats/peek driver methods to use virDomainDefPtr 2013-05-21 16:11:39 +01:00
xs_internal.c maint: align whitespaces with project conventions. 2014-01-20 14:35:08 +01:00
xs_internal.h Simplify the Xen domain get info/state driver methods 2013-05-09 13:16:20 +01:00