- use err(3) instead of errx(3) if errno is available to report why failed - let fail prior to daemon(3) if opening a nbd file is likely to fail after daemonizing to avoid silent failure exit - add missing 'ret = 1' when unix_socket_outgoing failed
Signed-off-by: Ryota Ozaki <ozaki.ry...@gmail.com> --- qemu-nbd.c | 17 ++++++++++++----- 1 files changed, 12 insertions(+), 5 deletions(-) diff --git a/qemu-nbd.c b/qemu-nbd.c index 7ef409f..d3e1814 100644 --- a/qemu-nbd.c +++ b/qemu-nbd.c @@ -324,7 +324,7 @@ int main(int argc, char **argv) if (disconnect) { fd = open(argv[optind], readonly ? O_RDONLY : O_RDWR); if (fd == -1) { - errx(EXIT_FAILURE, "Cannot open %s", argv[optind]); + err(EXIT_FAILURE, "Cannot open %s", argv[optind]); } nbd_disconnect(fd); @@ -343,25 +343,31 @@ int main(int argc, char **argv) return 1; } - if (bdrv_open(bs, argv[optind], flags) < 0) { - return 1; + if ((ret = bdrv_open(bs, argv[optind], flags)) < 0) { + errno = -ret; + err(EXIT_FAILURE, "Failed to bdrv_open '%s'", argv[optind]); } fd_size = bs->total_sectors * 512; if (partition != -1 && find_partition(bs, partition, &dev_offset, &fd_size)) { - errx(EXIT_FAILURE, "Could not find partition %d", partition); + err(EXIT_FAILURE, "Could not find partition %d", partition); } if (device) { pid_t pid; int sock; + /* want to fail before daemonizing */ + if (access(device, readonly ? R_OK : R_OK|W_OK) == -1) { + err(EXIT_FAILURE, "Could not access '%s'", device); + } + if (!verbose) { /* detach client and server */ if (daemon(0, 0) == -1) { - errx(EXIT_FAILURE, "Failed to daemonize"); + err(EXIT_FAILURE, "Failed to daemonize"); } } @@ -386,6 +392,7 @@ int main(int argc, char **argv) sock = unix_socket_outgoing(socket); if (sock == -1) { if (errno != ENOENT && errno != ECONNREFUSED) { + ret = 1; goto out; } sleep(1); /* wait children */ -- 1.6.5.2