From abb8c2703a3171fa33ea429e127c63a87975f6ab Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Mon, 14 Mar 2016 12:44:39 +0100 Subject: [PATCH] commands: ubidetach: Allow mtd devices as argument Instead of only allow ubi numbers make it possible to detach a mtd device. Signed-off-by: Sascha Hauer --- commands/ubi.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/commands/ubi.c b/commands/ubi.c index 8e35787fa..844d75dcb 100644 --- a/commands/ubi.c +++ b/commands/ubi.c @@ -122,14 +122,36 @@ BAREBOX_CMD_END static int do_ubidetach(int argc, char *argv[]) { - int ubi_num, ret; + int fd, ret; + struct mtd_info_user user; if (argc != 2) return COMMAND_ERROR_USAGE; - ubi_num = simple_strtoul(argv[1], NULL, 0); - ret = ubi_detach(ubi_num); + fd = open(argv[optind], O_RDWR); + if (fd < 0) { + int ubi_num = simple_strtoul(argv[1], NULL, 0); + ret = ubi_detach(ubi_num); + goto out; + } + ret = ioctl(fd, MEMGETINFO, &user); + if (!ret) { + int ubi_num = ubi_num_get_by_mtd(user.mtd); + if (ubi_num < 0) { + ret = ubi_num; + goto out; + } + + ret = ubi_detach(ubi_num); + if (!ret) + goto out_close; + } + +out_close: + close(fd); + +out: if (ret) printf("failed to detach: %s\n", strerror(-ret)); @@ -139,7 +161,7 @@ static int do_ubidetach(int argc, char *argv[]) BAREBOX_CMD_START(ubidetach) .cmd = do_ubidetach, BAREBOX_CMD_DESC("detach an UBI device") - BAREBOX_CMD_OPTS("UBINUM") + BAREBOX_CMD_OPTS("mtd device/UBINUM") BAREBOX_CMD_GROUP(CMD_GRP_PART) BAREBOX_CMD_END