The good news is that this more than covers everything used by AOSP.

The bad news is that it turns out that the relationship between the
actual constant names and the names understood by the GNU getconf (I
didn't test a BSD getconf) turn out to be pretty random, especially in
terms of whether or not they use a leading underscore.

(Though since I _don't_ want this generated by a script, that's good
news for me too.)
---
 toys/posix/getconf.c | 41 ++++++++++++++++++++++++++++-------------
 1 file changed, 28 insertions(+), 13 deletions(-)
From fae766d4a49e6c90730ce78e98c787a43f40605a Mon Sep 17 00:00:00 2001
From: Elliott Hughes <[email protected]>
Date: Fri, 5 Oct 2018 16:12:55 -0700
Subject: [PATCH] getconf: add missing names used by AOSP.

The good news is that this more than covers everything used by AOSP.

The bad news is that it turns out that the relationship between the
actual constant names and the names understood by the GNU getconf (I
didn't test a BSD getconf) turn out to be pretty random, especially in
terms of whether or not they use a leading underscore.

(Though since I _don't_ want this generated by a script, that's good
news for me too.)
---
 toys/posix/getconf.c | 41 ++++++++++++++++++++++++++++-------------
 1 file changed, 28 insertions(+), 13 deletions(-)

diff --git a/toys/posix/getconf.c b/toys/posix/getconf.c
index 38c74d5..4faf58f 100644
--- a/toys/posix/getconf.c
+++ b/toys/posix/getconf.c
@@ -32,7 +32,7 @@ config GETCONF
 
 struct config {
   char *name;
-  int value;
+  long long int value;
 };
 
 // Lists of symbols getconf can query, broken down by whether we call sysconf(),
@@ -63,7 +63,7 @@ struct config sysconfs[] = {
 
   /* POSIX.2 */
 #undef CONF
-#define CONF(n) {"_POSIX2_" #n,_SC_2_ ## n}
+#define CONF(n) {"POSIX2_" #n,_SC_2_ ## n}
   CONF(C_BIND), CONF(C_DEV), CONF(CHAR_TERM), CONF(FORT_DEV), CONF(FORT_RUN),
   CONF(LOCALEDEF), CONF(PBS), CONF(PBS_ACCOUNTING), CONF(PBS_CHECKPOINT),
   CONF(PBS_LOCATE), CONF(PBS_MESSAGE), CONF(PBS_TRACK), CONF(SW_DEV),
@@ -80,7 +80,7 @@ struct config sysconfs[] = {
 #define CONF(n) {#n,_SC_ ## n}
   CONF(AIO_LISTIO_MAX), CONF(AIO_MAX), CONF(AIO_PRIO_DELTA_MAX), CONF(ARG_MAX),
   CONF(ATEXIT_MAX), CONF(BC_BASE_MAX), CONF(BC_DIM_MAX), CONF(BC_SCALE_MAX),
-  CONF(BC_STRING_MAX), CONF(CHILD_MAX), CONF(COLL_WEIGHTS_MAX),
+  CONF(BC_STRING_MAX), CONF(CHILD_MAX), CONF(CLK_TCK), CONF(COLL_WEIGHTS_MAX),
   CONF(DELAYTIMER_MAX), CONF(EXPR_NEST_MAX), CONF(HOST_NAME_MAX),
   CONF(IOV_MAX), CONF(LINE_MAX), CONF(LOGIN_NAME_MAX), CONF(NGROUPS_MAX),
   CONF(MQ_OPEN_MAX), CONF(MQ_PRIO_MAX), CONF(OPEN_MAX), CONF(PAGE_SIZE),
@@ -90,10 +90,12 @@ struct config sysconfs[] = {
   {"PTHREAD_KEYS_MAX", _SC_THREAD_KEYS_MAX},
   {"PTHREAD_STACK_MIN", _SC_THREAD_STACK_MIN},
   {"PTHREAD_THREADS_MAX", _SC_THREAD_THREADS_MAX},
-  CONF(RE_DUP_MAX), CONF(RTSIG_MAX), CONF(SEM_NSEMS_MAX), CONF(SEM_VALUE_MAX),
-  CONF(SIGQUEUE_MAX), CONF(STREAM_MAX), CONF(SYMLOOP_MAX), CONF(TIMER_MAX),
-  CONF(TTY_NAME_MAX), CONF(TZNAME_MAX), CONF(NPROCESSORS_CONF),
-  CONF(NPROCESSORS_ONLN)
+  CONF(RAW_SOCKETS), CONF(RE_DUP_MAX), CONF(RTSIG_MAX), CONF(SEM_NSEMS_MAX),
+  CONF(SEM_VALUE_MAX), CONF(SIGQUEUE_MAX), CONF(STREAM_MAX), CONF(SYMLOOP_MAX),
+  CONF(TIMER_MAX), CONF(TTY_NAME_MAX), CONF(TZNAME_MAX),
+  {"_AVPHYS_PAGES", _SC_AVPHYS_PAGES}, {"_PHYS_PAGES", _SC_PHYS_PAGES},
+  {"_NPROCESSORS_CONF", _SC_NPROCESSORS_CONF},
+  {"_NPROCESSORS_ONLN", _SC_NPROCESSORS_ONLN},
 };
 
 // Probe the live system with a path
@@ -103,7 +105,8 @@ struct config pathconfs[] = {
   CONF(ASYNC_IO), CONF(CHOWN_RESTRICTED), CONF(FILESIZEBITS), CONF(LINK_MAX),
   CONF(MAX_CANON), CONF(MAX_INPUT), CONF(NAME_MAX), CONF(NO_TRUNC),
   CONF(PATH_MAX), CONF(PIPE_BUF), CONF(PRIO_IO), CONF(SYMLINK_MAX),
-  CONF(SYNC_IO), CONF(VDISABLE),
+  CONF(SYNC_IO),
+  {"_POSIX_VDISABLE", _PC_VDISABLE},
 };
 
 // Strings out of a header
@@ -129,10 +132,22 @@ struct config limits[] = {
   CONF(_POSIX_THREAD_DESTRUCTOR_ITERATIONS), CONF(_POSIX_THREAD_KEYS_MAX),
   CONF(_POSIX_THREAD_THREADS_MAX), CONF(_POSIX_TIMER_MAX),
   CONF(_POSIX_TTY_NAME_MAX), CONF(_POSIX_TZNAME_MAX),
-  CONF(_POSIX2_BC_BASE_MAX), CONF(_POSIX2_BC_DIM_MAX),
-  CONF(_POSIX2_BC_SCALE_MAX), CONF(_POSIX2_BC_STRING_MAX),
-  CONF(_POSIX2_CHARCLASS_NAME_MAX), CONF(_POSIX2_COLL_WEIGHTS_MAX),
-  CONF(_POSIX2_EXPR_NEST_MAX), CONF(_POSIX2_LINE_MAX), CONF(_POSIX2_RE_DUP_MAX)
+#undef CONF
+#define CONF(n) {#n,_ ## n}
+  CONF(POSIX2_BC_BASE_MAX), CONF(POSIX2_BC_DIM_MAX),
+  CONF(POSIX2_BC_SCALE_MAX), CONF(POSIX2_BC_STRING_MAX),
+  CONF(POSIX2_CHARCLASS_NAME_MAX), CONF(POSIX2_COLL_WEIGHTS_MAX),
+  CONF(POSIX2_EXPR_NEST_MAX), CONF(POSIX2_LINE_MAX), CONF(POSIX2_RE_DUP_MAX),
+#undef CONF
+#define CONF(n) {#n,n}
+  CONF(CHAR_BIT),
+  /* Not available in glibc without _GNU_SOURCE. */
+  {"LONG_BIT", 8*sizeof(long)},
+  {"WORD_BIT", 8*sizeof(int)},
+  CONF(CHAR_MAX), CONF(CHAR_MIN), CONF(INT_MAX), CONF(INT_MIN), CONF(SCHAR_MAX),
+  CONF(SCHAR_MIN), CONF(SHRT_MAX), CONF(SHRT_MIN), CONF(SSIZE_MAX),
+  CONF(UCHAR_MAX), CONF(UINT_MAX), CONF(ULONG_MAX), CONF(USHRT_MAX),
+  CONF(UIO_MAXIOV),
 };
 
 // Names that default to blank
@@ -189,7 +204,7 @@ void getconf_main(void)
   else if (i==2) {
     confstr(c->value, toybuf, sizeof(toybuf));
     puts(toybuf);
-  } else if (i==3) printf("%d\n", c->value);
+  } else if (i==3) printf("%lld\n", c->value);
   // For legacy kernel build
   else if (sizeof(long)==4 && !j) {
     puts("-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64");
-- 
2.19.0.605.g01d371f741-goog

_______________________________________________
Toybox mailing list
[email protected]
http://lists.landley.net/listinfo.cgi/toybox-landley.net

Reply via email to