diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2023-05-28 17:51:59 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2023-05-28 17:51:59 +0200 |
commit | 05e60007d42b8e4005085a22e122ef70bf888fa5 (patch) | |
tree | 30a8e6271212a15bef4493cb1b9ee770cc5f38e9 | |
parent | b76b420b5da1aadad823faf12327b610614f5951 (diff) | |
download | busybox-w32-05e60007d42b8e4005085a22e122ef70bf888fa5.tar.gz busybox-w32-05e60007d42b8e4005085a22e122ef70bf888fa5.tar.bz2 busybox-w32-05e60007d42b8e4005085a22e122ef70bf888fa5.zip |
awk: code shrink
function old new delta
awk_getline 620 591 -29
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | editors/awk.c | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/editors/awk.c b/editors/awk.c index 83a08aa95..eb419e063 100644 --- a/editors/awk.c +++ b/editors/awk.c | |||
@@ -2242,9 +2242,9 @@ static int awk_getline(rstream *rsm, var *v) | |||
2242 | { | 2242 | { |
2243 | char *b; | 2243 | char *b; |
2244 | regmatch_t pmatch[1]; | 2244 | regmatch_t pmatch[1]; |
2245 | int a, p, pp = 0; | 2245 | int p, pp; |
2246 | int fd, so, eo, r, rp; | 2246 | int fd, so, eo, retval, rp; |
2247 | char c, *m, *s; | 2247 | char *m, *s; |
2248 | 2248 | ||
2249 | debug_printf_eval("entered %s()\n", __func__); | 2249 | debug_printf_eval("entered %s()\n", __func__); |
2250 | 2250 | ||
@@ -2253,22 +2253,22 @@ static int awk_getline(rstream *rsm, var *v) | |||
2253 | */ | 2253 | */ |
2254 | fd = fileno(rsm->F); | 2254 | fd = fileno(rsm->F); |
2255 | m = rsm->buffer; | 2255 | m = rsm->buffer; |
2256 | a = rsm->adv; | ||
2257 | p = rsm->pos; | ||
2258 | c = (char) rsplitter.n.info; | ||
2259 | rp = 0; | ||
2260 | |||
2261 | if (!m) | 2256 | if (!m) |
2262 | m = qrealloc(m, 256, &rsm->size); | 2257 | m = qrealloc(m, 256, &rsm->size); |
2258 | p = rsm->pos; | ||
2259 | rp = 0; | ||
2260 | pp = 0; | ||
2263 | 2261 | ||
2264 | do { | 2262 | do { |
2265 | b = m + a; | 2263 | b = m + rsm->adv; |
2266 | so = eo = p; | 2264 | so = eo = p; |
2267 | r = 1; | 2265 | retval = 1; |
2268 | if (p > 0) { | 2266 | if (p > 0) { |
2267 | char c = (char) rsplitter.n.info; | ||
2269 | if (rsplitter.n.info == TI_REGEXP) { | 2268 | if (rsplitter.n.info == TI_REGEXP) { |
2270 | if (regexec(icase ? rsplitter.n.r.ire : rsplitter.n.l.re, | 2269 | if (regexec(icase ? rsplitter.n.r.ire : rsplitter.n.l.re, |
2271 | b, 1, pmatch, 0) == 0) { | 2270 | b, 1, pmatch, 0) == 0 |
2271 | ) { | ||
2272 | so = pmatch[0].rm_so; | 2272 | so = pmatch[0].rm_so; |
2273 | eo = pmatch[0].rm_eo; | 2273 | eo = pmatch[0].rm_eo; |
2274 | if (b[eo] != '\0') | 2274 | if (b[eo] != '\0') |
@@ -2297,43 +2297,44 @@ static int awk_getline(rstream *rsm, var *v) | |||
2297 | } | 2297 | } |
2298 | } | 2298 | } |
2299 | 2299 | ||
2300 | if (a > 0) { | 2300 | if (rsm->adv > 0) { |
2301 | memmove(m, m+a, p+1); | 2301 | memmove(m, m+rsm->adv, p+1); |
2302 | b = m; | 2302 | b = m; |
2303 | a = 0; | 2303 | rsm->adv = 0; |
2304 | } | 2304 | } |
2305 | 2305 | ||
2306 | m = qrealloc(m, a+p+128, &rsm->size); | 2306 | b = m = qrealloc(m, p+128, &rsm->size); |
2307 | b = m + a; | ||
2308 | pp = p; | 2307 | pp = p; |
2309 | p += safe_read(fd, b+p, rsm->size - p - 1); | 2308 | p += safe_read(fd, b+p, rsm->size - p - 1); |
2310 | if (p < pp) { | 2309 | if (p < pp) { |
2311 | p = 0; | 2310 | p = 0; |
2312 | r = 0; | 2311 | retval = 0; |
2313 | setvar_ERRNO(); | 2312 | setvar_ERRNO(); |
2314 | } | 2313 | } |
2315 | b[p] = '\0'; | 2314 | b[p] = '\0'; |
2316 | } while (p > pp); | 2315 | } while (p > pp); |
2317 | 2316 | ||
2318 | if (p == 0) { | 2317 | if (p == 0) { |
2319 | r--; | 2318 | retval--; |
2320 | } else { | 2319 | } else { |
2321 | c = b[so]; b[so] = '\0'; | 2320 | char c = b[so]; |
2321 | b[so] = '\0'; | ||
2322 | setvar_s(v, b+rp); | 2322 | setvar_s(v, b+rp); |
2323 | v->type |= VF_USER; | 2323 | v->type |= VF_USER; |
2324 | b[so] = c; | 2324 | b[so] = c; |
2325 | c = b[eo]; b[eo] = '\0'; | 2325 | c = b[eo]; |
2326 | b[eo] = '\0'; | ||
2326 | setvar_s(intvar[RT], b+so); | 2327 | setvar_s(intvar[RT], b+so); |
2327 | b[eo] = c; | 2328 | b[eo] = c; |
2328 | } | 2329 | } |
2329 | 2330 | ||
2330 | rsm->buffer = m; | 2331 | rsm->buffer = m; |
2331 | rsm->adv = a + eo; | 2332 | rsm->adv += eo; |
2332 | rsm->pos = p - eo; | 2333 | rsm->pos = p - eo; |
2333 | 2334 | ||
2334 | debug_printf_eval("returning from %s(): %d\n", __func__, r); | 2335 | debug_printf_eval("returning from %s(): %d\n", __func__, retval); |
2335 | 2336 | ||
2336 | return r; | 2337 | return retval; |
2337 | } | 2338 | } |
2338 | 2339 | ||
2339 | /* formatted output into an allocated buffer, return ptr to buffer */ | 2340 | /* formatted output into an allocated buffer, return ptr to buffer */ |