From patchwork Fri Sep 19 08:33:40 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Siddhesh Poyarekar X-Patchwork-Id: 2917 Received: (qmail 14619 invoked by alias); 19 Sep 2014 08:33:56 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 14515 invoked by uid 89); 19 Sep 2014 08:33:53 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL, BAYES_50, RP_MATCHES_RCVD, SPF_HELO_PASS autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com From: Siddhesh Poyarekar To: libc-alpha@sourceware.org Cc: roland@hack.frob.com Subject: [PATCH 4/4] Use conf.list to generate spec array Date: Fri, 19 Sep 2014 14:03:40 +0530 Message-Id: <1411115620-17770-4-git-send-email-siddhesh@redhat.com> In-Reply-To: <1411115620-17770-2-git-send-email-siddhesh@redhat.com> References: <1411115620-17770-2-git-send-email-siddhesh@redhat.com> --- posix/conf.list | 2 +- posix/confstr.c | 4 +++- posix/getconf.c | 20 +++----------------- posix/posix-envs.def | 3 ++- scripts/gen-conf.awk | 26 ++++++++++++++++++++++++++ sysdeps/posix/sysconf.c | 1 + 6 files changed, 36 insertions(+), 20 deletions(-) diff --git a/posix/conf.list b/posix/conf.list index 07607b7..0a17666 100644 --- a/posix/conf.list +++ b/posix/conf.list @@ -104,7 +104,7 @@ SYSCONF:POSIX { RAW_SOCKETS } -SPEC:XBS5 { +SPEC:XBS5:_SC_XBS5 { ILP32_OFF32 ILP32_OFFBIG LP64_OFF64 diff --git a/posix/confstr.c b/posix/confstr.c index 1accfee..0400d7f 100644 --- a/posix/confstr.c +++ b/posix/confstr.c @@ -21,7 +21,9 @@ #include #include #include "../version.h" -#include "confdefs.h" + +#define NEED_SPEC_ARRAY 0 +#include /* If BUF is not NULL and LEN > 0, fill in at most LEN - 1 bytes of BUF with the value corresponding to NAME and zero-terminate BUF. diff --git a/posix/getconf.c b/posix/getconf.c index 14d51d8..3c08688 100644 --- a/posix/getconf.c +++ b/posix/getconf.c @@ -26,6 +26,9 @@ #include "../version.h" #define PACKAGE _libc_intl_domainname +#define NEED_SPEC_ARRAY 1 +#include + struct conf { const char *name; @@ -387,23 +390,6 @@ static const struct conf vars[] = }; -static const struct { const char *name; int num; } specs[] = - { - { "XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32 }, - { "XBS5_ILP32_OFFBIG", _SC_XBS5_ILP32_OFFBIG }, - { "XBS5_LP64_OFF64", _SC_XBS5_LP64_OFF64 }, - { "XBS5_LPBIG_OFFBIG", _SC_XBS5_LPBIG_OFFBIG }, - { "POSIX_V6_ILP32_OFF32", _SC_V6_ILP32_OFF32 }, - { "POSIX_V6_ILP32_OFFBIG", _SC_V6_ILP32_OFFBIG }, - { "POSIX_V6_LP64_OFF64", _SC_V6_LP64_OFF64 }, - { "POSIX_V6_LPBIG_OFFBIG", _SC_V6_LPBIG_OFFBIG }, - { "POSIX_V7_ILP32_OFF32", _SC_V7_ILP32_OFF32 }, - { "POSIX_V7_ILP32_OFFBIG", _SC_V7_ILP32_OFFBIG }, - { "POSIX_V7_LP64_OFF64", _SC_V7_LP64_OFF64 }, - { "POSIX_V7_LPBIG_OFFBIG", _SC_V7_LPBIG_OFFBIG }, - }; -static const int nspecs = sizeof (specs) / sizeof (specs[0]); - extern const char *__progname; diff --git a/posix/posix-envs.def b/posix/posix-envs.def index 9047d0c..0b33e02 100644 --- a/posix/posix-envs.def +++ b/posix/posix-envs.def @@ -42,7 +42,8 @@ defined. These are called with arguments V5, V6, V7 before and after the relevant groups of environments. */ -#include "confdefs.h" +#define NEED_SPEC_ARRAY 0 +#include START_ENV_GROUP (V7) diff --git a/scripts/gen-conf.awk b/scripts/gen-conf.awk index 45a4d44..1370646 100644 --- a/scripts/gen-conf.awk +++ b/scripts/gen-conf.awk @@ -17,12 +17,17 @@ $2 == "{" { split ($1, arr, ":") type = arr[1] prefix = arr[2] + if (arr[3] != "") + sc_prefix = arr[3] + else + sc_prefix = "_SC" next } $1 == "}" { prefix = "" type = "" + sc_prefix = "" next } @@ -37,6 +42,7 @@ $1 == "}" { # CONFSTR: A configuration string # SYSCONF: A numeric value # SPEC: A specification + sc_prefixes[prefix][$1] = sc_prefix conf[prefix][$1] = type } @@ -58,6 +64,26 @@ ENDFILE { 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 + } } } + + # Print the specification array. Define the macro NEED_SPEC_ARRAY before + # including confdefs.h to make it available in the compilation unit. + print "#if NEED_SPEC_ARRAY" + print "static const struct { const char *name; int num; } specs[] =" + print " {" + for (s in spec) { + printf " { \"%s\", %s },\n", s, spec[s] + } + print " };" + print "static const int nspecs = sizeof (specs) / sizeof (specs[0]);" + print "#endif" } diff --git a/sysdeps/posix/sysconf.c b/sysdeps/posix/sysconf.c index c7b748b..bff59f4 100644 --- a/sysdeps/posix/sysconf.c +++ b/sysdeps/posix/sysconf.c @@ -31,6 +31,7 @@ #include #include +#define NEED_SPEC_ARRAY 0 #include