Make lib/mountcheck.c a stand-alone library
[fio.git] / lib / mountcheck.c
... / ...
CommitLineData
1#include <stdio.h>
2#include <string.h>
3
4#ifdef CONFIG_GETMNTENT
5#include <mntent.h>
6
7#include "mountcheck.h"
8
9#define MTAB "/etc/mtab"
10
11int device_is_mounted(const char *dev)
12{
13 FILE *mtab;
14 struct mntent *mnt;
15 int ret = 0;
16
17 mtab = setmntent(MTAB, "r");
18 if (!mtab)
19 return 0;
20
21 while ((mnt = getmntent(mtab)) != NULL) {
22 if (!mnt->mnt_fsname)
23 continue;
24 if (!strcmp(mnt->mnt_fsname, dev)) {
25 ret = 1;
26 break;
27 }
28 }
29
30 endmntent(mtab);
31 return ret;
32}
33
34#elif defined(CONFIG_GETMNTINFO)
35/* for most BSDs */
36#include <sys/param.h>
37#include <sys/mount.h>
38
39int device_is_mounted(const char *dev)
40{
41 struct statfs *st;
42 int i, ret;
43
44 ret = getmntinfo(&st, MNT_NOWAIT);
45 if (ret <= 0)
46 return 0;
47
48 for (i = 0; i < ret; i++) {
49 if (!strcmp(st[i].f_mntfromname, dev))
50 return 1;
51 }
52
53 return 0;
54}
55
56#elif defined(CONFIG_GETMNTINFO_STATVFS)
57/* for NetBSD */
58#include <sys/statvfs.h>
59
60int device_is_mounted(const char *dev)
61{
62 struct statvfs *st;
63 int i, ret;
64
65 ret = getmntinfo(&st, MNT_NOWAIT);
66 if (ret <= 0)
67 return 0;
68
69 for (i = 0; i < ret; i++) {
70 if (!strcmp(st[i].f_mntfromname, dev))
71 return 1;
72 }
73
74 return 0;
75}
76
77#else
78/* others */
79
80int device_is_mounted(const char *dev)
81{
82 return 0;
83}
84
85#endif