diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/sys/include/os/vfs.h | 11 | ||||
-rw-r--r-- | src/sys/os/vfs_init.c | 26 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/sys/include/os/vfs.h b/src/sys/include/os/vfs.h index a46bb18..e08a9f0 100644 --- a/src/sys/include/os/vfs.h +++ b/src/sys/include/os/vfs.h @@ -43,6 +43,17 @@ int vfs_init(void); /* + * Get a VFS file table entry by name + * + * @name: Name of desired entry + * @resp: Result pointer is written here + * + * Returns zero on success, otherwise a less than zero + * value upon failure. + */ +int vfs_by_name(const char *name, struct fs_info **resp); + +/* * Get a VFS file table entry by index. * * @index: Index to desired entry diff --git a/src/sys/os/vfs_init.c b/src/sys/os/vfs_init.c index b40b74d..496fb67 100644 --- a/src/sys/os/vfs_init.c +++ b/src/sys/os/vfs_init.c @@ -32,6 +32,7 @@ #include <sys/param.h> #include <sys/mount.h> #include <os/vfs.h> +#include <string.h> /* * The filesystem table @@ -41,6 +42,31 @@ static struct fs_info fstab[] = { }; /* + * Get entry by name + */ +int +vfs_by_name(const char *name, struct fs_info **resp) +{ + size_t nelem; + int retval = -ENOENT; + + if (name == NULL || resp == NULL) { + return -EINVAL; + } + + nelem = NELEM(fstab); + for (int i = 0; i < nelem; ++i) { + if (strcmp(fstab[i].name, name) == 0) { + *resp = &fstab[i]; + retval = 0; + break; + } + } + + return retval; +} + +/* * Get entry by index */ int |