aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/libmtd.c12
-rw-r--r--lib/libmtd_int.h1
-rw-r--r--lib/libmtd_legacy.c18
3 files changed, 25 insertions, 6 deletions
diff --git a/lib/libmtd.c b/lib/libmtd.c
index 8bc532f..a50f18a 100644
--- a/lib/libmtd.c
+++ b/lib/libmtd.c
@@ -578,6 +578,11 @@ libmtd_t libmtd_open(void)
free(lib->sysfs_mtd);
free(lib->mtd_name);
lib->mtd_name = lib->mtd = lib->sysfs_mtd = NULL;
+
+ if (!legacy_procfs_is_supported()) {
+ free(lib);
+ lib = NULL;
+ }
return lib;
}
@@ -676,13 +681,8 @@ int mtd_get_info(libmtd_t desc, struct mtd_info *info)
* devices are present.
*/
sysfs_mtd = opendir(lib->sysfs_mtd);
- if (!sysfs_mtd) {
- if (errno == ENOENT) {
- errno = ENODEV;
- return -1;
- }
+ if (!sysfs_mtd)
return sys_errmsg("cannot open \"%s\"", lib->sysfs_mtd);
- }
info->lowest_mtd_num = INT_MAX;
while (1) {
diff --git a/lib/libmtd_int.h b/lib/libmtd_int.h
index db2f1cf..03b0863 100644
--- a/lib/libmtd_int.h
+++ b/lib/libmtd_int.h
@@ -98,6 +98,7 @@ struct libmtd
unsigned int offs64_ioctls:2;
};
+int legacy_procfs_is_supported(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);
diff --git a/lib/libmtd_legacy.c b/lib/libmtd_legacy.c
index ba8eade..46f51fd 100644
--- a/lib/libmtd_legacy.c
+++ b/lib/libmtd_legacy.c
@@ -146,6 +146,24 @@ static int proc_parse_next(struct proc_parse_info *pi)
}
/**
+ * legacy_procfs_is_supported - legacy version of 'sysfs_is_supported()'.
+ *
+ * Check if we can access the procfs files for the MTD subsystem.
+ */
+int legacy_procfs_is_supported(void)
+{
+ if (access(MTD_PROC_FILE, R_OK) != 0) {
+ if (errno == ENOENT) {
+ errno = 0;
+ } else {
+ sys_errmsg("cannot read \"%s\"", MTD_PROC_FILE);
+ }
+ return 0;
+ }
+ return 1;
+}
+
+/**
* legacy_dev_presentl - legacy version of 'mtd_dev_present()'.
* @info: the MTD device information is returned here
*