aboutsummaryrefslogtreecommitdiff
path: root/libgui/msg.c
blob: 8448e73a1865fac45ec4dd3698288e3a4dfcc969 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// MIT License, Copyright (c) 2021 Marvin Borner

#include <assert.h>
#include <msg.h>
#include <print.h>
#include <sys.h>

int msg_send(u32 pid, enum message_type type, void *data)
{
	struct message msg = { 0 };
	assert((signed)pid != -1);
	char path[32] = { 0 };
	sprintf(path, "/proc/%d/msg", pid);
	msg.magic = MSG_MAGIC;
	msg.src = getpid();
	msg.type = type;
	msg.data = data;
	return write(path, &msg, 0, sizeof(msg));
}

int msg_receive(struct message *msg)
{
	int ret = read("/proc/self/msg", msg, 0, sizeof(*msg));
	if (msg->magic == MSG_MAGIC && ret == sizeof(*msg))
		return ret;
	else
		return -1;
}