diff options
| author | Miguel <m.i@gmx.at> | 2018-10-15 16:29:50 +0200 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2018-10-15 16:29:50 +0200 |
| commit | e3a8099343aac9d94f411638ad84632d4b620132 (patch) | |
| tree | f0a1f73ab106c17b25fd8a5264a66b6b48e55e48 /userspace/ls.c | |
| parent | f35d2124c36f8d39a953b76620e081b79c2faffd (diff) | |
cleanup sys/ etc
Diffstat (limited to 'userspace/ls.c')
| -rw-r--r-- | userspace/ls.c | 56 |
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; } |
