summaryrefslogtreecommitdiff
path: root/ls.c
diff options
context:
space:
mode:
Diffstat (limited to 'ls.c')
-rw-r--r--ls.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/ls.c b/ls.c
new file mode 100644
index 0000000..ce08840
--- /dev/null
+++ b/ls.c
@@ -0,0 +1,43 @@
+#include "types.h"
+#include "stat.h"
+#include "user.h"
+#include "fs.h"
+
+char buf[512];
+struct stat stat;
+struct dirent dirent;
+
+int
+main(int argc, char *argv[])
+{
+ int fd;
+ uint off;
+
+ if(argc > 1){
+ puts("Usage: ls\n");
+ exit();
+ }
+
+ fd = open(".", 0);
+ if(fd < 0){
+ printf(2, "ls: cannot open .\n");
+ exit();
+ }
+ if (fstat(fd, &stat) < 0) {
+ printf(2, "ls: cannot open .\n");
+ exit();
+ }
+ if (stat.st_type != T_DIR) {
+ printf(2, "ls: . is not a dir\n");
+ }
+ for(off = 0; off < stat.st_size; off += sizeof(struct dirent)) {
+ if (read(fd, &dirent, sizeof(struct dirent)) != sizeof(struct dirent)) {
+ printf(2, "ls: read error\n");
+ exit();
+ }
+ printf(1, "%s\n", dirent.name);
+ }
+ close(fd);
+
+ exit();
+}