blob: 9a10a7567e4d743b23ea13b7caeb2445c7a74c2d [file] [log] [blame]
// Copyright 2025 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use starnix_core::task::CurrentTask;
use starnix_core::vfs::{FsNode, FsNodeOps, SymlinkTarget, fs_node_impl_symlink};
use starnix_sync::{FileOpsCore, Locked};
use starnix_uapi::errors::Errno;
/// A node that represents a symlink to `proc/<pid>/task/<tid>` where <pid> and <tid> are derived
/// from the task reading the symlink.
pub struct ThreadSelfSymlink;
impl ThreadSelfSymlink {
pub fn new_node() -> impl FsNodeOps {
Self {}
}
}
impl FsNodeOps for ThreadSelfSymlink {
fs_node_impl_symlink!();
fn readlink(
&self,
_locked: &mut Locked<FileOpsCore>,
_node: &FsNode,
current_task: &CurrentTask,
) -> Result<SymlinkTarget, Errno> {
Ok(SymlinkTarget::Path(
format!("{}/task/{}", current_task.get_pid(), current_task.get_tid()).into(),
))
}
}