while (*s) {
                int digit1 = 0;
                int digit2 = 0;
-               if (!isdigit(*s)) return -3;
-               while (isdigit(*s)) { digit1 = digit1*10 + (*s - '0'); s++; }
+               char *endp;
+
+               digit1 = simple_strtoul(s, &endp, 10);
+               if (s == endp)
+                       return -3;
+               s = endp;
+
                if (digit1 <= 0 || digit1 > 30) return -4;
                if (*s == 0 || *s == ',' || *s == ' ') {
                        bmask |= (1 << digit1);
                }
                if (*s != '-') return -5;
                s++;
-               if (!isdigit(*s)) return -3;
-               while (isdigit(*s)) { digit2 = digit2*10 + (*s - '0'); s++; }
+
+               digit2 = simple_strtoul(s, &endp, 10);
+               if (s == endp)
+                       return -3;
+               s = endp;
+
                if (digit2 <= 0 || digit2 > 30) return -4;
                if (*s == 0 || *s == ',' || *s == ' ') {
                        if (digit1 > digit2)