summaryrefslogtreecommitdiffstats
path: root/lib/libc/gen/getpagesize.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1996-05-02 08:43:05 +0000
committerphk <phk@FreeBSD.org>1996-05-02 08:43:05 +0000
commit37811d9fc0db7d38415e2e6a6e4edf1fc0cba972 (patch)
treef3e5cad6b9610b6b082996ce7e9732c47feed41e /lib/libc/gen/getpagesize.c
parent4622dbc30bb429e73df5bc451c81d74762753a53 (diff)
downloadFreeBSD-src-37811d9fc0db7d38415e2e6a6e4edf1fc0cba972.zip
FreeBSD-src-37811d9fc0db7d38415e2e6a6e4edf1fc0cba972.tar.gz
Cache the result of getpagesize() so we only make one syscall.
Use getpagesize instead of CLBYTES.
Diffstat (limited to 'lib/libc/gen/getpagesize.c')
-rw-r--r--lib/libc/gen/getpagesize.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/lib/libc/gen/getpagesize.c b/lib/libc/gen/getpagesize.c
index d586cf6..556ff9e 100644
--- a/lib/libc/gen/getpagesize.c
+++ b/lib/libc/gen/getpagesize.c
@@ -38,16 +38,24 @@ static char sccsid[] = "@(#)getpagesize.c 8.1 (Berkeley) 6/4/93";
#include <sys/param.h>
#include <sys/sysctl.h>
+/*
+ * This is unlikely to change over the running time of any
+ * program, so we cache the result to save some syscalls.
+ */
+
int
getpagesize()
{
- int mib[2], value;
+ int mib[2];
+ static int value;
size_t size;
- mib[0] = CTL_HW;
- mib[1] = HW_PAGESIZE;
- size = sizeof value;
- if (sysctl(mib, 2, &value, &size, NULL, 0) == -1)
- return (-1);
+ if (!value) {
+ mib[0] = CTL_HW;
+ mib[1] = HW_PAGESIZE;
+ size = sizeof value;
+ if (sysctl(mib, 2, &value, &size, NULL, 0) == -1)
+ return (-1);
+ }
return (value);
}
OpenPOWER on IntegriCloud