aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-03-12 16:57:06 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2010-03-12 16:57:06 +0100
commit39fe4d159920f9b1b4ee537479216dc331d73b9c (patch)
tree81d8fe21e86e72222962e3c93b4297845d33f7df
parent58f108eb339957f58d5a6034d82b09c4d50b53e3 (diff)
downloadbusybox-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.c23
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;