xref: /freebsd/lib/libc/gen/eventfd.c (revision 44c5db52e258aebed0c5d01047c79bc3d8487966)
1*44c5db52SKonstantin Belousov /*-
2*44c5db52SKonstantin Belousov  * SPDX-License-Identifier: MIT
3*44c5db52SKonstantin Belousov  *
4*44c5db52SKonstantin Belousov  * Copyright (c) 2005-2020 Rich Felker, et al.
5*44c5db52SKonstantin Belousov  * Copyright (c) 2020 Greg V
6*44c5db52SKonstantin Belousov  *
7*44c5db52SKonstantin Belousov  * Permission is hereby granted, free of charge, to any person obtaining
8*44c5db52SKonstantin Belousov  * a copy of this software and associated documentation files (the
9*44c5db52SKonstantin Belousov  * "Software"), to deal in the Software without restriction, including
10*44c5db52SKonstantin Belousov  * without limitation the rights to use, copy, modify, merge, publish,
11*44c5db52SKonstantin Belousov  * distribute, sublicense, and/or sell copies of the Software, and to
12*44c5db52SKonstantin Belousov  * permit persons to whom the Software is furnished to do so, subject to
13*44c5db52SKonstantin Belousov  * the following conditions:
14*44c5db52SKonstantin Belousov  *
15*44c5db52SKonstantin Belousov  * The above copyright notice and this permission notice shall be
16*44c5db52SKonstantin Belousov  * included in all copies or substantial portions of the Software.
17*44c5db52SKonstantin Belousov  *
18*44c5db52SKonstantin Belousov  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19*44c5db52SKonstantin Belousov  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20*44c5db52SKonstantin Belousov  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21*44c5db52SKonstantin Belousov  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
22*44c5db52SKonstantin Belousov  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23*44c5db52SKonstantin Belousov  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24*44c5db52SKonstantin Belousov  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25*44c5db52SKonstantin Belousov  */
26*44c5db52SKonstantin Belousov 
27*44c5db52SKonstantin Belousov #include <sys/cdefs.h>
28*44c5db52SKonstantin Belousov __FBSDID("$FreeBSD$");
29*44c5db52SKonstantin Belousov 
30*44c5db52SKonstantin Belousov #include "namespace.h"
31*44c5db52SKonstantin Belousov #include <sys/eventfd.h>
32*44c5db52SKonstantin Belousov #include <sys/specialfd.h>
33*44c5db52SKonstantin Belousov #include <unistd.h>
34*44c5db52SKonstantin Belousov #include "un-namespace.h"
35*44c5db52SKonstantin Belousov #include "libc_private.h"
36*44c5db52SKonstantin Belousov 
37*44c5db52SKonstantin Belousov int eventfd(unsigned int initval, int flags)
38*44c5db52SKonstantin Belousov {
39*44c5db52SKonstantin Belousov 	struct specialfd_eventfd args;
40*44c5db52SKonstantin Belousov 
41*44c5db52SKonstantin Belousov 	args.initval = initval;
42*44c5db52SKonstantin Belousov 	args.flags = flags;
43*44c5db52SKonstantin Belousov 	return (__sys___specialfd(SPECIALFD_EVENTFD, &args, sizeof(args)));
44*44c5db52SKonstantin Belousov }
45*44c5db52SKonstantin Belousov 
46*44c5db52SKonstantin Belousov int eventfd_read(int fd, eventfd_t *value)
47*44c5db52SKonstantin Belousov {
48*44c5db52SKonstantin Belousov 	return (sizeof(*value) == _read(fd, value, sizeof(*value)) ? 0 : -1);
49*44c5db52SKonstantin Belousov }
50*44c5db52SKonstantin Belousov 
51*44c5db52SKonstantin Belousov int eventfd_write(int fd, eventfd_t value)
52*44c5db52SKonstantin Belousov {
53*44c5db52SKonstantin Belousov 	return (sizeof(value) == _write(fd, &value, sizeof(value)) ? 0 : -1);
54*44c5db52SKonstantin Belousov }
55