1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3  * License, v. 2.0. If a copy of the MPL was not distributed with this
4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 
6 #include "prbit.h"
7 #include "prsystem.h"
8 
9 #ifdef XP_UNIX
10 #include <unistd.h>
11 #endif
12 #ifdef _WIN32
13 #include <windows.h>
14 #endif
15 
16 PRInt32 _pr_pageShift;
17 PRInt32 _pr_pageSize;
18 
19 /*
20 ** Get system page size
21 */
GetPageSize(void)22 static void GetPageSize(void)
23 {
24     PRInt32 pageSize;
25 
26     /* Get page size */
27 #ifdef XP_UNIX
28 #if defined BSDI || defined AIX \
29         || defined LINUX || defined __GNU__ || defined __GLIBC__ \
30         || defined FREEBSD || defined NETBSD || defined OPENBSD \
31         || defined DARWIN
32     _pr_pageSize = getpagesize();
33 #elif defined(HPUX)
34     /* I have no idea. Don't get me started. --Rob */
35     _pr_pageSize = sysconf(_SC_PAGE_SIZE);
36 #else
37     _pr_pageSize = sysconf(_SC_PAGESIZE);
38 #endif
39 #endif /* XP_UNIX */
40 
41 #ifdef XP_PC
42 #ifdef _WIN32
43     SYSTEM_INFO info;
44     GetSystemInfo(&info);
45     _pr_pageSize = info.dwPageSize;
46 #else
47     _pr_pageSize = 4096;
48 #endif
49 #endif /* XP_PC */
50 
51     pageSize = _pr_pageSize;
52     PR_CEILING_LOG2(_pr_pageShift, pageSize);
53 }
54 
PR_GetPageShift(void)55 PR_IMPLEMENT(PRInt32) PR_GetPageShift(void)
56 {
57     if (!_pr_pageSize) {
58         GetPageSize();
59     }
60     return _pr_pageShift;
61 }
62 
PR_GetPageSize(void)63 PR_IMPLEMENT(PRInt32) PR_GetPageSize(void)
64 {
65     if (!_pr_pageSize) {
66         GetPageSize();
67     }
68     return _pr_pageSize;
69 }
70