libxl: use libxl_fd_set_{cloexec,nonblock} helpers ... instead of open-coding them or not using them at all. This in particular fixes a build (and presumably also runtime) problem on old enough libc due to the recent introduction of a use of O_CLOEXEC. The other two changes are only of cleanup kind. Signed-off-by: Jan Beulich --- v2: Drop unnecessary logging (and result value corruption in the libxl__xc_domain_restore_done() case). --- 2014-07-25.orig/tools/libxl/libxl_create.c 2014-07-25 10:41:10.000000000 +0200 +++ 2014-07-25/tools/libxl/libxl_create.c 2014-07-28 09:23:18.000000000 +0200 @@ -977,7 +977,7 @@ void libxl__xc_domain_restore_done(libxl libxl_ctx *ctx = libxl__gc_owner(gc); char **vments = NULL, **localents = NULL; struct timeval start_time; - int i, esave, flags; + int i, esave; /* convenience aliases */ const uint32_t domid = dcs->guest_domid; @@ -1045,17 +1045,7 @@ out: } esave = errno; - - flags = fcntl(fd, F_GETFL); - if (flags == -1) { - LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "unable to get flags on restore fd"); - } else { - flags &= ~O_NONBLOCK; - if (fcntl(fd, F_SETFL, flags) == -1) - LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "unable to put restore fd" - " back to blocking mode"); - } - + libxl_fd_set_nonblock(ctx, fd, 0); errno = esave; domcreate_rebuild_done(egc, dcs, ret); } --- 2014-07-25.orig/tools/libxl/libxl_qmp.c 2014-07-25 10:41:10.000000000 +0200 +++ 2014-07-25/tools/libxl/libxl_qmp.c 2014-07-25 16:17:40.000000000 +0200 @@ -358,19 +358,14 @@ static int qmp_open(libxl__qmp_handler * int timeout) { int ret; - int flags = 0; int i = 0; qmp->qmp_fd = socket(AF_UNIX, SOCK_STREAM, 0); if (qmp->qmp_fd < 0) { return -1; } - if ((flags = fcntl(qmp->qmp_fd, F_GETFL)) == -1) { - flags = 0; - } - if (fcntl(qmp->qmp_fd, F_SETFL, flags | O_NONBLOCK) == -1) { - return -1; - } + ret = libxl_fd_set_nonblock(qmp->ctx, qmp->qmp_fd, 1); + if (ret) return -1; ret = libxl_fd_set_cloexec(qmp->ctx, qmp->qmp_fd, 1); if (ret) return -1; --- 2014-07-25.orig/tools/libxl/libxl_utils.c 2014-07-25 10:41:10.000000000 +0200 +++ 2014-07-25/tools/libxl/libxl_utils.c 2014-07-28 09:24:38.000000000 +0200 @@ -1047,11 +1047,16 @@ int libxl__random_bytes(libxl__gc *gc, u int fd; int ret; - fd = open(dev, O_RDONLY | O_CLOEXEC); + fd = open(dev, O_RDONLY); if (fd < 0) { LOGE(ERROR, "failed to open \"%s\"", dev); return ERROR_FAIL; } + ret = libxl_fd_set_cloexec(CTX, fd, 1); + if (ret) { + close(fd); + return ERROR_FAIL; + } ret = libxl_read_exactly(CTX, fd, buf, len, dev, NULL);