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)22static 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)55PR_IMPLEMENT(PRInt32) PR_GetPageShift(void) 56 { 57 if (!_pr_pageSize) { 58 GetPageSize(); 59 } 60 return _pr_pageShift; 61 } 62 PR_GetPageSize(void)63PR_IMPLEMENT(PRInt32) PR_GetPageSize(void) 64 { 65 if (!_pr_pageSize) { 66 GetPageSize(); 67 } 68 return _pr_pageSize; 69 } 70