• E
    util: make it easier to grab only regular command exit · b9dd878f
    Eric Blake 提交于
    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: NEric Blake <eblake@redhat.com>
    b9dd878f
libvirt.c 607.7 KB