summaryrefslogtreecommitdiff
path: root/userspace/ls.c
diff options
context:
space:
mode:
Diffstat (limited to 'userspace/ls.c')
-rw-r--r--userspace/ls.c56
1 files changed, 28 insertions, 28 deletions
diff --git a/userspace/ls.c b/userspace/ls.c
index b3a17ef..b4cd262 100644
--- a/userspace/ls.c
+++ b/userspace/ls.c
@@ -1,40 +1,40 @@
-#include "interface/fs.h"
+/**
+ * @file
+ * poor mans 'ls' for fool-os user space
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sys/dirent.h>
int main(int argc, char **argv)
{
- char *dir=getenv("PWD");
+ DIR *dir;
- if(argc==2)
+ if(argc==1) // no param passed
+ {
+ // get current working directory
+ dir=opendir(getenv("PWD"));
+ }
+ else
{
- if(argv[1][0]!='/')
- {
- if(!strcmp(dir,"/"))dir++;
- char buf[256];
- sprintf(buf,"%s/%s",dir,argv[1]);
- dir=buf;
- }
- else
- {
- dir=argv[1];
- }
+ // use command line argument
+ dir=opendir(argv[1]);
}
- printf("listing %s\n",dir);
-
- fs_dirent dirs;
- uint32_t pos=0;
- while(1)
+ if(dir==NULL)
{
- uint32_t ret=_readdir(dir,&dirs,&pos);
- if(ret==-1)
- {
- printf("directory not found!\n");
- break;
+ printf("directory not found\n");
+ return EXIT_FAILURE;
+ }
- }
- if(ret==0)break;
- printf("% 12i %s%c\n",dirs.inode, dirs.name, ((dirs.type==FS_FILE_TYPE_DIR)?'/':' '));
+ // iterate over entries
+ struct dirent *d;
+ while((d=readdir(dir))!=NULL)
+ {
+ printf("% 12i %s%c\n",d->d_ino, d->d_name, ((d->type==FS_FILE_TYPE_DIR)?'/':' '));
}
- return 0;
+ return EXIT_SUCCESS;
}