Skip to content

Commit

Permalink
Use one-dimension arrays in gen-posix-conf-vars.awk
Browse files Browse the repository at this point in the history
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.

	* scripts/gen-posix-conf-vars.awk: Don't use multi-dimensional
	arrays.
  • Loading branch information
Siddhesh Poyarekar committed Dec 31, 2014
1 parent 7062bd4 commit 195f3af
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 23 deletions.
5 changes: 5 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
2014-12-31 Siddhesh Poyarekar <siddhesh@redhat.com>

* scripts/gen-posix-conf-vars.awk: Don't use multi-dimensional
arrays.

2014-12-30 H.J. Lu <hongjiu.lu@intel.com>

[BZ #17775]
Expand Down
46 changes: 23 additions & 23 deletions scripts/gen-posix-conf-vars.awk
Original file line number Diff line number Diff line change
Expand Up @@ -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 = 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
}
}

Expand Down

0 comments on commit 195f3af

Please sign in to comment.