* find_mtd_device - open an MTD device by its name or number.
* @mtd_dev: name or number of the device
*
- * This function tries to open and MTD device with name @mtd_dev, and if it
- * fails, then it tries to interpret the @mtd_dev string as an ASCII-coded
- * integer and open an MTD device with this number. Returns MTD device
- * description object in case of success and a negative error code in case of
- * failure.
+ * This function tries to open and MTD device described by @mtd_dev string,
+ * which is first treated as an ASCII number, and if it is not true, it is
+ * treated as MTD device name. Returns MTD device description object in case of
+ * success and a negative error code in case of failure.
*/
static struct mtd_info * __init open_mtd_device(const char *mtd_dev)
{
struct mtd_info *mtd;
+ int mtd_num;
+ char *endp;
- mtd = get_mtd_device_nm(mtd_dev);
- if (IS_ERR(mtd)) {
- int mtd_num;
- char *endp;
-
- if (PTR_ERR(mtd) != -ENODEV)
- return mtd;
-
+ mtd_num = simple_strtoul(mtd_dev, &endp, 0);
+ if (*endp != '\0' || mtd_dev == endp) {
/*
- * Probably this is not MTD device name but MTD device number -
- * check this out.
+ * This does not look like an ASCII integer, probably this is
+ * MTD device name.
*/
- mtd_num = simple_strtoul(mtd_dev, &endp, 0);
- if (*endp != '\0' || mtd_dev == endp) {
- ubi_err("incorrect MTD device: \"%s\"", mtd_dev);
- return ERR_PTR(-ENODEV);
- }
-
+ mtd = get_mtd_device_nm(mtd_dev);
+ } else
mtd = get_mtd_device(NULL, mtd_num);
- if (IS_ERR(mtd))
- return mtd;
- }
return mtd;
}