aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2023-05-28 17:51:59 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2023-05-28 17:51:59 +0200
commit05e60007d42b8e4005085a22e122ef70bf888fa5 (patch)
tree30a8e6271212a15bef4493cb1b9ee770cc5f38e9
parentb76b420b5da1aadad823faf12327b610614f5951 (diff)
downloadbusybox-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.c47
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 */