From e3a8099343aac9d94f411638ad84632d4b620132 Mon Sep 17 00:00:00 2001 From: Miguel Date: Mon, 15 Oct 2018 16:29:50 +0200 Subject: cleanup sys/ etc --- userspace/ls.c | 56 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) (limited to 'userspace/ls.c') 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 +#include + +#include 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; } -- cgit v1.2.3