prosdep.c (1327B)
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 */ 22 static void GetPageSize(void) { 23 PRInt32 pageSize; 24 25 /* Get page size */ 26 #ifdef XP_UNIX 27 # if defined AIX || defined LINUX || defined __GNU__ || defined __GLIBC__ || \ 28 defined FREEBSD || defined NETBSD || defined OPENBSD || defined DARWIN 29 _pr_pageSize = getpagesize(); 30 # else 31 _pr_pageSize = sysconf(_SC_PAGESIZE); 32 # endif 33 #endif /* XP_UNIX */ 34 35 #ifdef XP_PC 36 # ifdef _WIN32 37 SYSTEM_INFO info; 38 GetSystemInfo(&info); 39 _pr_pageSize = info.dwPageSize; 40 # else 41 _pr_pageSize = 4096; 42 # endif 43 #endif /* XP_PC */ 44 45 pageSize = _pr_pageSize; 46 PR_CEILING_LOG2(_pr_pageShift, pageSize); 47 } 48 49 PR_IMPLEMENT(PRInt32) PR_GetPageShift(void) { 50 if (!_pr_pageSize) { 51 GetPageSize(); 52 } 53 return _pr_pageShift; 54 } 55 56 PR_IMPLEMENT(PRInt32) PR_GetPageSize(void) { 57 if (!_pr_pageSize) { 58 GetPageSize(); 59 } 60 return _pr_pageSize; 61 }