#include <vm/swap_pager.h>
#include <sys/vmmeter.h>
#include <sys/exec.h>
+#include <sys/devfs.h>
#include <machine/clock.h>
#include <machine/cputypes.h>
return (error);
}
+static void
+linprocfs_dodevices_callback(char *name, cdev_t dev, bool is_alias, void *arg)
+{
+ struct sbuf *sb = arg;
+
+ sbuf_printf(sb, "%3d %s\n", dev->si_umajor, name);
+}
+
int
linprocfs_dodevices(struct proc *curp, struct proc *p, struct pfsnode *pfs,
- struct uio *uio)
+ struct uio *uio)
{
- return 0;
+ struct sbuf *sb;
+ int error;
+
+ sb = sbuf_new_auto();
+ sbuf_printf(sb, "Character devices:\n");
+ devfs_scan_callback(linprocfs_dodevices_callback, sb);
+ sbuf_printf(sb, "\nBlock devices:\n");
+ sbuf_finish(sb);
+ error = uiomove_frombuf(sbuf_data(sb), sbuf_len(sb), uio);
+ sbuf_delete(sb);
+ return (error);
}
int
error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Psys);
goto out;
}
+ if (CNEQ(cnp, "devices", 7)) {
+ error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Pdevices);
+ goto out;
+ }
pid = atopid(pname, cnp->cn_namelen);
if (pid == NO_PID)
info.uio = uio;
info.cred = ap->a_cred;
- while (info.pcnt < 12) {
+ while (info.pcnt < 13) {
res = linprocfs_readdir_root_callback(NULL, &info);
if (res < 0)
break;
d_name = "mounts";
d_type = DT_DIR;
break;
-#if 0
- case 11:
+ case 12:
d_ino = PROCFS_FILENO(0, Pdevices);
d_namlen = 7;
d_name = "devices";
d_type = DT_REG;
break;
-#endif
default:
/*
* Ignore processes that aren't in our prison