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.
This commit is contained in:
Eric Blake 2011-07-07 17:42:05 -06:00
parent e17d3e7fe7
commit ff98359d51
3 changed files with 12 additions and 33 deletions

View File

@ -27,6 +27,7 @@ byteswap
c-ctype
c-strcase
c-strcasestr
calloc-posix
canonicalize-lgpl
chown
close

View File

@ -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;
}

View File

@ -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)
if (fd < 0 ||
virSetCloseExec(fd) < 0 ||
VIR_ALLOC(*ctlp) < 0) {
VIR_FORCE_CLOSE(fd);
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) {
VIR_FORCE_CLOSE(fd);
return ENOMEM;
}
(*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;