Author: ed
Date: Sun Mar  7 10:43:45 2010
New Revision: 204825
URL: http://svn.freebsd.org/changeset/base/204825

Log:
  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@

Modified:
  head/sys/compat/linprocfs/linprocfs.c

Modified: head/sys/compat/linprocfs/linprocfs.c
==============================================================================
--- head/sys/compat/linprocfs/linprocfs.c       Sun Mar  7 10:08:00 2010        
(r204824)
+++ head/sys/compat/linprocfs/linprocfs.c       Sun Mar  7 10:43:45 2010        
(r204825)
@@ -1245,6 +1245,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
  */
 static int
@@ -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);
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to