diff options
Diffstat (limited to 'userspace/ls.c')
| -rw-r--r-- | userspace/ls.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/userspace/ls.c b/userspace/ls.c index 416e139..b3a17ef 100644 --- a/userspace/ls.c +++ b/userspace/ls.c @@ -1,10 +1,5 @@ #include "interface/fs.h" -void usage() -{ - puts("ls [inode_nr]"); -} - int main(int argc, char **argv) { char *dir=getenv("PWD"); @@ -13,8 +8,9 @@ int main(int argc, char **argv) { if(argv[1][0]!='/') { + if(!strcmp(dir,"/"))dir++; char buf[256]; - sprintf(buf,"%s/%s",dir,argv[1]); + sprintf(buf,"%s/%s",dir,argv[1]); dir=buf; } else @@ -23,16 +19,22 @@ int main(int argc, char **argv) } } + printf("listing %s\n",dir); + fs_dirent dirs; uint32_t pos=0; - int cnt=0; while(1) { - cnt =_readdir(dir,&dirs,&pos); - if(cnt<1) break; - printf("% 12i %s%c\n",dirs.inode, dirs.name, ((dirs.type==FS_FILE_TYPE_DIR)?'/':' ')); - } + uint32_t ret=_readdir(dir,&dirs,&pos); + if(ret==-1) + { + printf("directory not found!\n"); + break; + } + if(ret==0)break; + printf("% 12i %s%c\n",dirs.inode, dirs.name, ((dirs.type==FS_FILE_TYPE_DIR)?'/':' ')); + } return 0; } |
