2 * vim:ts=4:sw=4:expandtab
4 * i3 - an improved dynamic tiling window manager
5 * © 2009-2011 Michael Stapelberg and contributors (see also: LICENSE)
19 * Formats a message (payload) of the given size and type and sends it to i3 via
20 * the given socket file descriptor.
22 * Returns -1 when write() fails, errno will remain.
23 * Returns 0 on success.
26 int ipc_send_message(int sockfd, uint32_t message_size,
27 uint32_t message_type, const uint8_t *payload) {
28 int buffer_size = strlen(I3_IPC_MAGIC) + sizeof(uint32_t) + sizeof(uint32_t) + message_size;
29 char msg[buffer_size];
32 strncpy(walk, I3_IPC_MAGIC, buffer_size - 1);
33 walk += strlen(I3_IPC_MAGIC);
34 memcpy(walk, &message_size, sizeof(uint32_t));
35 walk += sizeof(uint32_t);
36 memcpy(walk, &message_type, sizeof(uint32_t));
37 walk += sizeof(uint32_t);
38 memcpy(walk, payload, message_size);
41 int bytes_to_go = buffer_size;
42 while (sent_bytes < bytes_to_go) {
43 int n = write(sockfd, msg + sent_bytes, bytes_to_go);