Make /proc/self/fd `work'.
On Linux, /proc/<pid>/fd is comparable to fdescfs, where it allows you to inspect the file descriptors used by each process. Glibc's ttyname() works by performing a readlink() on these nodes, since all nodes in this directory are symlinks. It is a bit hard to implement this in linprocfs right now, so I am not going to bother. Add a way to make ttyname(3) work, by adding a /proc/<pid>/fd symlink, which points to /dev/fd only if the calling process matches. When fdescfs is mounted, this will cause the readlink() in ttyname() to fail, causing it to fall back on manually finding a matching node in /dev. Discussed on: emulation@
This commit is contained in:
parent
11a06432c3
commit
ec492b4973
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=204825
@ -1244,6 +1244,20 @@ linprocfs_domodules(PFS_FILL_ARGS)
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Filler function for proc/pid/fd
|
||||
*/
|
||||
static int
|
||||
linprocfs_dofdescfs(PFS_FILL_ARGS)
|
||||
{
|
||||
|
||||
if (p == curproc)
|
||||
sbuf_printf(sb, "/dev/fd");
|
||||
else
|
||||
sbuf_printf(sb, "unknown");
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Constructor
|
||||
*/
|
||||
@ -1312,6 +1326,8 @@ linprocfs_init(PFS_INIT_ARGS)
|
||||
NULL, NULL, NULL, PFS_RD);
|
||||
pfs_create_file(dir, "status", &linprocfs_doprocstatus,
|
||||
NULL, NULL, NULL, PFS_RD);
|
||||
pfs_create_link(dir, "fd", &linprocfs_dofdescfs,
|
||||
NULL, NULL, NULL, 0);
|
||||
|
||||
/* /proc/scsi/... */
|
||||
dir = pfs_create_dir(root, "scsi", NULL, NULL, NULL, 0);
|
||||
|
Loading…
Reference in New Issue
Block a user