ash: code shrink
authorDenys Vlasenko <vda.linux@googlemail.com>
Sat, 3 Oct 2009 23:14:19 +0000 (01:14 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 3 Oct 2009 23:14:19 +0000 (01:14 +0200)
function                                             old     new   delta
ulimitcmd                                            489     415     -74

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/ash.c

index e5503a140a11b286d7722eacc5770965cff5cbae..444a6961b4ae88ec266a374953b187ca4b721a1e 100644 (file)
@@ -12909,8 +12909,7 @@ printlim(enum limtype how, const struct rlimit *limit,
 static int FAST_FUNC
 ulimitcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
 {
-       int c;
-       rlim_t val = 0;
+       rlim_t val;
        enum limtype how = SOFT | HARD;
        const struct limits *l;
        int set, all = 0;
@@ -12971,6 +12970,7 @@ ulimitcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
                continue;
 
        set = *argptr ? 1 : 0;
+       val = 0;
        if (set) {
                char *p = *argptr;
 
@@ -12979,15 +12979,13 @@ ulimitcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
                if (strncmp(p, "unlimited\n", 9) == 0)
                        val = RLIM_INFINITY;
                else {
-                       val = (rlim_t) 0;
-
-                       while ((c = *p++) >= '0' && c <= '9') {
-                               val = (val * 10) + (long)(c - '0');
-                               // val is actually 'unsigned long int' and can't get < 0
-                               if (val < (rlim_t) 0)
-                                       break;
-                       }
-                       if (c)
+                       if (sizeof(val) == sizeof(int))
+                               val = bb_strtou(p, NULL, 10);
+                       else if (sizeof(val) == sizeof(long))
+                               val = bb_strtoul(p, NULL, 10);
+                       else
+                               val = bb_strtoull(p, NULL, 10);
+                       if (errno)
                                ash_msg_and_raise_error("bad number");
                        val <<= l->factor_shift;
                }