summaryrefslogtreecommitdiff
path: root/userspace/ls.c
diff options
context:
space:
mode:
Diffstat (limited to 'userspace/ls.c')
-rw-r--r--userspace/ls.c46
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;
}