On Wed, May 30, 2012 at 03:53:41PM +0300, Pekka Paalanen wrote: > Android does not have SOCK_CLOEXEC, so implement a wrapper that falls > back.
Entire series applied, thanks. Kristian > Signed-off-by: Pekka Paalanen <[email protected]> > --- > shared/Makefile.am | 2 + > shared/os-compatibility.c | 78 > +++++++++++++++++++++++++++++++++++++++++++++ > shared/os-compatibility.h | 29 +++++++++++++++++ > src/compositor.c | 5 +-- > 4 files changed, 111 insertions(+), 3 deletions(-) > create mode 100644 shared/os-compatibility.c > create mode 100644 shared/os-compatibility.h > > diff --git a/shared/Makefile.am b/shared/Makefile.am > index f712ae7..1f62941 100644 > --- a/shared/Makefile.am > +++ b/shared/Makefile.am > @@ -9,5 +9,7 @@ libshared_la_SOURCES = \ > option-parser.c \ > image-loader.c \ > config-parser.h \ > + os-compatibility.c \ > + os-compatibility.h \ > cairo-util.c \ > cairo-util.h > diff --git a/shared/os-compatibility.c b/shared/os-compatibility.c > new file mode 100644 > index 0000000..b79aa1f > --- /dev/null > +++ b/shared/os-compatibility.c > @@ -0,0 +1,78 @@ > +/* > + * Copyright © 2012 Collabora, Ltd. > + * > + * Permission to use, copy, modify, distribute, and sell this software and > its > + * documentation for any purpose is hereby granted without fee, provided that > + * the above copyright notice appear in all copies and that both that > copyright > + * notice and this permission notice appear in supporting documentation, and > + * that the name of the copyright holders not be used in advertising or > + * publicity pertaining to distribution of the software without specific, > + * written prior permission. The copyright holders make no representations > + * about the suitability of this software for any purpose. It is provided > "as > + * is" without express or implied warranty. > + * > + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS > SOFTWARE, > + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO > + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR > + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF > USE, > + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER > + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR > PERFORMANCE > + * OF THIS SOFTWARE. > + */ > + > +#include <sys/types.h> > +#include <sys/socket.h> > +#include <unistd.h> > +#include <fcntl.h> > +#include <errno.h> > + > +#include "os-compatibility.h" > + > +static int > +set_cloexec_or_close(int fd) > +{ > + long flags; > + > + if (fd == -1) > + return -1; > + > + flags = fcntl(fd, F_GETFD); > + if (flags == -1) > + goto err; > + > + if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) > + goto err; > + > + return fd; > + > +err: > + close(fd); > + return -1; > +} > + > +int > +os_socketpair_cloexec(int domain, int type, int protocol, int *sv) > +{ > + int ret; > + > +#ifdef SOCK_CLOEXEC > + ret = socketpair(domain, type | SOCK_CLOEXEC, protocol, sv); > + if (ret == 0 || errno != EINVAL) > + return ret; > +#endif > + > + ret = socketpair(domain, type, protocol, sv); > + if (ret < 0) > + return ret; > + > + sv[0] = set_cloexec_or_close(sv[0]); > + sv[1] = set_cloexec_or_close(sv[1]); > + > + if (sv[0] != -1 && sv[1] != -1) > + return 0; > + > + close(sv[0]); > + close(sv[1]); > + return -1; > +} > + > diff --git a/shared/os-compatibility.h b/shared/os-compatibility.h > new file mode 100644 > index 0000000..77e8672 > --- /dev/null > +++ b/shared/os-compatibility.h > @@ -0,0 +1,29 @@ > +/* > + * Copyright © 2012 Collabora, Ltd. > + * > + * Permission to use, copy, modify, distribute, and sell this software and > its > + * documentation for any purpose is hereby granted without fee, provided that > + * the above copyright notice appear in all copies and that both that > copyright > + * notice and this permission notice appear in supporting documentation, and > + * that the name of the copyright holders not be used in advertising or > + * publicity pertaining to distribution of the software without specific, > + * written prior permission. The copyright holders make no representations > + * about the suitability of this software for any purpose. It is provided > "as > + * is" without express or implied warranty. > + * > + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS > SOFTWARE, > + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO > + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR > + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF > USE, > + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER > + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR > PERFORMANCE > + * OF THIS SOFTWARE. > + */ > + > +#ifndef OS_COMPATIBILITY_H > +#define OS_COMPATIBILITY_H > + > +int > +os_socketpair_cloexec(int domain, int type, int protocol, int *sv); > + > +#endif /* OS_COMPATIBILITY_H */ > diff --git a/src/compositor.c b/src/compositor.c > index b82ba08..f701f1b 100644 > --- a/src/compositor.c > +++ b/src/compositor.c > @@ -35,9 +35,7 @@ > #include <assert.h> > #include <sys/ioctl.h> > #include <sys/wait.h> > -#include <sys/types.h> > #include <sys/socket.h> > -#include <fcntl.h> > #include <unistd.h> > #include <math.h> > #include <linux/input.h> > @@ -48,6 +46,7 @@ > > #include <wayland-server.h> > #include "compositor.h" > +#include "../shared/os-compatibility.h" > > static struct wl_list child_process_list; > static jmp_buf segv_jmp_buf; > @@ -134,7 +133,7 @@ weston_client_launch(struct weston_compositor *compositor, > pid_t pid; > struct wl_client *client; > > - if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, sv) < 0) { > + if (os_socketpair_cloexec(AF_UNIX, SOCK_STREAM, 0, sv) < 0) { > fprintf(stderr, "weston_client_launch: " > "socketpair failed while launching '%s': %m\n", > path); > -- > 1.7.3.4 > _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
