Right now, qemu-io's exit code is rather useless as it is usually 0. Except sometimes, then it's 1 in case of an error (mostly when you specify a filename as an argument and it cannot open that).
At the same time, most command functions' return values are rather useless as they are usually 0 (meaning "continue execution"). There is only a single function that breaks that pattern, which is "quit". On one hand, this is pointless because "quit" is in qemu-io.c, so it can easily signal that fact through a global (yet static) variable. On the other, it breaks the usual pattern of I/O functions returning error codes. This series resolves the overlap between both issues by making the command functions' return error values instead of whether to continue execution or not, and thus makes qemu-io return 1 if any of the commands executed has failed and 0 only if all of them have succeeded. Patch 5 showcases how that may be useful for iotests. See also: https://bugzilla.redhat.com/show_bug.cgi?id=1519617 v2: - Patch 2: Added a comment on the interface of command functions (their parameters and their return value) [Eric] - (Decided against replacing 0/1 by EXIT_SUCCESS/EXIT_FAILURE, because although I personally would prefer them slightly, neither are ever used in qemu-io so far.) git-backport-diff against v1: Key: [----] : patches are identical [####] : number of functional differences between upstream/downstream patch [down] : patch is downstream-only The flags [FC] indicate (F)unctional and (C)ontextual differences, respectively 001/5:[----] [-C] 'qemu-io: Drop command functions' return values' 002/5:[0005] [FC] 'qemu-io: Let command functions return error code' 003/5:[----] [--] 'qemu-io: Exit with error when a command failed' 004/5:[----] [--] 'iotests.py: Add qemu_io_silent' 005/5:[----] [-C] 'iotests: Let 216 make use of qemu-io's exit code' Max Reitz (5): qemu-io: Drop command functions' return values qemu-io: Let command functions return error code qemu-io: Exit with error when a command failed iotests.py: Add qemu_io_silent iotests: Let 216 make use of qemu-io's exit code include/qemu-io.h | 9 +- qemu-io-cmds.c | 276 ++++++++++++++++++++++++------------------ qemu-io.c | 62 +++++++--- tests/qemu-iotests/216 | 23 ++-- tests/qemu-iotests/216.out | 17 +-- tests/qemu-iotests/iotests.py | 9 ++ 6 files changed, 231 insertions(+), 165 deletions(-) -- 2.14.3