summaryrefslogtreecommitdiff
path: root/ls.c
diff options
context:
space:
mode:
authorrsc <rsc>2007-08-08 09:17:09 +0000
committerrsc <rsc>2007-08-08 09:17:09 +0000
commit2e51e12f0917229ff2bc8dfca22c9b35172e9445 (patch)
tree9e2c92372648f4d004c49e5139c4dfaa2ffdbdc5 /ls.c
parent3fd50978a8756be8859cc5b98fca51d2e7127623 (diff)
downloadxv6-labs-2e51e12f0917229ff2bc8dfca22c9b35172e9445.tar.gz
xv6-labs-2e51e12f0917229ff2bc8dfca22c9b35172e9445.tar.bz2
xv6-labs-2e51e12f0917229ff2bc8dfca22c9b35172e9445.zip
make ls work on directories
Diffstat (limited to 'ls.c')
-rw-r--r--ls.c12
1 files changed, 10 insertions, 2 deletions
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;
}