diff options
author | phk <phk@FreeBSD.org> | 1996-05-02 08:43:05 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 1996-05-02 08:43:05 +0000 |
commit | 37811d9fc0db7d38415e2e6a6e4edf1fc0cba972 (patch) | |
tree | f3e5cad6b9610b6b082996ce7e9732c47feed41e /lib/libc/gen/getpagesize.c | |
parent | 4622dbc30bb429e73df5bc451c81d74762753a53 (diff) | |
download | FreeBSD-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.c | 20 |
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); } |