From 55470cc8835ef774bf7defa9a4b319c8fa9d2f4b Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Sat, 9 Sep 2017 12:01:23 -0400 Subject: mtab: Add support for Solaris --- mtab.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'mtab.c') diff --git a/mtab.c b/mtab.c index a43e662..fb3f85b 100644 --- a/mtab.c +++ b/mtab.c @@ -30,14 +30,20 @@ # define BFS_MNTENT 1 #elif BSD # define BFS_MNTINFO 1 +#elif __SVR4 +# define BFS_MNTTAB 1 #endif #if BFS_MNTENT # include # include +# include #elif BFS_MNTINFO # include # include +#elif BFS_MNTTAB +# include +# include #endif /** @@ -162,6 +168,43 @@ fail_mtab: fail: return NULL; +#elif BFS_MNTTAB + + FILE *file = fopen(MNTTAB, "r"); + if (!file) { + goto fail; + } + + struct bfs_mtab *mtab = malloc(sizeof(*mtab)); + if (!mtab) { + goto fail_file; + } + mtab->table = NULL; + mtab->size = 0; + mtab->capacity = 0; + + struct mnttab mnt; + while (getmntent(file, &mnt) == 0) { + struct stat sb; + if (stat(mnt.mnt_mountp, &sb) != 0) { + continue; + } + + if (bfs_mtab_push(mtab, sb.st_dev, mnt.mnt_fstype) != 0) { + goto fail_mtab; + } + } + + fclose(file); + return mtab; + +fail_mtab: + free_bfs_mtab(mtab); +fail_file: + fclose(file); +fail: + return NULL; + #else errno = ENOTSUP; -- cgit v1.2.3