#include "common.h"
#include <libmtd.h>
-static struct nand_oobinfo none_oobinfo = {
- .useecc = MTD_NANDECC_OFF,
-};
-
static void display_help(void)
{
printf(
{
long long ofs, end_addr = 0;
long long blockstart = 1;
- int ret, i, fd, ofd = 0, bs, badblock = 0;
+ int i, fd, ofd = 0, bs, badblock = 0;
struct mtd_dev_info mtd;
char pretty_buf[PRETTY_BUF_LEN];
- int oobinfochanged = 0, firstblock = 1;
- struct nand_oobinfo old_oobinfo;
+ int firstblock = 1;
struct mtd_ecc_stats stat1, stat2;
bool eccstats = false;
unsigned char *readbuf = NULL, *oobbuf = NULL;
readbuf = xmalloc(sizeof(readbuf) * mtd.min_io_size);
if (noecc) {
- ret = ioctl(fd, MTDFILEMODE, MTD_MODE_RAW);
- if (ret == 0) {
- oobinfochanged = 2;
- } else {
- switch (errno) {
- case ENOTTY:
- if (ioctl(fd, MEMGETOOBSEL, &old_oobinfo) != 0) {
- perror("MEMGETOOBSEL");
- goto closeall;
- }
- if (ioctl(fd, MEMSETOOBSEL, &none_oobinfo) != 0) {
- perror("MEMSETOOBSEL");
- goto closeall;
- }
- oobinfochanged = 1;
- break;
- default:
+ if (ioctl(fd, MTDFILEMODE, MTD_MODE_RAW) != 0) {
perror("MTDFILEMODE");
goto closeall;
- }
}
} else {
/* check if we can read ecc stats */
write(ofd, oobbuf, mtd.oob_size);
}
- /* reset oobinfo */
- if (oobinfochanged == 1) {
- if (ioctl(fd, MEMSETOOBSEL, &old_oobinfo) != 0) {
- perror("MEMSETOOBSEL");
- close(fd);
- close(ofd);
- return EXIT_FAILURE;
- }
- }
/* Close the output file and MTD device, free memory */
close(fd);
close(ofd);
return EXIT_SUCCESS;
closeall:
- /* The new mode change is per file descriptor ! */
- if (oobinfochanged == 1) {
- if (ioctl(fd, MEMSETOOBSEL, &old_oobinfo) != 0) {
- perror("MEMSETOOBSEL");
- }
- }
close(fd);
close(ofd);
free(oobbuf);