diff options
Diffstat (limited to 'lib/libc')
-rw-r--r-- | lib/libc/gen/sysconf.3 | 13 | ||||
-rw-r--r-- | lib/libc/gen/sysconf.c | 15 |
2 files changed, 27 insertions, 1 deletions
diff --git a/lib/libc/gen/sysconf.3 b/lib/libc/gen/sysconf.3 index 847651a..85343c7 100644 --- a/lib/libc/gen/sysconf.3 +++ b/lib/libc/gen/sysconf.3 @@ -167,6 +167,19 @@ otherwise \-1. Return 1 if the system supports the User Portability Utilities Option, otherwise \-1. .El +.Pp +These values also exist, but may not be standard: +.Pp +.Bl -tag -width 6n +.Pp +.It Li _SC_PHYS_PAGES +The number of pages of physical memory. +Note that it is possible that the product of this value and the value of +.Li _SC_PAGESIZE +will overflow a +.Vt long +in some configurations on a 32bit machine. +.El .Sh RETURN VALUES If the call to .Fn sysconf diff --git a/lib/libc/gen/sysconf.c b/lib/libc/gen/sysconf.c index 27729a6..fc844cc 100644 --- a/lib/libc/gen/sysconf.c +++ b/lib/libc/gen/sysconf.c @@ -79,9 +79,11 @@ sysconf(name) int mib[2], sverrno, value; long defaultresult; const char *path; + const char *sname; len = sizeof(value); defaultresult = -1; + sname = NULL; switch (name) { case _SC_ARG_MAX: @@ -574,9 +576,20 @@ yesno: if (sysctl(mib, 2, &value, &len, NULL, 0) == -1) mib[1] = HW_NCPU; break; + case _SC_PHYS_PAGES: + sname = "hw.availpages"; + break; + default: errno = EINVAL; return (-1); } - return (sysctl(mib, 2, &value, &len, NULL, 0) == -1 ? -1 : value); + if (sname == NULL) { + if (sysctl(mib, 2, &value, &len, NULL, 0) == -1) + value = -1; + } else { + if (sysctlbyname(sname, &value, &len, NULL, 0) == -1) + value = -1; + } + return (value); } |