12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- --- a/lib/sysfs_utils.c
- +++ b/lib/sysfs_utils.c
- @@ -22,6 +22,7 @@
- */
- #include "libsysfs.h"
- #include "sysfs.h"
- +#include <mntent.h>
-
- /**
- * sysfs_remove_trailing_slash: Removes any trailing '/' in the given path
- @@ -53,6 +54,9 @@ int sysfs_get_mnt_path(char *mnt_path, s
- {
- static char sysfs_path[SYSFS_PATH_MAX] = "";
- const char *sysfs_path_env;
- + FILE *mnt;
- + struct mntent *mntent;
- + int ret;
-
- if (len == 0 || mnt_path == NULL)
- return -1;
- @@ -64,12 +68,31 @@ int sysfs_get_mnt_path(char *mnt_path, s
- if (sysfs_path_env != NULL) {
- safestrcpymax(mnt_path, sysfs_path_env, len);
- sysfs_remove_trailing_slash(mnt_path);
- - return 0;
- + } else {
- + safestrcpymax(mnt_path, SYSFS_MNT_PATH, len);
- }
- - safestrcpymax(mnt_path, SYSFS_MNT_PATH, len);
- }
-
- - return 0;
- + /* check that mount point is indeed mounted */
- + ret = -1;
- + if ((mnt = setmntent(SYSFS_PROC_MNTS, "r")) == NULL) {
- + dprintf("Error getting mount information\n");
- + return -1;
- + }
- + while ((mntent = getmntent(mnt)) != NULL) {
- + if (strcmp(mntent->mnt_type, SYSFS_FSTYPE_NAME) == 0 &&
- + strcmp(mntent->mnt_dir, mnt_path) == 0) {
- + ret = 0;
- + break;
- + }
- + }
- +
- + endmntent(mnt);
- +
- + if (ret < 0)
- + errno = ENOENT;
- +
- + return ret;
- }
-
- /**
|