From 2e51e12f0917229ff2bc8dfca22c9b35172e9445 Mon Sep 17 00:00:00 2001 From: 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; }