85 lines
1.2 KiB
C
85 lines
1.2 KiB
C
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#ifdef CONFIG_GETMNTENT
|
|
#include <mntent.h>
|
|
|
|
#include "mountcheck.h"
|
|
|
|
#define MTAB "/etc/mtab"
|
|
|
|
int device_is_mounted(const char *dev)
|
|
{
|
|
FILE *mtab;
|
|
struct mntent *mnt;
|
|
int ret = 0;
|
|
|
|
mtab = setmntent(MTAB, "r");
|
|
if (!mtab)
|
|
return 0;
|
|
|
|
while ((mnt = getmntent(mtab)) != NULL) {
|
|
if (!mnt->mnt_fsname)
|
|
continue;
|
|
if (!strcmp(mnt->mnt_fsname, dev)) {
|
|
ret = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
endmntent(mtab);
|
|
return ret;
|
|
}
|
|
|
|
#elif defined(CONFIG_GETMNTINFO)
|
|
/* for most BSDs */
|
|
#include <sys/param.h>
|
|
#include <sys/mount.h>
|
|
|
|
int device_is_mounted(const char *dev)
|
|
{
|
|
struct statfs *st;
|
|
int i, ret;
|
|
|
|
ret = getmntinfo(&st, MNT_NOWAIT);
|
|
if (ret <= 0)
|
|
return 0;
|
|
|
|
for (i = 0; i < ret; i++) {
|
|
if (!strcmp(st[i].f_mntfromname, dev))
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
#elif defined(CONFIG_GETMNTINFO_STATVFS)
|
|
/* for NetBSD */
|
|
#include <sys/statvfs.h>
|
|
|
|
int device_is_mounted(const char *dev)
|
|
{
|
|
struct statvfs *st;
|
|
int i, ret;
|
|
|
|
ret = getmntinfo(&st, MNT_NOWAIT);
|
|
if (ret <= 0)
|
|
return 0;
|
|
|
|
for (i = 0; i < ret; i++) {
|
|
if (!strcmp(st[i].f_mntfromname, dev))
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
#else
|
|
/* others */
|
|
|
|
int device_is_mounted(const char *dev)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
#endif
|