Use one-dimension arrays in gen-posix-conf-vars.awk

Message ID 20141230095050.GA22064@Devel.siddhesh.in
State Committed
Headers

Commit Message

Siddhesh Poyarekar Dec. 30, 2014, 9:50 a.m. UTC
  True multi-dimensional arrays were introduced in awk 4.0 and we
support awk versions as early as 3.12.  Use a single subscript of the
form prefix_conf instead of two dimensions to work around this
limitation.  We also need one additional array of just the conf names
subscripted by the prefix_conf to print the names for the
specifications.

Siddhesh

	* scripts/gen-posix-conf-vars.awk: Don't use multi-dimensional
	arrays.
---
 scripts/gen-posix-conf-vars.awk | 46 ++++++++++++++++++++---------------------
 1 file changed, 23 insertions(+), 23 deletions(-)
  

Comments

Andreas Schwab Dec. 30, 2014, 6:29 p.m. UTC | #1
Siddhesh Poyarekar <siddhesh@redhat.com> writes:

> diff --git a/scripts/gen-posix-conf-vars.awk b/scripts/gen-posix-conf-vars.awk
> index 007cd74..9630b56 100644
> --- a/scripts/gen-posix-conf-vars.awk
> +++ b/scripts/gen-posix-conf-vars.awk
> @@ -42,36 +42,36 @@ $1 == "}" {
>    # CONFSTR: A configuration string
>    # SYSCONF: A numeric value
>    # SPEC: A specification
> -  sc_prefixes[prefix][$1] = sc_prefix
> -  conf[prefix][$1] = type
> +  c = sprintf("%s_%s", prefix, $1)
     c = prefix "_" $1

Andreas.
  
siddhesh Dec. 31, 2014, 7:53 a.m. UTC | #2
On Tue, Dec 30, 2014 at 07:29:53PM +0100, Andreas Schwab wrote:
>      c = prefix "_" $1

Thanks, pushed with that change.

Siddhesh
  
Andreas Schwab Dec. 31, 2014, 2:04 p.m. UTC | #3
Siddhesh Poyarekar <me@siddhesh.in> writes:

> On Tue, Dec 30, 2014 at 07:29:53PM +0100, Andreas Schwab wrote:
>>      c = prefix "_" $1
>
> Thanks, pushed with that change.

There are more occurences of the idiom.

Andreas.
  

Patch

diff --git a/scripts/gen-posix-conf-vars.awk b/scripts/gen-posix-conf-vars.awk
index 007cd74..9630b56 100644
--- a/scripts/gen-posix-conf-vars.awk
+++ b/scripts/gen-posix-conf-vars.awk
@@ -42,36 +42,36 @@  $1 == "}" {
   # CONFSTR: A configuration string
   # SYSCONF: A numeric value
   # SPEC: A specification
-  sc_prefixes[prefix][$1] = sc_prefix
-  conf[prefix][$1] = type
+  c = sprintf("%s_%s", prefix, $1)
+  sc_prefixes[c] = sc_prefix
+  prefix_conf[c] = type
+  conf[c] = $1
 }
 
 END {
   print "/* AUTOGENERATED by gen-posix-conf-vars.awk.  DO NOT EDIT.  */\n"
 
   # Generate macros that specify if a sysconf macro is defined and/or set.
-  for (p in conf) {
-    for (c in conf[p]) {
-      printf "#ifndef _%s_%s\n", p, c
-      printf "# define CONF_DEF_%s_%s CONF_DEF_UNDEFINED\n", p, c
-      # CONFSTR have string values and they are not set or unset.
-      if (conf[p][c] != "CONFSTR") {
-	printf "#else\n"
-	printf "# if _%s_%s > 0\n", p, c
-	printf "#  define CONF_DEF_%s_%s CONF_DEF_DEFINED_SET\n", p, c
-	printf "# else\n"
-	printf "#  define CONF_DEF_%s_%s CONF_DEF_DEFINED_UNSET\n", p, c
-	printf "# endif\n"
-      }
-      printf "#endif\n\n"
+  for (c in prefix_conf) {
+    printf "#ifndef _%s\n", c
+    printf "# define CONF_DEF_%s CONF_DEF_UNDEFINED\n", c
+    # CONFSTR have string values and they are not set or unset.
+    if (prefix_conf[c] != "CONFSTR") {
+      printf "#else\n"
+      printf "# if _%s > 0\n", c
+      printf "#  define CONF_DEF_%s CONF_DEF_DEFINED_SET\n", c
+      printf "# else\n"
+      printf "#  define CONF_DEF_%s CONF_DEF_DEFINED_UNSET\n", c
+      printf "# endif\n"
+    }
+    printf "#endif\n\n"
 
-      # Build a name -> sysconf number associative array to print a C array at
-      # the end.
-      if (conf[p][c] == "SPEC") {
-	name = sprintf ("%s_%s", p, c)
-	num = sprintf ("%s_%s", sc_prefixes[p][c], c)
-	spec[name] = num
-      }
+    # Build a name -> sysconf number associative array to print a C array at
+    # the end.
+    if (prefix_conf[c] == "SPEC") {
+      name = sprintf ("%s", c)
+      num = sprintf ("%s_%s", sc_prefixes[c], conf[c])
+      spec[name] = num
     }
   }