feat: implement readlink(2) readlinkat(2)
[lunaix-os.git] / lunaix-os / kernel / demos / dir_read.c
1 #include <lunaix/dirent.h>
2 #include <lunaix/fctrl.h>
3 #include <lunaix/proc.h>
4 #include <lunaix/syslog.h>
5
6 LOG_MODULE("RDDIR")
7
8 void
9 _readdir_main()
10 {
11     int fd = open("/dev/./../dev/.", 0);
12     if (fd == -1) {
13         kprintf(KERROR "fail to open (%d)\n", geterrno());
14         return;
15     }
16
17     struct dirent ent = { .d_offset = 0 };
18
19     while (!readdir(fd, &ent)) {
20         kprintf(KINFO "%s\n", ent.d_name);
21     }
22
23     char path[129];
24
25     int len = readlinkat(fd, ".", path, 128);
26     if (len < 0) {
27         kprintf(KERROR "fail to read (%d)\n", geterrno());
28     }
29
30     path[len] = 0;
31
32     kprintf("%s\n", path);
33
34     close(fd);
35
36     return;
37 }