[libvirt] [PATCHv2 24/27] build: don't hand-roll cloexec code

Matthias Bolte matthias.bolte at googlemail.com
Wed Jul 13 13:22:47 UTC 2011


2011/7/8 Eric Blake <eblake at redhat.com>:
> No need to repeat common code.
>
> * src/util/bridge.c (brInit): Use virSetCloseExec.
> (brSetInterfaceUp): Prefer unsigned flags.
> * src/uml/uml_driver.c (umlSetCloseExec): Delete.
> (umlStartVMDaemon): Use util version instead.
> ---
>
> v2: new patch
>
>  src/uml/uml_driver.c |   19 +++----------------
>  src/util/bridge.c    |   19 +++++--------------
>  2 files changed, 8 insertions(+), 30 deletions(-)

> diff --git a/src/util/bridge.c b/src/util/bridge.c
> index 7204e64..a6b5768 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;
>     }

Is it guaranteed that calloc will set ENOMEM, or do we need some
gnulib module to guarantee this?

>     (*ctlp)->fd = fd;
> @@ -599,7 +590,7 @@ brSetInterfaceUp(brControl *ctl,
>                  int up)
>  {
>     struct ifreq ifr;
> -    int flags;
> +    unsigned int flags;

flags is used used with ifr.ifr_flags that is signed (actually it's a
short). So I'd prefer renaming it to ifflags and keep it as int.

ACK, with that questions/comments answered/addressed.

-- 
Matthias Bolte
http://photron.blogspot.com




More information about the libvir-list mailing list