Currently, the getconf build fails on platforms (e.g. Android) without
confstr(3)
From c1a616fd5ff18a202ad934bbb23ba4d444458685 Mon Sep 17 00:00:00 2001
From: Grisha Levit <grishale...@gmail.com>
Date: Thu, 13 Apr 2023 04:32:04 -0400
Subject: [PATCH] support getconf builtin build without confstr
---
 examples/loadables/getconf.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/examples/loadables/getconf.c b/examples/loadables/getconf.c
index 0dc213be..cd89b82f 100644
--- a/examples/loadables/getconf.c
+++ b/examples/loadables/getconf.c
@@ -47,7 +47,15 @@ struct conf
   {
     const char *name;
     const long call_name;	/* or value for CONSTANT */
-    const enum { SYSCONF, CONFSTR, PATHCONF, CONSTANT, UNDEFINED } call;
+    const enum {
+        SYSCONF,
+#if HAVE_CONFSTR
+        CONFSTR,
+#endif
+        PATHCONF,
+        CONSTANT,
+        UNDEFINED
+    } call;
   };
 
 static const struct conf vars[] =
@@ -489,8 +497,10 @@ static const struct conf vars[] =
     { "POSIX2_UPE", _SC_2_UPE, SYSCONF },
     { "POSIX2_VERSION", _SC_2_VERSION, SYSCONF },
 
+#ifdef _CS_PATH
     { "PATH", _CS_PATH, CONFSTR },
     { "CS_PATH", _CS_PATH, CONFSTR },
+#endif
 
     /* LFS */
 #ifdef _CS_LFS_CFLAGS
@@ -1072,6 +1082,7 @@ getconf_print (const struct conf *c, const char *vpath, int all)
 	printf ("%ld\n", value);
       return (EXECUTION_SUCCESS);
 
+#if HAVE_CONFSTR
     case CONFSTR:
       errno = 0;
       clen = confstr (cn, (char *) NULL, 0);
@@ -1092,6 +1103,7 @@ getconf_print (const struct conf *c, const char *vpath, int all)
 	printf ("%.*s\n", (int) clen, cvalue);
       free (cvalue);
       return (EXECUTION_SUCCESS);
+#endif
 
     case CONSTANT:
       return (getconf_internal (c, all));
-- 
2.40.0

Reply via email to