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 11 int 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 39 int 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 60 int 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 80 int device_is_mounted(const char *dev) 81 { 82 return 0; 83 } 84 85 #endif 86