summaryrefslogtreecommitdiff
path: root/getconf/getconf.c
diff options
context:
space:
mode:
authorA. Wilcox <AWilcox@Wilcox-Tech.com>2018-08-21 05:46:07 -0500
committerA. Wilcox <AWilcox@Wilcox-Tech.com>2018-08-21 05:46:07 -0500
commite6d152980fb19a38525ed107a31d0b8997ab549e (patch)
tree4a65a0ce3d709bb713bf7786f53210ae4a0e6cca /getconf/getconf.c
parentdf2737fd0a3d597b91934794a5ae61f81eba6df8 (diff)
downloadshimmy-e6d152980fb19a38525ed107a31d0b8997ab549e.tar.gz
shimmy-e6d152980fb19a38525ed107a31d0b8997ab549e.tar.bz2
shimmy-e6d152980fb19a38525ed107a31d0b8997ab549e.tar.xz
shimmy-e6d152980fb19a38525ed107a31d0b8997ab549e.zip
getconf: Support path variables
Diffstat (limited to 'getconf/getconf.c')
-rw-r--r--getconf/getconf.c57
1 files changed, 56 insertions, 1 deletions
diff --git a/getconf/getconf.c b/getconf/getconf.c
index 8ede268..01265f1 100644
--- a/getconf/getconf.c
+++ b/getconf/getconf.c
@@ -393,6 +393,27 @@ const var_map_t limit_vars[] = {
const int limit_count = sizeof(limit_vars) / sizeof(limit_vars[0]);
+const var_map_t path_vars[] = {
+ { "FILESIZEBITS", _PC_FILESIZEBITS },
+ { "LINK_MAX", _PC_LINK_MAX },
+ { "MAX_CANON", _PC_MAX_CANON },
+ { "MAX_INPUT", _PC_MAX_INPUT },
+ { "NAME_MAX", _PC_NAME_MAX },
+ { "PATH_MAX", _PC_PATH_MAX },
+ { "PIPE_BUF", _PC_PIPE_BUF },
+ { "POSIX2_SYMLINKS", _PC_2_SYMLINKS },
+ { "POSIX_ALLOC_SIZE_MIN", _PC_ALLOC_SIZE_MIN },
+ { "POSIX_REC_INCR_XFER_SIZE", _PC_REC_INCR_XFER_SIZE },
+ { "POSIX_REC_MAX_XFER_SIZE", _PC_REC_MAX_XFER_SIZE },
+ { "POSIX_REC_MIN_XFER_SIZE", _PC_REC_MIN_XFER_SIZE },
+ { "POSIX_REC_XFER_ALIGN", _PC_REC_XFER_ALIGN },
+ { "SYMLINK_MAX", _PC_SYMLINK_MAX }
+};
+
+
+const int path_count = sizeof(path_vars) / sizeof (path_vars[0]);
+
+
int do_system_var(char *environment, char *system_var)
{
int var;
@@ -499,7 +520,41 @@ int do_system_var(char *environment, char *system_var)
int do_path_var(char *environment, char *path_var, char *pathname)
{
- return -1;
+ int var;
+
+ for(var = 0; var < path_count; var++)
+ {
+ long int result;
+
+ if(strcasecmp(path_vars[var].variable, path_var) != 0)
+ {
+ continue;
+ }
+
+ if(path_vars[var].value == _UNDEFINED_VARIABLE_)
+ {
+ printf("undefined\n");
+ return 0;
+ }
+
+ errno = 0;
+
+ result = pathconf(pathname, path_vars[var].value);
+ if(errno != 0)
+ {
+ /* We know that this is a valid symbol, so don't break
+ * expectations.
+ */
+ printf("undefined\n");
+ return 0;
+ }
+
+ printf("%ld\n", result);
+ return 0;
+ }
+
+ fprintf(stderr, "%s: not a recognised system variable\n", path_var);
+ return EINVAL;
}