Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/tools/lib/api/fd/array.h
26292 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
#ifndef __API_FD_ARRAY__
3
#define __API_FD_ARRAY__
4
5
#include <stdio.h>
6
7
struct 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
*/
19
struct 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
33
enum fdarray_flags {
34
fdarray_flag__default = 0x00000000,
35
fdarray_flag__nonfilterable = 0x00000001,
36
fdarray_flag__non_perf_event = 0x00000002,
37
};
38
39
void fdarray__init(struct fdarray *fda, int nr_autogrow);
40
void fdarray__exit(struct fdarray *fda);
41
42
struct fdarray *fdarray__new(int nr_alloc, int nr_autogrow);
43
void fdarray__delete(struct fdarray *fda);
44
45
int fdarray__add(struct fdarray *fda, int fd, short revents, enum fdarray_flags flags);
46
int fdarray__dup_entry_from(struct fdarray *fda, int pos, struct fdarray *from);
47
int fdarray__poll(struct fdarray *fda, int timeout);
48
int fdarray__filter(struct fdarray *fda, short revents,
49
void (*entry_destructor)(struct fdarray *fda, int fd, void *arg),
50
void *arg);
51
int fdarray__grow(struct fdarray *fda, int extra);
52
int fdarray__fprintf(struct fdarray *fda, FILE *fp);
53
54
static inline int fdarray__available_entries(struct fdarray *fda)
55
{
56
return fda->nr_alloc - fda->nr;
57
}
58
59
#endif /* __API_FD_ARRAY__ */
60
61