From: Eric Blake Date: Thu, 7 Jul 2011 23:42:05 +0000 (-0600) Subject: build: don't hand-roll cloexec code X-Git-Tag: v0.9.4-rc1~188 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ff98359d51f44455b93b39a892c206c664c2858b;p=thirdparty%2Flibvirt.git build: don't hand-roll cloexec code No need to repeat common code. * bootstrap.conf (gnulib_modules): Import calloc-posix. * src/util/bridge.c (brInit): Use virSetCloseExec. (brSetInterfaceUp): Adjust flags name. * src/uml/uml_driver.c (umlSetCloseExec): Delete. (umlStartVMDaemon): Use util version instead. --- diff --git a/bootstrap.conf b/bootstrap.conf index 3c3d0e07de..2fc457e8ac 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -27,6 +27,7 @@ byteswap c-ctype c-strcase c-strcasestr +calloc-posix canonicalize-lgpl chown close diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index da91687c10..6eede55b40 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -114,19 +114,6 @@ static int umlOpenMonitor(struct uml_driver *driver, static int umlReadPidFile(struct uml_driver *driver, virDomainObjPtr vm); -static int umlSetCloseExec(int fd) { - int flags; - if ((flags = fcntl(fd, F_GETFD)) < 0) - goto error; - flags |= FD_CLOEXEC; - if ((fcntl(fd, F_SETFD, flags)) < 0) - goto error; - return 0; - error: - VIR_ERROR(_("Failed to set close-on-exec file descriptor flag")); - return -1; -} - static int umlStartVMDaemon(virConnectPtr conn, struct uml_driver *driver, virDomainObjPtr vm); @@ -889,9 +876,9 @@ static int umlStartVMDaemon(virConnectPtr conn, } VIR_FREE(logfile); - if (umlSetCloseExec(logfd) < 0) { - virReportSystemError(errno, - "%s", _("Unable to set VM logfile close-on-exec flag")); + if (virSetCloseExec(logfd) < 0) { + virReportSystemError(errno, "%s", + _("Unable to set VM logfile close-on-exec flag")); VIR_FORCE_CLOSE(logfd); return -1; } diff --git a/src/util/bridge.c b/src/util/bridge.c index 7204e64827..0f4b6397f3 100644 --- a/src/util/bridge.c +++ b/src/util/bridge.c @@ -72,25 +72,16 @@ int brInit(brControl **ctlp) { int fd; - int flags; if (!ctlp || *ctlp) return EINVAL; fd = socket(AF_INET, SOCK_STREAM, 0); - if (fd < 0) - return errno; - - if ((flags = fcntl(fd, F_GETFD)) < 0 || - fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0) { - int err = errno; - VIR_FORCE_CLOSE(fd); - return err; - } - - if (VIR_ALLOC(*ctlp) < 0) { + if (fd < 0 || + virSetCloseExec(fd) < 0 || + VIR_ALLOC(*ctlp) < 0) { VIR_FORCE_CLOSE(fd); - return ENOMEM; + return errno; } (*ctlp)->fd = fd; @@ -599,7 +590,7 @@ brSetInterfaceUp(brControl *ctl, int up) { struct ifreq ifr; - int flags; + int ifflags; if (!ctl || !ifname) return EINVAL; @@ -612,10 +603,10 @@ brSetInterfaceUp(brControl *ctl, if (ioctl(ctl->fd, SIOCGIFFLAGS, &ifr) < 0) return errno; - flags = up ? (ifr.ifr_flags | IFF_UP) : (ifr.ifr_flags & ~IFF_UP); + ifflags = up ? (ifr.ifr_flags | IFF_UP) : (ifr.ifr_flags & ~IFF_UP); - if (ifr.ifr_flags != flags) { - ifr.ifr_flags = flags; + if (ifr.ifr_flags != ifflags) { + ifr.ifr_flags = ifflags; if (ioctl(ctl->fd, SIOCSIFFLAGS, &ifr) < 0) return errno;