xref: /haiku/src/system/libroot/posix/signal/kill.c (revision 25a7b01d15612846f332751841da3579db313082)
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 
724df6592SIngo Weinhold #include <errno.h>
824df6592SIngo Weinhold #include <signal.h>
924df6592SIngo Weinhold 
105af32e75SAxel Dörfler #include <OS.h>
115af32e75SAxel Dörfler 
12*ae901935SOliver Tappe #include <errno_private.h>
1324df6592SIngo Weinhold #include <syscalls.h>
145af32e75SAxel Dörfler 
155af32e75SAxel Dörfler 
165af32e75SAxel Dörfler int
kill(pid_t pid,int sig)175af32e75SAxel Dörfler kill(pid_t pid, int sig)
185af32e75SAxel Dörfler {
1924df6592SIngo Weinhold 	status_t status;
2024df6592SIngo Weinhold 
2124df6592SIngo Weinhold 	if (sig < 0) {
22*ae901935SOliver Tappe 		__set_errno(EINVAL);
2324df6592SIngo Weinhold 		return -1;
2424df6592SIngo Weinhold 	}
2524df6592SIngo Weinhold 
2624df6592SIngo Weinhold 	status = _kern_send_signal(pid, sig, NULL, 0);
2724df6592SIngo Weinhold 	if (status != B_OK) {
2824df6592SIngo Weinhold 		// translate B_BAD_THREAD_ID/B_BAD_TEAM_ID to ESRCH
2924df6592SIngo Weinhold 		if (status == B_BAD_THREAD_ID || status == B_BAD_TEAM_ID)
30d024bdc9SAxel Dörfler 			status = ESRCH;
31d024bdc9SAxel Dörfler 
32*ae901935SOliver Tappe 		__set_errno(status);
335af32e75SAxel Dörfler 		return -1;
345af32e75SAxel Dörfler 	}
355af32e75SAxel Dörfler 
365af32e75SAxel Dörfler 	return 0;
375af32e75SAxel Dörfler }
38