[PATCH 2/3] Discard the legacy interface MEMGETOOBSEL in flash_eraseall
Joakim Tjernlund
joakim.tjernlund at transmode.se
Fri Jun 11 05:44:27 EDT 2010
>
> The "struct nand_oobinfo" is able to record only 32 ECC code positions,which
> is not enough for many big NAND chips. Therefore, this structure is replaced
> by "struct nand_ecclayout" in linux kernel from the version 2.6.17.
> Consequently, the ioctl command changed from MEMGETOOBSEL to ECCGETLAYOUT.
>
> Now update flash_eraseall to use the new ioctl command ECCGETLAYOUT. In order
> to keep compatible with the old linux kernel, a linux version detection
> function is added.
>
> Signed-off-by: Stanley.Miao <stanley.miao at windriver.com>
> ---
> flash_eraseall.c | 71 ++++++++++++++++++++++++++++++++----------------------
> 1 files changed, 42 insertions(+), 29 deletions(-)
>
> diff --git a/flash_eraseall.c b/flash_eraseall.c
> index a22fc49..4e2108b 100644
> --- a/flash_eraseall.c
> +++ b/flash_eraseall.c
> @@ -43,6 +43,8 @@
> #define PROGRAM "flash_eraseall"
> #define VERSION "$Revision: 1.22 $"
>
> +#define LINUX_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
> +
> static const char *exe_name;
> static const char *mtd_device;
> static int quiet; /* true -- don't output progress */
> @@ -55,6 +57,21 @@ static void display_version (void);
> static struct jffs2_unknown_node cleanmarker;
> int target_endian = __BYTE_ORDER;
>
> +static int get_linux_version(void)
> +{
> + FILE *fd;
> + int a = 0, b = 0, c = 0;
> +
> + fd = fopen("/proc/version", "r");
> + if (fd) {
> + fscanf(fd, "Linux version %d.%d.%d", &a, &b, &c);
> + fclose(fd);
> + }
> +
> + return LINUX_VERSION(a, b, c);
> +}
> +
> +
The fopen could fail and if it does, I think you should default to "assume latest kernel"
Same goes for fscanf, you should at least test the return value.
Jocke
More information about the linux-mtd
mailing list