diff --git a/kernel/include/thread/Task.h b/kernel/include/thread/Task.h index 20a9579f..ec4dd108 100644 --- a/kernel/include/thread/Task.h +++ b/kernel/include/thread/Task.h @@ -46,6 +46,8 @@ struct Task Descriptor files[TASK_MAX_FDS]; AddressSpace address_space; + + int alloc_fd(); }; void set_context_from_task(Task& task, Context* ctx); diff --git a/kernel/src/thread/Task.cpp b/kernel/src/thread/Task.cpp index 0c924d91..69414e7a 100644 --- a/kernel/src/thread/Task.cpp +++ b/kernel/src/thread/Task.cpp @@ -26,4 +26,17 @@ void task_restore_floating(Task& task) bool Task::is_user_task() { return user_task; +} + +int Task::alloc_fd() +{ + int fd; + for (fd = 0; fd < TASK_MAX_FDS; fd++) + { + if (!files[fd].is_open()) break; + } + + if (fd == TASK_MAX_FDS) { return -1; } + + return fd; } \ No newline at end of file