cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

array.h (1641B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __API_FD_ARRAY__
      3#define __API_FD_ARRAY__
      4
      5#include <stdio.h>
      6
      7struct pollfd;
      8
      9/**
     10 * struct fdarray: Array of file descriptors
     11 *
     12 * @priv: Per array entry priv area, users should access just its contents,
     13 *	  not set it to anything, as it is kept in synch with @entries, being
     14 *	  realloc'ed, * for instance, in fdarray__{grow,filter}.
     15 *
     16 *	  I.e. using 'fda->priv[N].idx = * value' where N < fda->nr is ok,
     17 *	  but doing 'fda->priv = malloc(M)' is not allowed.
     18 */
     19struct fdarray {
     20	int	       nr;
     21	int	       nr_alloc;
     22	int	       nr_autogrow;
     23	struct pollfd *entries;
     24	struct priv {
     25		union {
     26			int    idx;
     27			void   *ptr;
     28		};
     29		unsigned int flags;
     30	} *priv;
     31};
     32
     33enum fdarray_flags {
     34	fdarray_flag__default	    = 0x00000000,
     35	fdarray_flag__nonfilterable = 0x00000001
     36};
     37
     38void fdarray__init(struct fdarray *fda, int nr_autogrow);
     39void fdarray__exit(struct fdarray *fda);
     40
     41struct fdarray *fdarray__new(int nr_alloc, int nr_autogrow);
     42void fdarray__delete(struct fdarray *fda);
     43
     44int fdarray__add(struct fdarray *fda, int fd, short revents, enum fdarray_flags flags);
     45int fdarray__dup_entry_from(struct fdarray *fda, int pos, struct fdarray *from);
     46int fdarray__poll(struct fdarray *fda, int timeout);
     47int fdarray__filter(struct fdarray *fda, short revents,
     48		    void (*entry_destructor)(struct fdarray *fda, int fd, void *arg),
     49		    void *arg);
     50int fdarray__grow(struct fdarray *fda, int extra);
     51int fdarray__fprintf(struct fdarray *fda, FILE *fp);
     52
     53static inline int fdarray__available_entries(struct fdarray *fda)
     54{
     55	return fda->nr_alloc - fda->nr;
     56}
     57
     58#endif /* __API_FD_ARRAY__ */