mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-24 18:44:27 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- 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;
 | |
|  }
 | |
|  
 | |
|  /**
 |