sys_epoll_create.rs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. //! System call handler for epoll creation.
  2. use crate::arch::syscall::nr::SYS_EPOLL_CREATE;
  3. use crate::filesystem::epoll::event_poll::EventPoll;
  4. use crate::filesystem::vfs::file::FileMode;
  5. use crate::syscall::table::FormattedSyscallParam;
  6. use crate::syscall::table::Syscall;
  7. use alloc::vec::Vec;
  8. use system_error::SystemError;
  9. pub struct SysEpollCreateHandle;
  10. impl Syscall for SysEpollCreateHandle {
  11. fn num_args(&self) -> usize {
  12. 1
  13. }
  14. fn handle(&self, args: &[usize], _from_user: bool) -> Result<usize, SystemError> {
  15. let max_size = Self::max_size(args);
  16. if max_size < 0 {
  17. return Err(SystemError::EINVAL);
  18. }
  19. return EventPoll::create_epoll(FileMode::empty());
  20. }
  21. fn entry_format(&self, args: &[usize]) -> Vec<FormattedSyscallParam> {
  22. vec![FormattedSyscallParam::new(
  23. "max_size",
  24. format!("{:#x}", Self::max_size(args) as usize),
  25. )]
  26. }
  27. }
  28. impl SysEpollCreateHandle {
  29. fn max_size(args: &[usize]) -> i32 {
  30. args[0] as i32
  31. }
  32. }
  33. syscall_table_macros::declare_syscall!(SYS_EPOLL_CREATE, SysEpollCreateHandle);