| --- sysfsutils-2.0.0-old/lib/sysfs_utils.c 2005-12-07 12:28:18.000000000 +0100 |
| +++ sysfsutils-2.0.0/lib/sysfs_utils.c 2006-03-06 19:06:11.000000000 +0100 |
| @@ -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 @@ |
| { |
| 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 @@ |
| 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; |
| } |
| |
| /** |
| |