diff options
author | kaashoek <kaashoek> | 2006-08-19 23:41:34 +0000 |
---|---|---|
committer | kaashoek <kaashoek> | 2006-08-19 23:41:34 +0000 |
commit | 8787cd01dfa6080d219f3dd7bbf03f3eb988a74e (patch) | |
tree | 7b1d86071a74d01013995508be4c5a267d0f23e2 /ls.c | |
parent | ceb0e427962d0656e672955585c04093b9efda90 (diff) | |
download | xv6-labs-8787cd01dfa6080d219f3dd7bbf03f3eb988a74e.tar.gz xv6-labs-8787cd01dfa6080d219f3dd7bbf03f3eb988a74e.tar.bz2 xv6-labs-8787cd01dfa6080d219f3dd7bbf03f3eb988a74e.zip |
chdir
cd in shell
nits in mkdir, ls, etc.
Diffstat (limited to 'ls.c')
-rw-r--r-- | ls.c | 30 |
1 files changed, 20 insertions, 10 deletions
@@ -15,22 +15,31 @@ main(int argc, char *argv[]) uint sz; int i; - if(argc > 1){ - puts("Usage: ls\n"); + if(argc > 2){ + puts("Usage: ls [dir]\n"); exit(); } - fd = open(".", 0); - if(fd < 0){ - printf(2, "ls: cannot open .\n"); - exit(); + if (argc == 2) { + fd = open(argv[1], 0); + if(fd < 0){ + printf(2, "ls: cannot open dir %s\n", argv[1]); + exit(); + } + } else { + fd = open(".", 0); + if(fd < 0){ + printf(2, "ls: cannot open .\n"); + exit(); + } } + if (fstat(fd, &st) < 0) { - printf(2, "ls: cannot open .\n"); + printf(2, "ls: cannot stat dir\n"); exit(); } if (st.st_type != T_DIR) { - printf(2, "ls: . is not a dir\n"); + printf(2, "ls: dir is not a directory\n"); } sz = st.st_size; for(off = 0; off < sz; off += sizeof(struct dirent)) { @@ -39,9 +48,10 @@ 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) { - printf(1, "stat: failed\n"); - break; + printf(1, "stat: failed %s\n", dirent.name); + continue; } for (i = 0; i < DIRSIZ; i++) { if (dirent.name[i] != '\0') |