mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	This patch adds write access function attributes to the epoll_wait family of functions Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
		
			
				
	
	
		
			164 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* Copyright (C) 2002-2022 Free Software Foundation, Inc.
 | 
						|
   This file is part of the GNU C Library.
 | 
						|
 | 
						|
   The GNU C Library is free software; you can redistribute it and/or
 | 
						|
   modify it under the terms of the GNU Lesser General Public
 | 
						|
   License as published by the Free Software Foundation; either
 | 
						|
   version 2.1 of the License, or (at your option) any later version.
 | 
						|
 | 
						|
   The GNU C Library is distributed in the hope that it will be useful,
 | 
						|
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
   Lesser General Public License for more details.
 | 
						|
 | 
						|
   You should have received a copy of the GNU Lesser General Public
 | 
						|
   License along with the GNU C Library; if not, see
 | 
						|
   <https://www.gnu.org/licenses/>.  */
 | 
						|
 | 
						|
#ifndef	_SYS_EPOLL_H
 | 
						|
#define	_SYS_EPOLL_H	1
 | 
						|
 | 
						|
#include <stdint.h>
 | 
						|
#include <sys/types.h>
 | 
						|
 | 
						|
#include <bits/types/sigset_t.h>
 | 
						|
#include <bits/types/struct_timespec.h>
 | 
						|
 | 
						|
/* Get the platform-dependent flags.  */
 | 
						|
#include <bits/epoll.h>
 | 
						|
 | 
						|
#ifndef __EPOLL_PACKED
 | 
						|
# define __EPOLL_PACKED
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
enum EPOLL_EVENTS
 | 
						|
  {
 | 
						|
    EPOLLIN = 0x001,
 | 
						|
#define EPOLLIN EPOLLIN
 | 
						|
    EPOLLPRI = 0x002,
 | 
						|
#define EPOLLPRI EPOLLPRI
 | 
						|
    EPOLLOUT = 0x004,
 | 
						|
#define EPOLLOUT EPOLLOUT
 | 
						|
    EPOLLRDNORM = 0x040,
 | 
						|
#define EPOLLRDNORM EPOLLRDNORM
 | 
						|
    EPOLLRDBAND = 0x080,
 | 
						|
#define EPOLLRDBAND EPOLLRDBAND
 | 
						|
    EPOLLWRNORM = 0x100,
 | 
						|
#define EPOLLWRNORM EPOLLWRNORM
 | 
						|
    EPOLLWRBAND = 0x200,
 | 
						|
#define EPOLLWRBAND EPOLLWRBAND
 | 
						|
    EPOLLMSG = 0x400,
 | 
						|
#define EPOLLMSG EPOLLMSG
 | 
						|
    EPOLLERR = 0x008,
 | 
						|
#define EPOLLERR EPOLLERR
 | 
						|
    EPOLLHUP = 0x010,
 | 
						|
#define EPOLLHUP EPOLLHUP
 | 
						|
    EPOLLRDHUP = 0x2000,
 | 
						|
#define EPOLLRDHUP EPOLLRDHUP
 | 
						|
    EPOLLEXCLUSIVE = 1u << 28,
 | 
						|
#define EPOLLEXCLUSIVE EPOLLEXCLUSIVE
 | 
						|
    EPOLLWAKEUP = 1u << 29,
 | 
						|
#define EPOLLWAKEUP EPOLLWAKEUP
 | 
						|
    EPOLLONESHOT = 1u << 30,
 | 
						|
#define EPOLLONESHOT EPOLLONESHOT
 | 
						|
    EPOLLET = 1u << 31
 | 
						|
#define EPOLLET EPOLLET
 | 
						|
  };
 | 
						|
 | 
						|
 | 
						|
/* Valid opcodes ( "op" parameter ) to issue to epoll_ctl().  */
 | 
						|
#define EPOLL_CTL_ADD 1	/* Add a file descriptor to the interface.  */
 | 
						|
#define EPOLL_CTL_DEL 2	/* Remove a file descriptor from the interface.  */
 | 
						|
#define EPOLL_CTL_MOD 3	/* Change file descriptor epoll_event structure.  */
 | 
						|
 | 
						|
 | 
						|
typedef union epoll_data
 | 
						|
{
 | 
						|
  void *ptr;
 | 
						|
  int fd;
 | 
						|
  uint32_t u32;
 | 
						|
  uint64_t u64;
 | 
						|
} epoll_data_t;
 | 
						|
 | 
						|
