Add support for _SC_PHYS_PAGES, which is not standard, but can be found in

Solaris and Linux.
This commit is contained in:
pjd 2006-12-14 14:32:59 +00:00
parent 1080ddcf3f
commit fbddb38d93
2 changed files with 27 additions and 1 deletions

View File

@ -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

View File

@ -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);
}