static void test_mtd_regioninfo(void **state) { struct region_info_user req; struct region_info_user rr; memset(&req, 0, sizeof(req)); memset(&rr, 0, sizeof(rr)); int mock_fd = 4; int regidx = 0xAA; rr.regionindex = regidx; expect_ioctl(MEMGETREGIONINFO, 0, &rr); int r = mtd_regioninfo(mock_fd, regidx, &req); assert_int_equal(r, 0); (void) state; }
static void print_region_info(const struct mtd_dev_info *mtd) { region_info_t reginfo; int r, fd; /* * If we don't have any region info, just return * * FIXME: We can't get region_info (via ioctl) without having the MTD * node path. This is a problem for `mtdinfo -a', for example, * since it doesn't provide any filepath information. */ if (!args.node || (!args.map && mtd->region_cnt == 0)) return; /* First open the device so we can query it */ fd = open(args.node, O_RDONLY | O_CLOEXEC); if (fd == -1) { sys_errmsg("couldn't open MTD dev: %s", args.node); if (mtd->region_cnt) return; } /* Walk all the regions and show the map for them */ if (mtd->region_cnt) { for (r = 0; r < mtd->region_cnt; ++r) { printf("Eraseblock region %i: ", r); if (mtd_regioninfo(fd, r, ®info) == 0) { printf(" offset: %#x size: %#x numblocks: %#x\n", reginfo.offset, reginfo.erasesize, reginfo.numblocks); if (args.map) print_region_map(mtd, fd, ®info); } else printf(" info is unavailable\n"); } } else { reginfo.offset = 0; reginfo.erasesize = mtd->eb_size; reginfo.numblocks = mtd->eb_cnt; reginfo.regionindex = 0; print_region_map(mtd, fd, ®info); } if (fd != -1) close(fd); }