ARM: OMAP1: use BUG_ON where possible
[pandora-kernel.git] / lib / parser.c
index c434100..52cfa69 100644 (file)
@@ -122,13 +122,14 @@ int match_token(char *s, const match_table_t table, substring_t args[])
  *
  * Description: Given a &substring_t and a base, attempts to parse the substring
  * as a number in that base. On success, sets @result to the integer represented
- * by the string and returns 0. Returns either -ENOMEM or -EINVAL on failure.
+ * by the string and returns 0. Returns -ENOMEM, -EINVAL, or -ERANGE on failure.
  */
 static int match_number(substring_t *s, int *result, int base)
 {
        char *endp;
        char *buf;
        int ret;
+       long val;
        size_t len = s->to - s->from;
 
        buf = kmalloc(len + 1, GFP_KERNEL);
@@ -136,10 +137,15 @@ static int match_number(substring_t *s, int *result, int base)
                return -ENOMEM;
        memcpy(buf, s->from, len);
        buf[len] = '\0';
-       *result = simple_strtol(buf, &endp, base);
+
        ret = 0;
+       val = simple_strtol(buf, &endp, base);
        if (endp == buf)
                ret = -EINVAL;
+       else if (val < (long)INT_MIN || val > (long)INT_MAX)
+               ret = -ERANGE;
+       else
+               *result = (int) val;
        kfree(buf);
        return ret;
 }