diff options
| author | Artem Bityutskiy <artem.bityutskiy@linux.intel.com> | 2012-02-09 10:13:29 -0800 | 
|---|---|---|
| committer | Artem Bityutskiy <artem.bityutskiy@linux.intel.com> | 2012-02-14 11:00:09 +0200 | 
| commit | eded3cd0a52252f677ceacd1fbcae13be3d55e8f (patch) | |
| tree | 3b42b49e75a63871440b1e1969ce5ce2bc24134f /lib | |
| parent | cc2e57ba328951dca3c34bea2c5d2d3409b16b29 (diff) | |
limbtd: implement mtd_dev_present for old kernels
Implement the 'legacy_dev_present()' function which will check whether an MTD
device is present by scanning the /proc/mtd file when the MTD subsystem does
not support sysfs (the case for pre-2.6.30 kernels).
This patch also moves the 'mtd_dev_present()' function to a slightly more
logical position.
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/libmtd.c | 25 | ||||
| -rw-r--r-- | lib/libmtd_int.h | 1 | ||||
| -rw-r--r-- | lib/libmtd_legacy.c | 25 | 
3 files changed, 38 insertions, 13 deletions
diff --git a/lib/libmtd.c b/lib/libmtd.c index 888d118..ecf182f 100644 --- a/lib/libmtd.c +++ b/lib/libmtd.c @@ -641,6 +641,18 @@ void libmtd_close(libmtd_t desc)  	free(lib);  } +int mtd_dev_present(libmtd_t desc, int mtd_num) { +	struct stat st; +	struct libmtd *lib = (struct libmtd *)desc; +	char file[strlen(lib->mtd) + 10]; + +	if (!lib->sysfs_supported) +		return legacy_dev_present(mtd_num); + +	sprintf(file, lib->mtd, mtd_num); +	return !stat(file, &st); +} +  int mtd_get_info(libmtd_t desc, struct mtd_info *info)  {  	DIR *sysfs_mtd; @@ -713,19 +725,6 @@ out_close:  	return -1;  } -int mtd_dev_present(libmtd_t desc, int mtd_num) { -	struct stat st; -	struct libmtd *lib = (struct libmtd *)desc; -	char file[strlen(lib->mtd) + 10]; - -	if (!lib->sysfs_supported) -		/* TODO: add legacy_dev_present() function */ -		return 1; - -	sprintf(file, lib->mtd, mtd_num); -	return !stat(file, &st); -} -  int mtd_get_dev_info1(libmtd_t desc, int mtd_num, struct mtd_dev_info *mtd)  {  	int ret; diff --git a/lib/libmtd_int.h b/lib/libmtd_int.h index bb48d35..7913e67 100644 --- a/lib/libmtd_int.h +++ b/lib/libmtd_int.h @@ -95,6 +95,7 @@ struct libmtd  };  int legacy_libmtd_open(void); +int legacy_dev_present(int mtd_num);  int legacy_mtd_get_info(struct mtd_info *info);  int legacy_get_dev_info(const char *node, struct mtd_dev_info *mtd);  int legacy_get_dev_info1(int dev_num, struct mtd_dev_info *mtd); diff --git a/lib/libmtd_legacy.c b/lib/libmtd_legacy.c index d6c3938..d3f1672 100644 --- a/lib/libmtd_legacy.c +++ b/lib/libmtd_legacy.c @@ -170,6 +170,31 @@ int legacy_libmtd_open(void)  }  /** + * legacy_dev_presentl - legacy version of 'mtd_dev_present()'. + * @info: the MTD device information is returned here + * + * When the kernel does not provide sysfs files for the MTD subsystem, + * fall-back to parsing the /proc/mtd file to determine whether an mtd device + * number @mtd_num is present. + */ +int legacy_dev_present(int mtd_num) +{ +	int ret; +	struct proc_parse_info pi; + +	ret = proc_parse_start(&pi); +	if (ret) +		return -1; + +	while (proc_parse_next(&pi)) { +		if (pi.mtd_num == mtd_num) +			return 1; +	} + +	return 0; +} + +/**   * legacy_mtd_get_info - legacy version of 'mtd_get_info()'.   * @info: the MTD device information is returned here   *  | 
