aboutsummaryrefslogtreecommitdiff
path: root/sway
diff options
context:
space:
mode:
Diffstat (limited to 'sway')
-rw-r--r--sway/ipc.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/sway/ipc.c b/sway/ipc.c
index 4c87101c..c8e424e3 100644
--- a/sway/ipc.c
+++ b/sway/ipc.c
@@ -98,7 +98,8 @@ struct sockaddr_un *ipc_user_sockaddr(void) {
int path_size = sizeof(ipc_sockaddr->sun_path);
// Without logind:
- int allocating_path_size = snprintf(ipc_sockaddr->sun_path, path_size, "/tmp/sway-ipc.%i.sock", getuid());
+ int allocating_path_size = snprintf(ipc_sockaddr->sun_path, path_size,
+ "/tmp/sway-ipc.%i.%i.sock", getuid(), getpid());
if (allocating_path_size >= path_size) {
sway_abort("socket path won't fit into ipc_sockaddr->sun_path");
@@ -176,7 +177,8 @@ int ipc_client_handle_readable(int client_fd, uint32_t mask, void *data) {
return 0;
}
- char buf[ipc_header_size];
+ uint8_t buf[ipc_header_size];
+ uint32_t *buf32 = (uint32_t*)(buf + sizeof(ipc_magic));
ssize_t received = recv(client_fd, buf, ipc_header_size, 0);
if (received == -1) {
sway_log_errno(L_INFO, "Unable to receive header from IPC client");
@@ -190,8 +192,8 @@ int ipc_client_handle_readable(int client_fd, uint32_t mask, void *data) {
return 0;
}
- client->payload_length = *(uint32_t *)&buf[sizeof(ipc_magic)];
- client->current_command = (enum ipc_command_type) *(uint32_t *)&buf[sizeof(ipc_magic)+4];
+ client->payload_length = buf32[0];
+ client->current_command = (enum ipc_command_type)buf32[1];
if (read_available - received >= client->payload_length) {
ipc_client_handle_command(client);
@@ -336,10 +338,11 @@ bool ipc_send_reply(struct ipc_client *client, const char *payload, uint32_t pay
assert(payload);
char data[ipc_header_size];
+ uint32_t *data32 = (uint32_t*)(data + sizeof(ipc_magic));
memcpy(data, ipc_magic, sizeof(ipc_magic));
- *(uint32_t *)&(data[sizeof(ipc_magic)]) = payload_length;
- *(uint32_t *)&(data[sizeof(ipc_magic)+4]) = client->current_command;
+ data32[0] = payload_length;
+ data32[1] = client->current_command;
if (write(client->fd, data, ipc_header_size) == -1) {
sway_log_errno(L_INFO, "Unable to send header to IPC client");