diff options
author | rsc <rsc> | 2007-08-08 09:17:09 +0000 |
---|---|---|
committer | rsc <rsc> | 2007-08-08 09:17:09 +0000 |
commit | 2e51e12f0917229ff2bc8dfca22c9b35172e9445 (patch) | |
tree | 9e2c92372648f4d004c49e5139c4dfaa2ffdbdc5 /ls.c | |
parent | 3fd50978a8756be8859cc5b98fca51d2e7127623 (diff) | |
download | xv6-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.c | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -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; } |