OpenWrt – Rev 1

Subversion Repositories:
Rev:
--- 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;
 }
 
 /**