From 2e51e12f0917229ff2bc8dfca22c9b35172e9445 Mon Sep 17 00:00:00 2001
From: rsc <rsc>
Date: Wed, 8 Aug 2007 09:17:09 +0000
Subject: [PATCH] make ls work on directories

---
 BUGS |  3 ---
 ls.c | 12 ++++++++++--
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/BUGS b/BUGS
index 07ccc09..331d1d2 100644
--- a/BUGS
+++ b/BUGS
@@ -22,6 +22,3 @@ ide.c: synchronous disk write -> polling disk write.  search for
 
 fs.c: split all name operations off in name.c?  (starting with namei but move 
       wdir keep in fs.c)
-
-ls.c: apply tim's patch
-
diff --git a/ls.c b/ls.c
index dfb9f31..3a29a75 100644
--- a/ls.c
+++ b/ls.c
@@ -25,6 +25,7 @@ main(int argc, char *argv[])
   int fd;
   uint off;
   uint sz;
+  char *p;
 
   if(argc > 2){
     puts("Usage: ls [dir]\n");
@@ -63,8 +64,15 @@ main(int argc, char *argv[])
         break;
       }
       if(dirent.inum != 0) {
-        // xxx prepend to name the pathname supplied to ls (e.g. .. in ls ..)
-        if(stat (dirent.name, &st) < 0) {
+        p = buf;
+        if(argc == 2) {			  
+          strcpy(p, argv[1]);
+          p += strlen(p);
+          if(*(p-1) != '/')
+            *p++ = '/';
+        }
+        strcpy(p, dirent.name);
+        if(stat(buf, &st) < 0) {
           printf(1, "stat: failed %s\n", dirent.name);
           continue;
         }
-- 
GitLab