Added code to move pointer till end of parsed string as being done by 
simple_strtoul. Not checking return value of kstrtoul
Signed-off-by: Asheesh Ranjan <asheesh....@outlook.com>
---
 drivers/staging/speakup/varhandlers.c |   17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/speakup/varhandlers.c 
b/drivers/staging/speakup/varhandlers.c
index 1b0d1c0..0e516cf 100644
--- a/drivers/staging/speakup/varhandlers.c
+++ b/drivers/staging/speakup/varhandlers.c
@@ -322,9 +322,22 @@ char *spk_strlwr(char *s)
 
 char *spk_s2uchar(char *start, char *dest)
 {
-       int val = 0;
+       long val = 0, val_copy;
+       int err;
+
+       err = kstrtoul(skip_spaces(start), 10, &val);
+
+       while (isspace(*start))
+               start++; /*Skip leading whitespace*/
+       val_copy = val*10;
+       while (val_copy != 0) { /* Keep track of number of digits left */
+               if (isdigit(*start)) {
+                       val_copy /= 10;
+                       start++; /* Move forward by a digit */
+               } else
+                       break;
+       }
 
-       val = simple_strtoul(skip_spaces(start), &start, 10);
        if (*start == ',')
                start++;
        *dest = (u_char)val;
-- 
1.7.10.4

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to