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; |
