aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2021-06-25 19:41:05 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2021-06-25 19:41:05 +0200
commit78645d8371e69ce82841b66aa5ef69c02055f5bc (patch)
tree1c8af3c0793d512bc7f930097f07c3346bfc5e9c
parent8c5da0323bf2da02c40c587c5694b22e3ec623fb (diff)
downloadbusybox-w32-78645d8371e69ce82841b66aa5ef69c02055f5bc.tar.gz
busybox-w32-78645d8371e69ce82841b66aa5ef69c02055f5bc.tar.bz2
busybox-w32-78645d8371e69ce82841b66aa5ef69c02055f5bc.zip
awk: move locals deeper into scopes where they are used, no logic changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--editors/awk.c62
1 files changed, 32 insertions, 30 deletions
diff --git a/editors/awk.c b/editors/awk.c
index 1b23c17d2..86076d7b6 100644
--- a/editors/awk.c
+++ b/editors/awk.c
@@ -3254,20 +3254,19 @@ static var *evaluate(node *op, var *res)
3254 3254
3255static int awk_exit(int r) 3255static int awk_exit(int r)
3256{ 3256{
3257 var tv;
3258 unsigned i; 3257 unsigned i;
3259 hash_item *hi;
3260
3261 zero_out_var(&tv);
3262 3258
3263 if (!exiting) { 3259 if (!exiting) {
3260 var tv;
3264 exiting = TRUE; 3261 exiting = TRUE;
3265 nextrec = FALSE; 3262 nextrec = FALSE;
3263 zero_out_var(&tv);
3266 evaluate(endseq.first, &tv); 3264 evaluate(endseq.first, &tv);
3267 } 3265 }
3268 3266
3269 /* waiting for children */ 3267 /* waiting for children */
3270 for (i = 0; i < fdhash->csize; i++) { 3268 for (i = 0; i < fdhash->csize; i++) {
3269 hash_item *hi;
3271 hi = fdhash->items[i]; 3270 hi = fdhash->items[i];
3272 while (hi) { 3271 while (hi) {
3273 if (hi->data.rs.F && hi->data.rs.is_pipe) 3272 if (hi->data.rs.F && hi->data.rs.is_pipe)
@@ -3348,11 +3347,7 @@ int awk_main(int argc UNUSED_PARAM, char **argv)
3348 llist_t *list_e = NULL; 3347 llist_t *list_e = NULL;
3349#endif 3348#endif
3350 int i; 3349 int i;
3351 var *v;
3352 var tv; 3350 var tv;
3353 char **envp;
3354 char *vnames = (char *)vNames; /* cheat */
3355 char *vvalues = (char *)vValues;
3356 3351
3357 INIT_G(); 3352 INIT_G();
3358 3353
@@ -3361,8 +3356,6 @@ int awk_main(int argc UNUSED_PARAM, char **argv)
3361 if (ENABLE_LOCALE_SUPPORT) 3356 if (ENABLE_LOCALE_SUPPORT)
3362 setlocale(LC_NUMERIC, "C"); 3357 setlocale(LC_NUMERIC, "C");
3363 3358
3364 zero_out_var(&tv);
3365
3366 /* allocate global buffer */ 3359 /* allocate global buffer */
3367 g_buf = xmalloc(MAXVARFMT + 1); 3360 g_buf = xmalloc(MAXVARFMT + 1);
3368 3361
@@ -3372,16 +3365,21 @@ int awk_main(int argc UNUSED_PARAM, char **argv)
3372 fnhash = hash_init(); 3365 fnhash = hash_init();
3373 3366
3374 /* initialize variables */ 3367 /* initialize variables */
3375 for (i = 0; *vnames; i++) { 3368 {
3376 intvar[i] = v = newvar(nextword(&vnames)); 3369 char *vnames = (char *)vNames; /* cheat */
3377 if (*vvalues != '\377') 3370 char *vvalues = (char *)vValues;
3378 setvar_s(v, nextword(&vvalues)); 3371 for (i = 0; *vnames; i++) {
3379 else 3372 var *v;
3380 setvar_i(v, 0); 3373 intvar[i] = v = newvar(nextword(&vnames));
3381 3374 if (*vvalues != '\377')
3382 if (*vnames == '*') { 3375 setvar_s(v, nextword(&vvalues));
3383 v->type |= VF_SPECIAL; 3376 else
3384 vnames++; 3377 setvar_i(v, 0);
3378
3379 if (*vnames == '*') {
3380 v->type |= VF_SPECIAL;
3381 vnames++;
3382 }
3385 } 3383 }
3386 } 3384 }
3387 3385
@@ -3393,16 +3391,19 @@ int awk_main(int argc UNUSED_PARAM, char **argv)
3393 newfile("/dev/stderr")->F = stderr; 3391 newfile("/dev/stderr")->F = stderr;
3394 3392
3395 /* Huh, people report that sometimes environ is NULL. Oh well. */ 3393 /* Huh, people report that sometimes environ is NULL. Oh well. */
3396 if (environ) for (envp = environ; *envp; envp++) { 3394 if (environ) {
3397 /* environ is writable, thus we don't strdup it needlessly */ 3395 char **envp;
3398 char *s = *envp; 3396 for (envp = environ; *envp; envp++) {
3399 char *s1 = strchr(s, '='); 3397 /* environ is writable, thus we don't strdup it needlessly */
3400 if (s1) { 3398 char *s = *envp;
3401 *s1 = '\0'; 3399 char *s1 = strchr(s, '=');
3402 /* Both findvar and setvar_u take const char* 3400 if (s1) {
3403 * as 2nd arg -> environment is not trashed */ 3401 *s1 = '\0';
3404 setvar_u(findvar(iamarray(intvar[ENVIRON]), s), s1 + 1); 3402 /* Both findvar and setvar_u take const char*
3405 *s1 = '='; 3403 * as 2nd arg -> environment is not trashed */
3404 setvar_u(findvar(iamarray(intvar[ENVIRON]), s), s1 + 1);
3405 *s1 = '=';
3406 }
3406 } 3407 }
3407 } 3408 }
3408 opt = getopt32(argv, OPTSTR_AWK, &opt_F, &list_v, &list_f, IF_FEATURE_AWK_GNU_EXTENSIONS(&list_e,) NULL); 3409 opt = getopt32(argv, OPTSTR_AWK, &opt_F, &list_v, &list_f, IF_FEATURE_AWK_GNU_EXTENSIONS(&list_e,) NULL);
@@ -3466,6 +3467,7 @@ int awk_main(int argc UNUSED_PARAM, char **argv)
3466 setari_u(intvar[ARGV], ++i, *argv++); 3467 setari_u(intvar[ARGV], ++i, *argv++);
3467 setvar_i(intvar[ARGC], i + 1); 3468 setvar_i(intvar[ARGC], i + 1);
3468 3469
3470 zero_out_var(&tv);
3469 evaluate(beginseq.first, &tv); 3471 evaluate(beginseq.first, &tv);
3470 if (!mainseq.first && !endseq.first) 3472 if (!mainseq.first && !endseq.first)
3471 awk_exit(EXIT_SUCCESS); 3473 awk_exit(EXIT_SUCCESS);