Multiuser, Capabilities and Access Controls (#54)
[lunaix-os.git] / lunaix-os / kernel / fs / fs_export.c
1 #include <lunaix/foptions.h>
2 #include <lunaix/fs.h>
3 #include <lunaix/fs/twifs.h>
4
5 extern struct llist_header all_mnts;
6
7 static void
8 __twimap_read_mounts(struct twimap* map)
9 {
10     char path[512];
11     struct v_mount* mnt = twimap_index(map, struct v_mount*);
12     size_t len = vfs_get_path(mnt->mnt_point, path, 511, 0);
13     path[len] = '\0';
14     twimap_printf(map, "%s at %s", mnt->super_block->fs->fs_name.value, path);
15     if ((mnt->flags & MNT_RO)) {
16         twimap_printf(map, ", ro");
17     } else {
18         twimap_printf(map, ", rw");
19     }
20     twimap_printf(map, "\n");
21 }
22
23 static int
24 __twimap_gonext_mounts(struct twimap* map)
25 {
26     struct v_mount* mnt = twimap_index(map, struct v_mount*);
27     if (mnt->list.next == &all_mnts) {
28         return 0;
29     }
30     map->index = container_of(mnt->list.next, struct v_mount, list);
31     return 1;
32 }
33
34 static void
35 __twimap_reset_mounts(struct twimap* map)
36 {
37     map->index = container_of(all_mnts.next, struct v_mount, list);
38 }
39
40 void
41 __twimap_read_version(struct twimap* map)
42 {
43     twimap_printf(map,
44                   "Lunaix "
45                   CONFIG_LUNAIX_VER
46                   " (gnu-cc " __VERSION__ ") " __DATE__ " " __TIME__);
47 }
48
49 void
50 vfs_export_attributes()
51 {
52     twimap_export_list (NULL, mounts,  FSACL_ugR, NULL);
53     twimap_export_value(NULL, version, FSACL_ugR, NULL);
54 }
55 EXPORT_TWIFS_PLUGIN(vfs_general, vfs_export_attributes);