On Wed, Jun 26, 2013 at 06:18:04PM +0200, Łukasz Stelmach wrote:
> Receive file descriptors of open sockets from systemd instead of
> creating them.
> 
> Signed-off-by: Łukasz Stelmach <[email protected]>
> ---
>  Xtrans.c |   50 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 50 insertions(+)
> 
> diff --git a/Xtrans.c b/Xtrans.c
> index 0799f04..a96e901 100644
> --- a/Xtrans.c
> +++ b/Xtrans.c
> @@ -48,6 +48,9 @@ from The Open Group.
>   */
>  
>  #include <ctype.h>
> +#ifdef HAVE_SYSTEMD
> +#include <systemd/sd-daemon.h>
> +#endif
>  
>  /*
>   * The transport table contains a definition for every transport (protocol)
> @@ -1025,6 +1028,10 @@ TRANS(MakeAllCOTSServerListeners) (char *port, int 
> *partial, int *count_ret,
>  #if defined(IPv6) && defined(AF_INET6)
>      int              ipv6_succ = 0;
>  #endif
> +#ifdef HAVE_SYSTEMD
> +    int              systemd_listen_fds;
> +#endif /* HAVE_SYSTEMD */
> +
>      prmsg (2,"MakeAllCOTSServerListeners(%s,%p)\n",
>          port ? port : "NULL", ciptrs_ret);
>  
> @@ -1040,6 +1047,49 @@ TRANS(MakeAllCOTSServerListeners) (char *port, int 
> *partial, int *count_ret,
>              temp_ciptrs[(*count_ret)++] = ciptr;
>      }
>  #endif
> +#ifdef HAVE_SYSTEMD
> +    systemd_listen_fds = sd_listen_fds(1);
> +    if (systemd_listen_fds < 0)
> +    {
> +     return -1;
> +    }
> +    else if (sd_listen_fds > 0)

this doesn't look right.

> +    {
> +     for (i = 0; i < systemd_listen_fds; i++)
> +     {
> +         struct sockaddr_storage a;
> +         int ti;
> +         socklen_t al;
> +
> +         al = sizeof(a);
> +         if (getsockname(i + SD_LISTEN_FDS_START, (struct sockaddr*)&a, &al) 
> < 0)
> +             return -1;
> +
> +         switch (a.ss_family)
> +         {
> +         case AF_UNIX:
> +             ti = TRANS_SOCKET_UNIX_INDEX;
> +             break;
> +         case AF_INET:
> +             ti = TRANS_SOCKET_INET_INDEX;
> +             break;
> +#if defined(IPv6) && defined(AF_INET6)
> +         case AF_INET6:
> +             ti = TRANS_SOCKET_INET6_INDEX;
> +             break;
> +#endif /* IPv6 */
> +         default:
> +             return -1;
> +         }
> +
> +         if ((ciptr = TRANS(ReopenCOTSServer(ti, i + SD_LISTEN_FDS_START,
> +                                             getenv("DISPLAY"))))==NULL)
> +             fprintf(stderr, "Got NULL while trying to Reopen socket 
> received from systemd.\n");

lowercase 'reopen'

(don't have the brain capacity to do a proper review atm, sorry)

Cheers,
   Peter

> +         else
> +             temp_ciptrs[(*count_ret)++] = ciptr;
> +     }
> +    }
> +#endif /* HAVE_SYSTEMD */
>  
>      for (i = 0; i < NUMTRANS; i++)
>      {
> -- 
> 1.7.9.5
> 
> _______________________________________________
> [email protected]: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
> 
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to