diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2018-12-18 12:55:40 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-12-18 12:55:40 +0100 |
commit | 6b0fbd14fc0566a4f6cedf50f6301143e74adca5 (patch) | |
tree | 8812e9e0dec24e4486268715083cff91394ee669 | |
parent | 71c82d1d8ca0617290600050728feda906878115 (diff) | |
download | busybox-w32-6b0fbd14fc0566a4f6cedf50f6301143e74adca5.tar.gz busybox-w32-6b0fbd14fc0566a4f6cedf50f6301143e74adca5.tar.bz2 busybox-w32-6b0fbd14fc0566a4f6cedf50f6301143e74adca5.zip |
bc: rewrite more for() loops
function old new delta
bc_program_name 75 67 -8
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | miscutils/bc.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c index 0cd8ba6b4..927873d86 100644 --- a/miscutils/bc.c +++ b/miscutils/bc.c | |||
@@ -2064,7 +2064,7 @@ static FAST_FUNC BC_STATUS zbc_num_p(BcNum *a, BcNum *b, BcNum *restrict c, size | |||
2064 | BcNum copy; | 2064 | BcNum copy; |
2065 | unsigned long pow; | 2065 | unsigned long pow; |
2066 | size_t i, powrdx, resrdx; | 2066 | size_t i, powrdx, resrdx; |
2067 | bool neg, zero; | 2067 | bool neg; |
2068 | 2068 | ||
2069 | if (b->rdx) RETURN_STATUS(bc_error("non integer number")); | 2069 | if (b->rdx) RETURN_STATUS(bc_error("non integer number")); |
2070 | 2070 | ||
@@ -2116,7 +2116,6 @@ static FAST_FUNC BC_STATUS zbc_num_p(BcNum *a, BcNum *b, BcNum *restrict c, size | |||
2116 | bc_num_copy(c, ©); | 2116 | bc_num_copy(c, ©); |
2117 | 2117 | ||
2118 | for (resrdx = powrdx, pow >>= 1; pow != 0; pow >>= 1) { | 2118 | for (resrdx = powrdx, pow >>= 1; pow != 0; pow >>= 1) { |
2119 | |||
2120 | powrdx <<= 1; | 2119 | powrdx <<= 1; |
2121 | s = zbc_num_mul(©, ©, ©, powrdx); | 2120 | s = zbc_num_mul(©, ©, ©, powrdx); |
2122 | if (s) goto err; | 2121 | if (s) goto err; |
@@ -2141,10 +2140,13 @@ static FAST_FUNC BC_STATUS zbc_num_p(BcNum *a, BcNum *b, BcNum *restrict c, size | |||
2141 | if (c->rdx > scale) bc_num_truncate(c, c->rdx - scale); | 2140 | if (c->rdx > scale) bc_num_truncate(c, c->rdx - scale); |
2142 | 2141 | ||
2143 | // We can't use bc_num_clean() here. | 2142 | // We can't use bc_num_clean() here. |
2144 | for (zero = true, i = 0; zero && i < c->len; ++i) zero = !c->num[i]; | 2143 | for (i = 0; i < c->len; ++i) |
2145 | if (zero) bc_num_setToZero(c, scale); | 2144 | if (c->num[i] != 0) |
2145 | goto skip; | ||
2146 | bc_num_setToZero(c, scale); | ||
2147 | skip: | ||
2146 | 2148 | ||
2147 | err: | 2149 | err: |
2148 | bc_num_free(©); | 2150 | bc_num_free(©); |
2149 | RETURN_STATUS(s); | 2151 | RETURN_STATUS(s); |
2150 | } | 2152 | } |
@@ -2989,7 +2991,7 @@ static BC_STATUS zbc_lex_string(BcLex *l) | |||
2989 | 2991 | ||
2990 | l->t.t = BC_LEX_STR; | 2992 | l->t.t = BC_LEX_STR; |
2991 | 2993 | ||
2992 | for (c = l->buf[i]; c != 0 && c != '"'; c = l->buf[++i]) | 2994 | for (c = l->buf[i]; c != '\0' && c != '"'; c = l->buf[++i]) |
2993 | nls += (c == '\n'); | 2995 | nls += (c == '\n'); |
2994 | 2996 | ||
2995 | if (c == '\0') { | 2997 | if (c == '\0') { |
@@ -5246,14 +5248,16 @@ static size_t bc_program_index(char *code, size_t *bgn) | |||
5246 | static char *bc_program_name(char *code, size_t *bgn) | 5248 | static char *bc_program_name(char *code, size_t *bgn) |
5247 | { | 5249 | { |
5248 | size_t i; | 5250 | size_t i; |
5249 | char c, *s, *str = code + *bgn, *ptr = strchr(str, BC_PARSE_STREND); | 5251 | char *s, *str = code + *bgn, *ptr = strchr(str, BC_PARSE_STREND); |
5250 | 5252 | ||
5251 | s = xmalloc(ptr - str + 1); | 5253 | s = xmalloc(ptr - str + 1); |
5252 | c = code[(*bgn)++]; | 5254 | i = 0; |
5253 | 5255 | for (;;) { | |
5254 | for (i = 0; c != 0 && c != BC_PARSE_STREND; c = code[(*bgn)++], ++i) | 5256 | char c = code[(*bgn)++]; |
5255 | s[i] = c; | 5257 | if (c == '\0' || c == BC_PARSE_STREND) |
5256 | 5258 | break; | |
5259 | s[i++] = c; | ||
5260 | } | ||
5257 | s[i] = '\0'; | 5261 | s[i] = '\0'; |
5258 | 5262 | ||
5259 | return s; | 5263 | return s; |