diff options
Diffstat (limited to 'userspace/ls.c')
| -rw-r--r-- | userspace/ls.c | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/userspace/ls.c b/userspace/ls.c index 5b5034b..4cbcb6d 100644 --- a/userspace/ls.c +++ b/userspace/ls.c @@ -7,28 +7,38 @@ void usage() int main(int argc, char **argv) { - fs_dirent *dirs=malloc(sizeof(fs_dirent)*25); + char *dir; + fs_dirent *dirs=malloc(sizeof(fs_dirent)*25); - if(argc!=2) + if(argc!=2) + { + dir=getenv("PWD"); + } + else + { + if(argv[1][0]=="/")dir=argv[1]; + else { - usage(); - return 0; - } - - char *dir=argv[1]; - int ls=readdir(dir,dirs,25); - if(ls==-1) - { - printf("%s: file or directory '%s' not found.\n",argv[0],dir); - return 0; - } - + char buf[256]; + sprintf(buf,"%s/%s",getenv("PWD"),argv[1]); + dir=buf; - int i; - for(i=0;i<ls;i++) - { - printf("%i %s%c\n",dirs[i].inode, dirs[i].name, ((dirs[i].type==FS_FILE_TYPE_DIR)?'/':' ')); } + } + int ls=readdir(dir,dirs,25); + if(ls==-1) + { + printf("%s: file or directory '%s' not found.\n",argv[0],dir); return 0; + } + + + int i; + for(i=0;i<ls;i++) + { + printf("%i %s%c\n",dirs[i].inode, dirs[i].name, ((dirs[i].type==FS_FILE_TYPE_DIR)?'/':' ')); + } + + return 0; } |
