UBIFS: replace simple_strtoul() with kstrtoint()
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH v3 1/1 UBIFS: replace simple_strtoul() with kstrtoint()
use the newer and more pleasant kstrtoint() to replace simple_strtoul(), because simple_strtoul() is marked for obsoletion.
--- drivers/mtd/ubi/build.c | 9 +++++---- fs/ubifs/super.c | 14 ++++++++++---- 2 files changed, 15 insertions(+), 8 deletions(-)
drivers/mtd/ubi/build.c +5 -4
@@ -1190,11 +1190,12 @@ static struct mtd_info * __init open_mtd_by_chdev(const char *mtd_dev)static struct mtd_info *__init open_mtd_device (const char *mtd_dev) {struct mtd_info *mtd; -int mtd_num; -char *endp; +int mtd_num, ret; - mtd_num =simple_strtoul (mtd_dev, &endp,0 ); -if (*endp !='\0' || mtd_dev == endp) { + ret =kstrtoint (mtd_dev,0 , &mtd_num); +if (ret) +return ERR_PTR (-EINVAL ); +if (*mtd_dev !='\0' ) {/* * This does not look like an ASCII integer, probably this is * MTD device name.
fs/ubifs/super.c +10 -4
@@ -1903,8 +1903,8 @@ const struct super_operations ubifs_super_operations = {static struct ubi_volume_desc *open_ubi (const char *name,int mode) {struct ubi_volume_desc *ubi; -int dev, vol; -char *endptr; +int dev, vol, ret; +const char *endptr;/* First, try to open using the device node path method */ ubi =ubi_open_volume_path (name, mode);
@@ -1922,7 +1922,10 @@ static struct ubi_volume_desc *open_ubi(const char *name, int mode)if (!isdigit (name[3 ]))return ERR_PTR (-EINVAL ); - dev =simple_strtoul (name +3 , &endptr,0 ); + endptr = name +3 ; + ret =kstrtoint (endptr,0 , &dev); +if (ret) +return ERR_PTR (-EINVAL );/* ubiY method */ if (*endptr =='\0' )
@@ -1930,7 +1933,10 @@ static struct ubi_volume_desc *open_ubi(const char *name, int mode)/* ubiX_Y method */ if (*endptr =='_' &&isdigit (endptr[1 ])) { - vol =simple_strtoul (endptr +1 , &endptr,0 ); + endptr = endptr +1 ; + ret =kstrtoint (endptr,0 , &vol); +if (ret) +return ERR_PTR (-EINVAL );if (*endptr !='\0' )return ERR_PTR (-EINVAL );return ubi_open_volume (dev, vol, mode);
Signature · 4 lines
1.8.1.2 .
fs/ubifs/super.c static struct ubi_volume_desc *open_ubi(const char *name, int mode) · line 1925
Quoted 6 lines · Zhang Zhen
fs/ubifs/super.c +1
-1@@ -1922,7 +1922,10 @@ static struct ubi_volume_desc *open_ubi(const char *name, int mode)if (!isdigit (name[3 ]))return ERR_PTR (-EINVAL ); - dev =simple_strtoul (name +3 , &endptr,0 ); + endptr = name +3 ;
As Adrian pointed out, endptr is used later, and it must point to the character after the parsed number.
Quoted 7 lines
fs/ubifs/super.c +3
-0+ ret =kstrtoint (endptr,0 , &dev); +if (ret) +return ERR_PTR (-EINVAL );/* ubiY method */ if (*endptr =='\0' )
fs/ubifs/super.c static struct ubi_volume_desc *open_ubi(const char *name, int mode) · line 1939
Quoted 8 lines
fs/ubifs/super.c +4
-1@@ -1930,7 +1933,10 @@ static struct ubi_volume_desc *open_ubi(const char *name, int mode)/* ubiX_Y method */ if (*endptr =='_' &&isdigit (endptr[1 ])) { - vol =simple_strtoul (endptr +1 , &endptr,0 ); + endptr = endptr +1 ; + ret =kstrtoint (endptr,0 , &vol); +if (ret) +return ERR_PTR (-EINVAL );
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
Quoted 11 lines · Geert Uytterhoeven
fs/ubifs/super.c static struct ubi_volume_desc *open_ubi(const char *name, int mode) · line 1925
Quoted 6 lines · Zhang Zhen
fs/ubifs/super.c +1
-1@@ -1922,7 +1922,10 @@ static struct ubi_volume_desc *open_ubi(const char *name, int mode)if (!isdigit (name[3 ]))return ERR_PTR (-EINVAL ); - dev =simple_strtoul (name +3 , &endptr,0 ); + endptr = name +3 ;As Adrian pointed out, endptr is used later, and it must point to the character after the parsed number.
Okay, it appears kstrtoint is not suitable to replace the simple_strtoul here. The first argument of kstrto* can not point to the character after the parsed number.
Quoted 28 lines
Quoted 7 lines
fs/ubifs/super.c +3
-0+ ret =kstrtoint (endptr,0 , &dev); +if (ret) +return ERR_PTR (-EINVAL );/* ubiY method */ if (*endptr =='\0' )fs/ubifs/super.c static struct ubi_volume_desc *open_ubi(const char *name, int mode) · line 1939
Quoted 8 lines
fs/ubifs/super.c +4
-1@@ -1930,7 +1933,10 @@ static struct ubi_volume_desc *open_ubi(const char *name, int mode)/* ubiX_Y method */ if (*endptr =='_' &&isdigit (endptr[1 ])) { - vol =simple_strtoul (endptr +1 , &endptr,0 ); + endptr = endptr +1 ; + ret =kstrtoint (endptr,0 , &vol); +if (ret) +return ERR_PTR (-EINVAL );Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds