sysfsutils: move to the correct directory
[openwrt-working-2016/.git] / package / libs / sysfsutils / patches / 200-mnt_path_check.patch
diff --git a/package/libs/sysfsutils/patches/200-mnt_path_check.patch b/package/libs/sysfsutils/patches/200-mnt_path_check.patch
new file mode 100644 (file)
index 0000000..8710578
--- /dev/null
@@ -0,0 +1,55 @@
+--- 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;
+ }
+ /**