diff --git a/kernel/include/kernel/OpenFileDescriptorSet.h b/kernel/include/kernel/OpenFileDescriptorSet.h index 4703789e..41c06041 100644 --- a/kernel/include/kernel/OpenFileDescriptorSet.h +++ b/kernel/include/kernel/OpenFileDescriptorSet.h @@ -58,6 +58,8 @@ namespace Kernel BAN::ErrorOr recvmsg(int socket, msghdr& message, int flags); BAN::ErrorOr sendmsg(int socket, const msghdr& message, int flags); + int get_max_open_fd() const; + BAN::ErrorOr file_of(int) const; BAN::ErrorOr path_of(int) const; BAN::ErrorOr> inode_of(int); diff --git a/kernel/kernel/OpenFileDescriptorSet.cpp b/kernel/kernel/OpenFileDescriptorSet.cpp index 482631b1..df9b005a 100644 --- a/kernel/kernel/OpenFileDescriptorSet.cpp +++ b/kernel/kernel/OpenFileDescriptorSet.cpp @@ -853,6 +853,15 @@ namespace Kernel return inode->sendmsg(message, flags | (is_nonblock ? MSG_DONTWAIT : 0)); } + int OpenFileDescriptorSet::get_max_open_fd() const + { + LockGuard _(m_mutex); + for (int fd = m_open_files.size() - 1; fd > 0; fd--) + if (m_open_files[fd]) + return fd; + return -1; + } + BAN::ErrorOr OpenFileDescriptorSet::file_of(int fd) const { LockGuard _(m_mutex);