X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/f044ca812256b421e793c4335ce1ffed74710a70..bcc25888b3299758ad36721530cca3b899b7166c:/lunaix-os/kernel/fs/fsm.c diff --git a/lunaix-os/kernel/fs/fsm.c b/lunaix-os/kernel/fs/fsm.c index ca1221c..8638905 100644 --- a/lunaix-os/kernel/fs/fsm.c +++ b/lunaix-os/kernel/fs/fsm.c @@ -13,9 +13,13 @@ #include #include +#include +#include + #define HASH_BUCKET_BITS 4 #define HASH_BUCKET_NUM (1 << HASH_BUCKET_BITS) +DEFINE_LLIST(fs_flatlist); DECLARE_HASHTABLE(fs_registry, HASH_BUCKET_NUM); void @@ -31,6 +35,7 @@ fsm_register(struct filesystem* fs) { hstr_rehash(&fs->fs_name, HSTR_FULL_HASH); hashtable_hash_in(fs_registry, &fs->fs_list, fs->fs_name.hash); + llist_append(&fs_flatlist, &fs->fs_flat); } struct filesystem* @@ -59,4 +64,34 @@ fsm_new_fs(char* name, size_t name_len) } fs->fs_name = HHSTR(name, name_len, 0); return fs; -} \ No newline at end of file +} + +void +fsm_itbegin(struct fs_iter* iterator) +{ + iterator->fs = list_entry(&fs_flatlist, struct filesystem, fs_flat); +} + +bool +fsm_itnext(struct fs_iter* iterator) +{ + iterator->fs = list_next(iterator->fs, struct filesystem, fs_flat); + return &iterator->fs->fs_flat != &fs_flatlist; +} + +static void +__twimap_read_fstab(struct twimap *mapping) +{ + struct filesystem *pos, *n; + llist_for_each(pos, n, &fs_flatlist, fs_flat) + { + twimap_printf(mapping, "%s %d\n", pos->fs_name.value, pos->types); + } +} + +static void +fstab_twifs_plugin() +{ + twimap_export_value(NULL, fstab, FSACL_ugR, NULL); +} +EXPORT_TWIFS_PLUGIN(fstab, fstab_twifs_plugin); \ No newline at end of file