bc: shrink bc_program_index()
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 18 Dec 2018 14:49:42 +0000 (15:49 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 18 Dec 2018 14:49:42 +0000 (15:49 +0100)
function                                             old     new   delta
bc_program_index                                      66      47     -19
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-19)             Total: -19 bytes
   text    data     bss     dec     hex filename
 981418     485    7296  989199   f180f busybox_old
 981399     485    7296  989180   f17fc busybox_unstripped

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

index eaa28a94a4e8046fe9ab5be10cdcc9c4d06fcddd..2da7c317c3905fb3de311498bc39e85bed19a827 100644 (file)
@@ -5256,11 +5256,18 @@ exec_err:
 
 static size_t bc_program_index(char *code, size_t *bgn)
 {
-       char amt = code[(*bgn)++], i = 0;
-       size_t res = 0;
+       unsigned char *bytes = (void*)(code + *bgn);
+       unsigned amt;
+       unsigned i;
+       size_t res;
+
+       amt = *bytes++;
+       *bgn += amt + 1;
 
-       for (; i < amt; ++i, ++(*bgn))
-               res |= (((size_t)((int) code[*bgn]) & UCHAR_MAX) << (i * CHAR_BIT));
+       amt *= 8;
+       res = 0;
+       for (i = 0; i < amt; i += 8)
+               res |= (size_t)(*bytes++) << i;
 
        return res;
 }