diff options
author | S. Christoffer Eliesen <christoffer@eliesen.no> | 2015-10-16 10:55:54 +0200 |
---|---|---|
committer | S. Christoffer Eliesen <christoffer@eliesen.no> | 2015-10-16 12:15:11 +0200 |
commit | ae93c6e6fe5649473116aa081c1acedac10f2be4 (patch) | |
tree | a9e64a324a1880c09423ae301db9474e16c55dc0 /sway/ipc.c | |
parent | Merge pull request #192 from sleep-walker/master (diff) | |
download | sway-ae93c6e6fe5649473116aa081c1acedac10f2be4.tar.gz sway-ae93c6e6fe5649473116aa081c1acedac10f2be4.tar.zst sway-ae93c6e6fe5649473116aa081c1acedac10f2be4.zip |
sway/ipc: Dynamically assign ipc_sockaddr.
Diffstat (limited to 'sway/ipc.c')
-rw-r--r-- | sway/ipc.c | 28 |
1 files changed, 19 insertions, 9 deletions
@@ -21,10 +21,7 @@ | |||
21 | 21 | ||
22 | static int ipc_socket = -1; | 22 | static int ipc_socket = -1; |
23 | static struct wlc_event_source *ipc_event_source = NULL; | 23 | static struct wlc_event_source *ipc_event_source = NULL; |
24 | static struct sockaddr_un ipc_sockaddr = { | 24 | static struct sockaddr_un *ipc_sockaddr = NULL; |
25 | .sun_family = AF_UNIX, | ||
26 | .sun_path = "/tmp/sway-ipc.sock" | ||
27 | }; | ||
28 | 25 | ||
29 | static const char ipc_magic[] = {'i', '3', '-', 'i', 'p', 'c'}; | 26 | static const char ipc_magic[] = {'i', '3', '-', 'i', 'p', 'c'}; |
30 | 27 | ||
@@ -35,6 +32,7 @@ struct ipc_client { | |||
35 | enum ipc_command_type current_command; | 32 | enum ipc_command_type current_command; |
36 | }; | 33 | }; |
37 | 34 | ||
35 | struct sockaddr_un *ipc_user_sockaddr(void); | ||
38 | int ipc_handle_connection(int fd, uint32_t mask, void *data); | 36 | int ipc_handle_connection(int fd, uint32_t mask, void *data); |
39 | int ipc_client_handle_readable(int client_fd, uint32_t mask, void *data); | 37 | int ipc_client_handle_readable(int client_fd, uint32_t mask, void *data); |
40 | void ipc_client_disconnect(struct ipc_client *client); | 38 | void ipc_client_disconnect(struct ipc_client *client); |
@@ -49,12 +47,14 @@ void ipc_init(void) { | |||
49 | sway_abort("Unable to create IPC socket"); | 47 | sway_abort("Unable to create IPC socket"); |
50 | } | 48 | } |
51 | 49 | ||
50 | ipc_sockaddr = ipc_user_sockaddr(); | ||
51 | |||
52 | if (getenv("SWAYSOCK") != NULL) { | 52 | if (getenv("SWAYSOCK") != NULL) { |
53 | strncpy(ipc_sockaddr.sun_path, getenv("SWAYSOCK"), sizeof(ipc_sockaddr.sun_path)); | 53 | strncpy(ipc_sockaddr->sun_path, getenv("SWAYSOCK"), sizeof(ipc_sockaddr->sun_path)); |
54 | } | 54 | } |
55 | 55 | ||
56 | unlink(ipc_sockaddr.sun_path); | 56 | unlink(ipc_sockaddr->sun_path); |
57 | if (bind(ipc_socket, (struct sockaddr *)&ipc_sockaddr, sizeof(ipc_sockaddr)) == -1) { | 57 | if (bind(ipc_socket, (struct sockaddr *)ipc_sockaddr, sizeof(*ipc_sockaddr)) == -1) { |
58 | sway_abort("Unable to bind IPC socket"); | 58 | sway_abort("Unable to bind IPC socket"); |
59 | } | 59 | } |
60 | 60 | ||
@@ -63,7 +63,7 @@ void ipc_init(void) { | |||
63 | } | 63 | } |
64 | 64 | ||
65 | // Set i3 IPC socket path so that i3-msg works out of the box | 65 | // Set i3 IPC socket path so that i3-msg works out of the box |
66 | setenv("I3SOCK", ipc_sockaddr.sun_path, 1); | 66 | setenv("I3SOCK", ipc_sockaddr->sun_path, 1); |
67 | 67 | ||
68 | ipc_event_source = wlc_event_loop_add_fd(ipc_socket, WLC_EVENT_READABLE, ipc_handle_connection, NULL); | 68 | ipc_event_source = wlc_event_loop_add_fd(ipc_socket, WLC_EVENT_READABLE, ipc_handle_connection, NULL); |
69 | } | 69 | } |
@@ -73,7 +73,17 @@ void ipc_terminate(void) { | |||
73 | wlc_event_source_remove(ipc_event_source); | 73 | wlc_event_source_remove(ipc_event_source); |
74 | } | 74 | } |
75 | close(ipc_socket); | 75 | close(ipc_socket); |
76 | unlink(ipc_sockaddr.sun_path); | 76 | unlink(ipc_sockaddr->sun_path); |
77 | } | ||
78 | |||
79 | struct sockaddr_un *ipc_user_sockaddr(void) { | ||
80 | struct sockaddr_un *ipc_sockaddr = malloc(sizeof(struct sockaddr_un)); | ||
81 | assert(ipc_sockaddr != NULL); | ||
82 | |||
83 | ipc_sockaddr->sun_family = AF_UNIX; | ||
84 | strcpy(ipc_sockaddr->sun_path, "/tmp/sway-ipc.sock"); | ||
85 | |||
86 | return ipc_sockaddr; | ||
77 | } | 87 | } |
78 | 88 | ||
79 | int ipc_handle_connection(int fd, uint32_t mask, void *data) { | 89 | int ipc_handle_connection(int fd, uint32_t mask, void *data) { |