diff --git a/toys/pending/lsof.c b/toys/pending/lsof.c
index 436fdd2..2852f41 100644
--- a/toys/pending/lsof.c
+++ b/toys/pending/lsof.c
@@ -8,10 +8,10 @@
   bool "lsof"
   default n
   help
-    usage: lsof [-lt] [-p PID1,PID2,...] [NAME]...
+    usage: lsof [-lt] [-p PID1,PID2,...] [FILE...]
 
-    Lists open files. If names are given on the command line, only
-    those files will be shown.
+    List all open files belonging to all active processes, or processes using
+    listed FILE(s).
 
     -l	list uids numerically
     -p	for given comma-separated pids only (default all pids)
@@ -25,17 +25,13 @@
   struct arg_list *p;
 
   struct stat *sought_files;
-
-  struct double_list *all_sockets;
-  struct double_list *files;
-  int last_shown_pid;
-  int shown_header;
+  struct double_list *all_sockets, *files;
+  int last_shown_pid, shown_header;
 )
 
 struct proc_info {
-  char cmd[10];
-  int pid;
-  char user[12];
+  char cmd[17];
+  int pid, uid;
 };
 
 struct file_info {
@@ -43,8 +39,7 @@
 
   // For output.
   struct proc_info pi;
-  char* name;
-  char fd[8], rw, locks, type[10], device[32], size_off[32], node[32];
+  char *name, fd[8], rw, locks, type[10], device[32], size_off[32], node[32];
 
   // For filtering.
   dev_t st_dev;
@@ -78,7 +73,7 @@
     }
 
     printf("%-9s %5d %10.10s %4s%c%c %7s %18s %9s %10s %s\n",
-           fi->pi.cmd, fi->pi.pid, fi->pi.user,
+           fi->pi.cmd, fi->pi.pid, getusername(fi->pi.uid),
            fi->fd, fi->rw, fi->locks, fi->type, fi->device, fi->size_off,
            fi->node, fi->name);
   }
@@ -164,10 +159,8 @@
     "ENCRYPTFS", "RDMA", "CRYPTO"
   };
 
-  if (sscanf(line, "%*p %u %*u %*x %*u %*u %*u %*u %*u %lu", &state, &inode)
-      < 2) {
+  if (sscanf(line, "%*p %u %*u %*x %*u %*u %*u %*u %*u %lu", &state, &inode)<2)
     return;
-  }
 
   struct file_info *fi = add_socket(inode, "netlink");
   fi->name =
@@ -388,40 +381,28 @@
   closedir(dir);
 }
 
-static void lsof_pid(int pid)
+static void lsof_pid(int pid, struct stat *st)
 {
   struct proc_info pi;
-  char *line;
   struct stat sb;
+  char *s;
+
+  pi.pid = pid;
 
   // Skip nonexistent pids
   sprintf(toybuf, "/proc/%d/stat", pid);
-  if (!(line = readfile(toybuf, toybuf, sizeof(toybuf)))) return;
-
-  // Get COMMAND.
-  strcpy(pi.cmd, "?");
-  if (line) {
-    char *open_paren = strchr(toybuf, '(');
-    char *close_paren = strrchr(toybuf, ')');
-
-    if (open_paren && close_paren) {
-      *close_paren = 0;
-      snprintf(pi.cmd, sizeof(pi.cmd), "%s", open_paren + 1);
-    }
-  }
-
-  // We already know PID.
-  pi.pid = pid;
+  if (!readfile(toybuf, toybuf, sizeof(toybuf)-1) || !(s = strchr(toybuf, '(')))
+    return;
+  memcpy(pi.cmd, s+1, sizeof(pi.cmd)-1);
+  pi.cmd[sizeof(pi.cmd)-1] = 0;
+  if ((s = strrchr(pi.cmd, ')'))) *s = 0;
 
   // Get USER.
-  snprintf(toybuf, sizeof(toybuf), "/proc/%d", pid);
-  if (!stat(toybuf, &sb)) {
-    struct passwd *pw;
-
-    if (!(toys.optflags&FLAG_l) && (pw = getpwuid(sb.st_uid))) {
-      snprintf(pi.user, sizeof(pi.user), "%s", pw->pw_name);
-    } else snprintf(pi.user, sizeof(pi.user), "%u", (unsigned)sb.st_uid);
+  if (!st) {
+    snprintf(toybuf, sizeof(toybuf), "/proc/%d", pid);
+    if (stat(toybuf, st = &sb)) return;
   }
+  pi.uid = st->st_uid;
 
   visit_symlink(&pi, "cwd", "cwd");
   visit_symlink(&pi, "rtd", "root");
@@ -435,7 +416,7 @@
   int pid;
 
   if (!node->parent) return DIRTREE_RECURSE|DIRTREE_SHUTUP;
-  if ((pid = atol(node->name))) lsof_pid(pid);
+  if ((pid = atol(node->name))) lsof_pid(pid, &node->st);
 
   return 0;
 }
@@ -443,22 +424,22 @@
 void lsof_main(void)
 {
   struct arg_list *pp;
-  int i;
+  int i, pid;
 
   // lsof will only filter on paths it can stat (because it filters by inode).
-  TT.sought_files = xmalloc(toys.optc*sizeof(struct stat));
-  for (i = 0; i<toys.optc; ++i) xstat(toys.optargs[i], TT.sought_files+i);
+  if (toys.optc) {
+    TT.sought_files = xmalloc(toys.optc*sizeof(struct stat));
+    for (i = 0; i<toys.optc; ++i) xstat(toys.optargs[i], TT.sought_files+i);
+  }
 
   if (!TT.p) dirtree_read("/proc", scan_proc);
   else for (pp = TT.p; pp; pp = pp->next) {
     char *start, *end, *next = pp->arg;
-    int length, pid;
 
-    while ((start = comma_iterate(&next, &length))) {
-      pid = strtol(start, &end, 10);
-      if (pid<1 || (*end && *end!=','))
-        error_exit("bad -p '%.*s'", (int)(end-start), start);
-      lsof_pid(pid);
+    while ((start = comma_iterate(&next, &i))) {
+      if ((pid = strtol(start, &end, 10))<1 || (*end && *end!=','))
+        error_msg("bad -p '%.*s'", (int)(end-start), start);
+      lsof_pid(pid, 0);
     }
   }
 
