diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2010-03-12 16:57:06 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-03-12 16:57:06 +0100 |
commit | 39fe4d159920f9b1b4ee537479216dc331d73b9c (patch) | |
tree | 81d8fe21e86e72222962e3c93b4297845d33f7df | |
parent | 58f108eb339957f58d5a6034d82b09c4d50b53e3 (diff) | |
download | busybox-w32-39fe4d159920f9b1b4ee537479216dc331d73b9c.tar.gz busybox-w32-39fe4d159920f9b1b4ee537479216dc331d73b9c.tar.bz2 busybox-w32-39fe4d159920f9b1b4ee537479216dc331d73b9c.zip |
awk: code shrink
function old new delta
exec_builtin 1538 1489 -49
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | editors/awk.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/editors/awk.c b/editors/awk.c index d7c114e05..2510192a6 100644 --- a/editors/awk.c +++ b/editors/awk.c | |||
@@ -2103,7 +2103,6 @@ static NOINLINE var *exec_builtin(node *op, var *res) | |||
2103 | uint32_t isr, info; | 2103 | uint32_t isr, info; |
2104 | int nargs; | 2104 | int nargs; |
2105 | time_t tt; | 2105 | time_t tt; |
2106 | char *s, *s1; | ||
2107 | int i, l, ll, n; | 2106 | int i, l, ll, n; |
2108 | 2107 | ||
2109 | tv = nvalloc(4); | 2108 | tv = nvalloc(4); |
@@ -2135,7 +2134,9 @@ static NOINLINE var *exec_builtin(node *op, var *res) | |||
2135 | #endif | 2134 | #endif |
2136 | break; | 2135 | break; |
2137 | 2136 | ||
2138 | case B_sp: | 2137 | case B_sp: { |
2138 | char *s, *s1; | ||
2139 | |||
2139 | if (nargs > 2) { | 2140 | if (nargs > 2) { |
2140 | spl = (an[2]->info & OPCLSMASK) == OC_REGEXP ? | 2141 | spl = (an[2]->info & OPCLSMASK) == OC_REGEXP ? |
2141 | an[2] : mk_splitter(getvar_s(evaluate(an[2], &tv[2])), &tspl); | 2142 | an[2] : mk_splitter(getvar_s(evaluate(an[2], &tv[2])), &tspl); |
@@ -2147,12 +2148,15 @@ static NOINLINE var *exec_builtin(node *op, var *res) | |||
2147 | s1 = s; | 2148 | s1 = s; |
2148 | clear_array(iamarray(av[1])); | 2149 | clear_array(iamarray(av[1])); |
2149 | for (i = 1; i <= n; i++) | 2150 | for (i = 1; i <= n; i++) |
2150 | setari_u(av[1], i, nextword(&s1)); | 2151 | setari_u(av[1], i, nextword(&s)); |
2151 | free(s); | 2152 | free(s1); |
2152 | setvar_i(res, n); | 2153 | setvar_i(res, n); |
2153 | break; | 2154 | break; |
2155 | } | ||
2156 | |||
2157 | case B_ss: { | ||
2158 | char *s; | ||
2154 | 2159 | ||
2155 | case B_ss: | ||
2156 | l = strlen(as[0]); | 2160 | l = strlen(as[0]); |
2157 | i = getvar_i(av[1]) - 1; | 2161 | i = getvar_i(av[1]) - 1; |
2158 | if (i > l) | 2162 | if (i > l) |
@@ -2165,6 +2169,7 @@ static NOINLINE var *exec_builtin(node *op, var *res) | |||
2165 | s = xstrndup(as[0]+i, n); | 2169 | s = xstrndup(as[0]+i, n); |
2166 | setvar_p(res, s); | 2170 | setvar_p(res, s); |
2167 | break; | 2171 | break; |
2172 | } | ||
2168 | 2173 | ||
2169 | /* Bitwise ops must assume that operands are unsigned. GNU Awk 3.1.5: | 2174 | /* Bitwise ops must assume that operands are unsigned. GNU Awk 3.1.5: |
2170 | * awk '{ print or(-1,1) }' gives "4.29497e+09", not "-2.xxxe+09" */ | 2175 | * awk '{ print or(-1,1) }' gives "4.29497e+09", not "-2.xxxe+09" */ |
@@ -2193,7 +2198,8 @@ static NOINLINE var *exec_builtin(node *op, var *res) | |||
2193 | break; | 2198 | break; |
2194 | 2199 | ||
2195 | case B_lo: | 2200 | case B_lo: |
2196 | case B_up: | 2201 | case B_up: { |
2202 | char *s, *s1; | ||
2197 | s1 = s = xstrdup(as[0]); | 2203 | s1 = s = xstrdup(as[0]); |
2198 | while (*s1) { | 2204 | while (*s1) { |
2199 | //*s1 = (info == B_up) ? toupper(*s1) : tolower(*s1); | 2205 | //*s1 = (info == B_up) ? toupper(*s1) : tolower(*s1); |
@@ -2203,6 +2209,7 @@ static NOINLINE var *exec_builtin(node *op, var *res) | |||
2203 | } | 2209 | } |
2204 | setvar_p(res, s); | 2210 | setvar_p(res, s); |
2205 | break; | 2211 | break; |
2212 | } | ||
2206 | 2213 | ||
2207 | case B_ix: | 2214 | case B_ix: |
2208 | n = 0; | 2215 | n = 0; |
@@ -2210,14 +2217,14 @@ static NOINLINE var *exec_builtin(node *op, var *res) | |||
2210 | l = strlen(as[0]) - ll; | 2217 | l = strlen(as[0]) - ll; |
2211 | if (ll > 0 && l >= 0) { | 2218 | if (ll > 0 && l >= 0) { |
2212 | if (!icase) { | 2219 | if (!icase) { |
2213 | s = strstr(as[0], as[1]); | 2220 | char *s = strstr(as[0], as[1]); |
2214 | if (s) | 2221 | if (s) |
2215 | n = (s - as[0]) + 1; | 2222 | n = (s - as[0]) + 1; |
2216 | } else { | 2223 | } else { |
2217 | /* this piece of code is terribly slow and | 2224 | /* this piece of code is terribly slow and |
2218 | * really should be rewritten | 2225 | * really should be rewritten |
2219 | */ | 2226 | */ |
2220 | for (i=0; i<=l; i++) { | 2227 | for (i = 0; i <= l; i++) { |
2221 | if (strncasecmp(as[0]+i, as[1], ll) == 0) { | 2228 | if (strncasecmp(as[0]+i, as[1], ll) == 0) { |
2222 | n = i+1; | 2229 | n = i+1; |
2223 | break; | 2230 | break; |