starry-kernel 0.7.7

A Linux-compatible OS kernel built on ArceOS unikernel
Documentation
//! File and poll boundary adapters for epoll instances.

use alloc::borrow::Cow;
use core::task::Context;

use axpoll::{IoEvents, Pollable};

use super::{FileLike, epoll::Epoll};

impl FileLike for Epoll {
    fn path(&self) -> Cow<'_, str> {
        "anon_inode:[eventpoll]".into()
    }
}

impl Pollable for Epoll {
    fn poll(&self) -> IoEvents {
        if self.inner.has_ready_events() {
            IoEvents::IN
        } else {
            IoEvents::empty()
        }
    }

    fn register(&self, context: &mut Context<'_>, events: IoEvents) {
        if events.contains(IoEvents::IN) {
            self.inner.register_poll_waiter(context);
        }
    }
}