From c73d262642ee3a3d6585dc44acc62c432910f920 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 15 Jan 2019 21:27:06 +0200 Subject: Finish transition to using assoc_set. --- main.c | 64 +++++++++++++++++++++++++++++----------------------------------- 1 file changed, 29 insertions(+), 35 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 03a96f30..878e8086 100644 --- a/main.c +++ b/main.c @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 1986, 1988, 1989, 1991-2018 the Free Software Foundation, Inc. + * Copyright (C) 1986, 1988, 1989, 1991-2019 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. @@ -745,23 +745,19 @@ static void init_args(int argc0, int argc, const char *argv0, char **argv) { int i, j; - NODE **aptr; - NODE *tmp; + NODE *sub, *val; ARGV_node = install_symbol(estrdup("ARGV", 4), Node_var_array); - tmp = make_number(0.0); - aptr = assoc_lookup(ARGV_node, tmp); - unref(tmp); - unref(*aptr); - *aptr = make_string(argv0, strlen(argv0)); - (*aptr)->flags |= USER_INPUT; + sub = make_number(0.0); + val = make_string(argv0, strlen(argv0)); + val->flags |= USER_INPUT; + assoc_set(ARGV_node, sub, val); + for (i = argc0, j = 1; i < argc; i++, j++) { - tmp = make_number((AWKNUM) j); - aptr = assoc_lookup(ARGV_node, tmp); - unref(tmp); - unref(*aptr); - *aptr = make_string(argv[i], strlen(argv[i])); - (*aptr)->flags |= USER_INPUT; + sub = make_number((AWKNUM) j); + val = make_string(argv[i], strlen(argv[i])); + val->flags |= USER_INPUT; + assoc_set(ARGV_node, sub, val); } ARGC_node = install_symbol(estrdup("ARGC", 4), Node_var); @@ -890,9 +886,8 @@ load_environ() extern char **environ; #endif char *var, *val; - NODE **aptr; int i; - NODE *tmp; + NODE *sub, *newval; static bool been_here = false; if (been_here) @@ -910,12 +905,10 @@ load_environ() *val++ = '\0'; else val = nullstr; - tmp = make_string(var, strlen(var)); - aptr = assoc_lookup(ENVIRON_node, tmp); - unref(tmp); - unref(*aptr); - *aptr = make_string(val, strlen(val)); - (*aptr)->flags |= USER_INPUT; + sub = make_string(var, strlen(var)); + newval = make_string(val, strlen(val)); + newval->flags |= USER_INPUT; + assoc_set(ENVIRON_node, sub, newval); /* restore '=' so that system() gets a valid environment */ if (val != nullstr) @@ -939,31 +932,32 @@ load_environ() return ENVIRON_node; } +/* load_procinfo_argv --- populate PROCINFO["argv"] */ + static void load_procinfo_argv() { - NODE *tmp; - NODE **aptr; + NODE *sub; + NODE *val; NODE *argv_array; int i; - tmp = make_string("argv", 4); - aptr = assoc_lookup(PROCINFO_node, tmp); - unref(tmp); - unref(*aptr); + // build the sub-array first getnode(argv_array); memset(argv_array, '\0', sizeof(NODE)); /* valgrind wants this */ null_array(argv_array); - *aptr = argv_array; argv_array->parent_array = PROCINFO_node; argv_array->vname = estrdup("argv", 4); for (i = 0; d_argv[i] != NULL; i++) { - tmp = make_number(i); - aptr = assoc_lookup(argv_array, tmp); - unref(tmp); - unref(*aptr); - *aptr = make_string(d_argv[i], strlen(d_argv[i])); + sub = make_number(i); + val = make_string(d_argv[i], strlen(d_argv[i])); + assoc_set(argv_array, sub, val); } + + // hook it into PROCINFO + sub = make_string("argv", 4); + assoc_set(PROCINFO_node, sub, argv_array); + } /* load_procinfo --- populate the PROCINFO array */ -- cgit v1.2.3