Andrey, sorry for delay.
As for API, I leave this to you and Michael. Not that I like these
new flags, but I agree that pread() hack was not pretty too.
On 01/29, Andrey Vagin wrote:
+static ssize_t signalfd_peek(struct signalfd_ctx *ctx,
+ siginfo_t *info, loff_t *ppos, int queue_mask)
+{
+ loff_t seq = *ppos / sizeof(struct signalfd_siginfo);
+ int signr = 0;
+
+ if (queue_mask & SIGQUEUE_PRIVATE)
+ signr = peek_signal(¤t->pending,
+ &ctx->sigmask, info, &seq);
+ else if (queue_mask & SIGQUEUE_SHARED)
+ signr = peek_signal(¤t->signal->shared_pending,
+ &ctx->sigmask, info, &seq);
+ (*ppos) += sizeof(struct signalfd_siginfo);
Now that this can work even with normal read(), we will actually change
f_pos. Then perhaps signalfd_fops->llseek() should work too. But this
is minor...
Hmm. but since it works with read(), we shouldn't increment *ppos unless
signalfd_copyinfo() succeeds?
Btw, why do you pass seq by reference? Looks unneeded.
Oleg.