1*4fee23f9Smrg /* Emulation of getpagesize() for systems that need it. */ 2*4fee23f9Smrg 3*4fee23f9Smrg /* 4*4fee23f9Smrg 5*4fee23f9Smrg @deftypefn Supplemental int getpagesize (void) 6*4fee23f9Smrg 7*4fee23f9Smrg Returns the number of bytes in a page of memory. This is the 8*4fee23f9Smrg granularity of many of the system memory management routines. No 9*4fee23f9Smrg guarantee is made as to whether or not it is the same as the basic 10*4fee23f9Smrg memory management hardware page size. 11*4fee23f9Smrg 12*4fee23f9Smrg @end deftypefn 13*4fee23f9Smrg 14*4fee23f9Smrg BUGS 15*4fee23f9Smrg 16*4fee23f9Smrg Is intended as a reasonable replacement for systems where this 17*4fee23f9Smrg is not provided as a system call. The value of 4096 may or may 18*4fee23f9Smrg not be correct for the systems where it is returned as the default 19*4fee23f9Smrg value. 20*4fee23f9Smrg 21*4fee23f9Smrg */ 22*4fee23f9Smrg 23*4fee23f9Smrg #ifndef VMS 24*4fee23f9Smrg 25*4fee23f9Smrg #include "config.h" 26*4fee23f9Smrg 27*4fee23f9Smrg #include <sys/types.h> 28*4fee23f9Smrg #ifdef HAVE_SYS_PARAM_H 29*4fee23f9Smrg #include <sys/param.h> 30*4fee23f9Smrg #endif 31*4fee23f9Smrg 32*4fee23f9Smrg #undef GNU_OUR_PAGESIZE 33*4fee23f9Smrg #if defined (HAVE_SYSCONF) && defined (HAVE_UNISTD_H) 34*4fee23f9Smrg #include <unistd.h> 35*4fee23f9Smrg #ifdef _SC_PAGESIZE 36*4fee23f9Smrg #define GNU_OUR_PAGESIZE sysconf(_SC_PAGESIZE) 37*4fee23f9Smrg #endif 38*4fee23f9Smrg #endif 39*4fee23f9Smrg 40*4fee23f9Smrg #ifndef GNU_OUR_PAGESIZE 41*4fee23f9Smrg # ifdef PAGESIZE 42*4fee23f9Smrg # define GNU_OUR_PAGESIZE PAGESIZE 43*4fee23f9Smrg # else /* no PAGESIZE */ 44*4fee23f9Smrg # ifdef EXEC_PAGESIZE 45*4fee23f9Smrg # define GNU_OUR_PAGESIZE EXEC_PAGESIZE 46*4fee23f9Smrg # else /* no EXEC_PAGESIZE */ 47*4fee23f9Smrg # ifdef NBPG 48*4fee23f9Smrg # define GNU_OUR_PAGESIZE (NBPG * CLSIZE) 49*4fee23f9Smrg # ifndef CLSIZE 50*4fee23f9Smrg # define CLSIZE 1 51*4fee23f9Smrg # endif /* CLSIZE */ 52*4fee23f9Smrg # else /* no NBPG */ 53*4fee23f9Smrg # ifdef NBPC 54*4fee23f9Smrg # define GNU_OUR_PAGESIZE NBPC 55*4fee23f9Smrg # else /* no NBPC */ 56*4fee23f9Smrg # define GNU_OUR_PAGESIZE 4096 /* Just punt and use reasonable value */ 57*4fee23f9Smrg # endif /* NBPC */ 58*4fee23f9Smrg # endif /* NBPG */ 59*4fee23f9Smrg # endif /* EXEC_PAGESIZE */ 60*4fee23f9Smrg # endif /* PAGESIZE */ 61*4fee23f9Smrg #endif /* GNU_OUR_PAGESIZE */ 62*4fee23f9Smrg 63*4fee23f9Smrg int getpagesize(void)64*4fee23f9Smrggetpagesize (void) 65*4fee23f9Smrg { 66*4fee23f9Smrg return (GNU_OUR_PAGESIZE); 67*4fee23f9Smrg } 68*4fee23f9Smrg 69*4fee23f9Smrg #else /* VMS */ 70*4fee23f9Smrg 71*4fee23f9Smrg #if 0 /* older distributions of gcc-vms are missing <syidef.h> */ 72*4fee23f9Smrg #include <syidef.h> 73*4fee23f9Smrg #endif 74*4fee23f9Smrg #ifndef SYI$_PAGE_SIZE /* VMS V5.4 and earlier didn't have this yet */ 75*4fee23f9Smrg #define SYI$_PAGE_SIZE 4452 76*4fee23f9Smrg #endif 77*4fee23f9Smrg extern unsigned long lib$getsyi(const unsigned short *,...); 78*4fee23f9Smrg getpagesize(void)79*4fee23f9Smrgint getpagesize (void) 80*4fee23f9Smrg { 81*4fee23f9Smrg long pagsiz = 0L; 82*4fee23f9Smrg unsigned short itmcod = SYI$_PAGE_SIZE; 83*4fee23f9Smrg 84*4fee23f9Smrg (void) lib$getsyi (&itmcod, (void *) &pagsiz); 85*4fee23f9Smrg if (pagsiz == 0L) 86*4fee23f9Smrg pagsiz = 512L; /* VAX default */ 87*4fee23f9Smrg return (int) pagsiz; 88*4fee23f9Smrg } 89*4fee23f9Smrg 90*4fee23f9Smrg #endif /* VMS */ 91