summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2006-12-14 14:32:59 +0000
committerpjd <pjd@FreeBSD.org>2006-12-14 14:32:59 +0000
commitfbddb38d93f7f55ac59ae27f0c7235ad0b91230b (patch)
tree7dd5bd6d8ca8b631897e42ed10264ce3f7b2f2ce
parent1080ddcf3fee611977f5beb4fc1be5240e1c234b (diff)
downloadFreeBSD-src-fbddb38d93f7f55ac59ae27f0c7235ad0b91230b.zip
FreeBSD-src-fbddb38d93f7f55ac59ae27f0c7235ad0b91230b.tar.gz
Add support for _SC_PHYS_PAGES, which is not standard, but can be found in
Solaris and Linux.
-rw-r--r--lib/libc/gen/sysconf.313
-rw-r--r--lib/libc/gen/sysconf.c15
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);
}
OpenPOWER on IntegriCloud