tools lib: Introduce fdarray duplicate function
Introduce a function to duplicate an existing file descriptor in the fdarray structure. The function returns the position of the duplicated file descriptor. Reviewed-by: Riccardo Mancini <rickyman7@gmail.com> Signed-off-by: Alexey Bayduraev <alexey.v.bayduraev@linux.intel.com> Tested-by: Jiri Olsa <jolsa@kernel.org> Tested-by: Riccardo Mancini <rickyman7@gmail.com> Acked-by: Namhyung Kim <namhyung@gmail.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Antonov <alexander.antonov@linux.intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Alexei Budankov <abudankov@huawei.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: https://lore.kernel.org/r/2891f1def287d5863cc82683a4d5879195c8d90c.1642440724.git.alexey.v.bayduraev@linux.intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
7954f71689
commit
d87c25e8f4
@@ -88,6 +88,23 @@ int fdarray__add(struct fdarray *fda, int fd, short revents, enum fdarray_flags
|
|||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int fdarray__dup_entry_from(struct fdarray *fda, int pos, struct fdarray *from)
|
||||||
|
{
|
||||||
|
struct pollfd *entry;
|
||||||
|
int npos;
|
||||||
|
|
||||||
|
if (pos >= from->nr)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
entry = &from->entries[pos];
|
||||||
|
|
||||||
|
npos = fdarray__add(fda, entry->fd, entry->events, from->priv[pos].flags);
|
||||||
|
if (npos >= 0)
|
||||||
|
fda->priv[npos] = from->priv[pos];
|
||||||
|
|
||||||
|
return npos;
|
||||||
|
}
|
||||||
|
|
||||||
int fdarray__filter(struct fdarray *fda, short revents,
|
int fdarray__filter(struct fdarray *fda, short revents,
|
||||||
void (*entry_destructor)(struct fdarray *fda, int fd, void *arg),
|
void (*entry_destructor)(struct fdarray *fda, int fd, void *arg),
|
||||||
void *arg)
|
void *arg)
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ struct fdarray *fdarray__new(int nr_alloc, int nr_autogrow);
|
|||||||
void fdarray__delete(struct fdarray *fda);
|
void fdarray__delete(struct fdarray *fda);
|
||||||
|
|
||||||
int fdarray__add(struct fdarray *fda, int fd, short revents, enum fdarray_flags flags);
|
int fdarray__add(struct fdarray *fda, int fd, short revents, enum fdarray_flags flags);
|
||||||
|
int fdarray__dup_entry_from(struct fdarray *fda, int pos, struct fdarray *from);
|
||||||
int fdarray__poll(struct fdarray *fda, int timeout);
|
int fdarray__poll(struct fdarray *fda, int timeout);
|
||||||
int fdarray__filter(struct fdarray *fda, short revents,
|
int fdarray__filter(struct fdarray *fda, short revents,
|
||||||
void (*entry_destructor)(struct fdarray *fda, int fd, void *arg),
|
void (*entry_destructor)(struct fdarray *fda, int fd, void *arg),
|
||||||
|
|||||||
Reference in New Issue
Block a user