xref: /haiku/src/system/libroot/posix/signal/kill.c (revision 24df65921befcd0ad0c5c7866118f922da61cb96)
15af32e75SAxel Dörfler /*
2d024bdc9SAxel Dörfler  * Copyright 2004-2006, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
3d024bdc9SAxel Dörfler  * Distributed under the terms of the MIT License.
45af32e75SAxel Dörfler  */
55af32e75SAxel Dörfler 
65af32e75SAxel Dörfler 
7*24df6592SIngo Weinhold #include <errno.h>
8*24df6592SIngo Weinhold #include <signal.h>
9*24df6592SIngo Weinhold 
105af32e75SAxel Dörfler #include <OS.h>
115af32e75SAxel Dörfler 
12*24df6592SIngo Weinhold #include <syscalls.h>
135af32e75SAxel Dörfler 
145af32e75SAxel Dörfler 
155af32e75SAxel Dörfler int
165af32e75SAxel Dörfler kill(pid_t pid, int sig)
175af32e75SAxel Dörfler {
18*24df6592SIngo Weinhold 	status_t status;
19*24df6592SIngo Weinhold 
20*24df6592SIngo Weinhold 	if (sig < 0) {
21*24df6592SIngo Weinhold 		errno = EINVAL;
22*24df6592SIngo Weinhold 		return -1;
23*24df6592SIngo Weinhold 	}
24*24df6592SIngo Weinhold 
25*24df6592SIngo Weinhold 	status = _kern_send_signal(pid, sig, NULL, 0);
26*24df6592SIngo Weinhold 	if (status != B_OK) {
27*24df6592SIngo Weinhold 		// translate B_BAD_THREAD_ID/B_BAD_TEAM_ID to ESRCH
28*24df6592SIngo Weinhold 		if (status == B_BAD_THREAD_ID || status == B_BAD_TEAM_ID)
29d024bdc9SAxel Dörfler 			status = ESRCH;
30d024bdc9SAxel Dörfler 
315af32e75SAxel Dörfler 		errno = status;
325af32e75SAxel Dörfler 		return -1;
335af32e75SAxel Dörfler 	}
345af32e75SAxel Dörfler 
355af32e75SAxel Dörfler 	return 0;
365af32e75SAxel Dörfler }
37