Multiuser, Capabilities and Access Controls (#54)
[lunaix-os.git] / lunaix-os / usr / ls.c
1 #include <dirent.h>
2 #include <errno.h>
3 #include <stdio.h>
4
5 int
6 main(int argc, const char* argv[])
7 {
8     const char* path = ".";
9     if (argc > 1) {
10         path = argv[1];
11     }
12
13     DIR* dir = opendir(path);
14
15     if (!dir) {
16         goto done;
17     }
18
19     struct dirent* dent;
20     int i = 0, sz;
21     char bf[100];
22
23     while ((dent = readdir(dir))) {
24         if (dent->d_type == DT_DIR) {
25             sz = snprintf(bf, 100, "%s/", dent->d_name);
26         } else if (dent->d_type == DT_SYMLINK) {
27             sz = snprintf(bf, 100, "%s@", dent->d_name);
28         } else {
29             sz = snprintf(bf, 100, "%s", dent->d_name);
30         }
31
32         bf[sz] = 0;
33         printf("%-15s ", bf);
34
35         i++;
36         if ((i % 4) == 0) {
37             printf("\n");
38         }
39     }
40
41     if ((i % 4) != 0) {
42         printf("\n");
43     }
44
45 done:
46     int err = errno;
47     if (err) {
48         printf("failed: %d\n",err);
49     }
50
51     if (dir)
52         closedir(dir);
53
54     return err;
55 }