struct epoll_event
 | 
						|
{
 | 
						|
  uint32_t events;	/* Epoll events */
 | 
						|
  epoll_data_t data;	/* User data variable */
 | 
						|
} __EPOLL_PACKED;
 | 
						|
 | 
						|
 | 
						|
__BEGIN_DECLS
 | 
						|
 | 
						|
/* Creates an epoll instance.  Returns an fd for the new instance.
 | 
						|
   The "size" parameter is a hint specifying the number of file
 | 
						|
   descriptors to be associated with the new instance.  The fd
 | 
						|
   returned by epoll_create() should be closed with close().  */
 | 
						|
extern int epoll_create (int __size) __THROW;
 | 
						|
 | 
						|
/* Same as epoll_create but with an FLAGS parameter.  The unused SIZE
 | 
						|
   parameter has been dropped.  */
 | 
						|
extern int epoll_create1 (int __flags) __THROW;
 | 
						|
 | 
						|
 | 
						|
/* Manipulate an epoll instance "epfd". Returns 0 in case of success,
 | 
						|
   -1 in case of error ( the "errno" variable will contain the
 | 
						|
   specific error code ) The "op" parameter is one of the EPOLL_CTL_*
 | 
						|
   constants defined above. The "fd" parameter is the target of the
 | 
						|
   operation. The "event" parameter describes which events the caller
 | 
						|
   is interested in and any associated user data.  */
 | 
						|
extern int epoll_ctl (int __epfd, int __op, int __fd,
 | 
						|
		      struct epoll_event *__event) __THROW;
 | 
						|
 | 
						|
 | 
						|
/* Wait for events on an epoll instance "epfd". Returns the number of
 | 
						|
   triggered events returned in "events" buffer. Or -1 in case of
 | 
						|
   error with the "errno" variable set to the specific error code. The
 | 
						|
   "events" parameter is a buffer that will contain triggered
 | 
						|
   events. The "maxevents" is the maximum number of events to be
 | 
						|
   returned ( usually size of "events" ). The "timeout" parameter
 | 
						|
   specifies the maximum wait time in milliseconds (-1 == infinite).
 | 
						|
 | 
						|
   This function is a cancellation point and therefore not marked with
 | 
						|
   __THROW.  */
 | 
						|
extern int epoll_wait (int __epfd, struct epoll_event *__events,
 | 
						|
		       int __maxevents, int __timeout)
 | 
						|
	__attr_access ((__write_only__, 2, 3));
 | 
						|
 | 
						|
 | 
						|
/* Same as epoll_wait, but the thread's signal mask is temporarily
 | 
						|
   and atomically replaced with the one provided as parameter.
 | 
						|
 | 
						|
   This function is a cancellation point and therefore not marked with
 | 
						|
   __THROW.  */
 | 
						|
extern int epoll_pwait (int __epfd, struct epoll_event *__events,
 | 
						|
			int __maxevents, int __timeout,
 | 
						|
			const __sigset_t *__ss)
 | 
						|
	__attr_access ((__write_only__, 2, 3));
 | 
						|
 | 
						|
/* Same as epoll_pwait, but the timeout as a timespec.
 | 
						|
 | 
						|
   This function is a cancellation point and therefore not marked with
 | 
						|
   __THROW.  */
 | 
						|
#ifndef __USE_TIME_BITS64
 | 
						|
extern int epoll_pwait2 (int __epfd, struct epoll_event *__events,
 | 
						|
			 int __maxevents, const struct timespec *__timeout,
 | 
						|
			 const __sigset_t *__ss)
 | 
						|
	__attr_access ((__write_only__, 2, 3));
 | 
						|
#else
 | 
						|
# ifdef __REDIRECT
 | 
						|
extern int __REDIRECT (epoll_pwait2, (int __epfd, struct epoll_event *__ev,
 | 
						|
				      int __maxevs,
 | 
						|
				      const struct timespec *__timeout,
 | 
						|
				      const __sigset_t *__ss),
 | 
						|
		       __epoll_pwait2_time64)
 | 
						|
	__attr_access ((__write_only__, 2, 3));
 | 
						|
# else
 | 
						|
#  define epoll_pwait2 __epoll_pwait2_time64
 | 
						|
# endif
 | 
						|
#endif
 | 
						|
 | 
						|
__END_DECLS
 | 
						|
 | 
						|
#endif /* sys/epoll.h */
 |