summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Franzke <benjaminfranzke@googlemail.com>2013-02-26 19:57:24 +0100
committerBenjamin Franzke <benjaminfranzke@googlemail.com>2013-02-27 11:04:41 +0100
commita4c48663e22f7a21c61c39f079a15e72a3557f54 (patch)
treef4531eb740904c3da84a14faf24716bc7b000429
parentb2f9f020a77ab420ca42990af65c022c584a3108 (diff)
server: Move bind and listen into initializer function
Restructured for systemd socket activation. Makes it easier to drop this step later, by returning early.
-rw-r--r--src/wayland-server.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/src/wayland-server.c b/src/wayland-server.c
index fb07a01..9ac0a71 100644
--- a/src/wayland-server.c
+++ b/src/wayland-server.c
@@ -1292,11 +1292,30 @@ get_socket_lock(struct wl_socket *socket)
return fd_lock;
}
+static int
+init_socket(struct wl_socket *s, int name_size)
+{
+ socklen_t size;
+
+ size = offsetof (struct sockaddr_un, sun_path) + name_size;
+ if (bind(s->fd, (struct sockaddr *) &s->addr, size) < 0) {
+ wl_log("bind() failed with error: %m\n");
+ return -1;
+ }
+
+ if (listen(s->fd, 1) < 0) {
+ wl_log("listen() failed with error: %m\n");
+ unlink(s->addr.sun_path);
+ return -1;
+ }
+
+ return 0;
+}
+
WL_EXPORT int
wl_display_add_socket(struct wl_display *display, const char *name)
{
struct wl_socket *s;
- socklen_t size;
int name_size;
const char *runtime_dir;
@@ -1349,20 +1368,7 @@ wl_display_add_socket(struct wl_display *display, const char *name)
free(s);
return -1;
}
-
- size = offsetof (struct sockaddr_un, sun_path) + name_size;
- if (bind(s->fd, (struct sockaddr *) &s->addr, size) < 0) {
- wl_log("bind() failed with error: %m\n");
- close(s->fd);
- unlink(s->lock_addr);
- close(s->fd_lock);
- free(s);
- return -1;
- }
-
- if (listen(s->fd, 1) < 0) {
- wl_log("listen() failed with error: %m\n");
- unlink(s->addr.sun_path);
+ if (init_socket(s, name_size) < 0) {
close(s->fd);
unlink(s->lock_addr);
close(s->fd_lock);