1169695Skan/* Emulation of getpagesize() for systems that need it. */ 2169695Skan 3169695Skan/* 4169695Skan 5169695Skan@deftypefn Supplemental int getpagesize (void) 6169695Skan 7169695SkanReturns the number of bytes in a page of memory. This is the 8169695Skangranularity of many of the system memory management routines. No 9169695Skanguarantee is made as to whether or not it is the same as the basic 10169695Skanmemory management hardware page size. 11169695Skan 12169695Skan@end deftypefn 13169695Skan 14169695SkanBUGS 15169695Skan 16169695Skan Is intended as a reasonable replacement for systems where this 17169695Skan is not provided as a system call. The value of 4096 may or may 18169695Skan not be correct for the systems where it is returned as the default 19169695Skan value. 20169695Skan 21169695Skan*/ 22169695Skan 23169695Skan#ifndef VMS 24169695Skan 25169695Skan#include "config.h" 26169695Skan 27169695Skan#include <sys/types.h> 28169695Skan#ifdef HAVE_SYS_PARAM_H 29169695Skan#include <sys/param.h> 30169695Skan#endif 31169695Skan 32169695Skan#undef GNU_OUR_PAGESIZE 33169695Skan#if defined (HAVE_SYSCONF) && defined (HAVE_UNISTD_H) 34169695Skan#include <unistd.h> 35169695Skan#ifdef _SC_PAGESIZE 36169695Skan#define GNU_OUR_PAGESIZE sysconf(_SC_PAGESIZE) 37169695Skan#endif 38169695Skan#endif 39169695Skan 40169695Skan#ifndef GNU_OUR_PAGESIZE 41169695Skan# ifdef PAGESIZE 42169695Skan# define GNU_OUR_PAGESIZE PAGESIZE 43169695Skan# else /* no PAGESIZE */ 44169695Skan# ifdef EXEC_PAGESIZE 45169695Skan# define GNU_OUR_PAGESIZE EXEC_PAGESIZE 46169695Skan# else /* no EXEC_PAGESIZE */ 47169695Skan# ifdef NBPG 48169695Skan# define GNU_OUR_PAGESIZE (NBPG * CLSIZE) 49169695Skan# ifndef CLSIZE 50169695Skan# define CLSIZE 1 51169695Skan# endif /* CLSIZE */ 52169695Skan# else /* no NBPG */ 53169695Skan# ifdef NBPC 54169695Skan# define GNU_OUR_PAGESIZE NBPC 55169695Skan# else /* no NBPC */ 56169695Skan# define GNU_OUR_PAGESIZE 4096 /* Just punt and use reasonable value */ 57169695Skan# endif /* NBPC */ 58169695Skan# endif /* NBPG */ 59169695Skan# endif /* EXEC_PAGESIZE */ 60169695Skan# endif /* PAGESIZE */ 61169695Skan#endif /* GNU_OUR_PAGESIZE */ 62169695Skan 63169695Skanint 64169695Skangetpagesize (void) 65169695Skan{ 66169695Skan return (GNU_OUR_PAGESIZE); 67169695Skan} 68169695Skan 69169695Skan#else /* VMS */ 70169695Skan 71169695Skan#if 0 /* older distributions of gcc-vms are missing <syidef.h> */ 72169695Skan#include <syidef.h> 73169695Skan#endif 74169695Skan#ifndef SYI$_PAGE_SIZE /* VMS V5.4 and earlier didn't have this yet */ 75169695Skan#define SYI$_PAGE_SIZE 4452 76169695Skan#endif 77169695Skanextern unsigned long lib$getsyi(const unsigned short *,...); 78169695Skan 79169695Skanint getpagesize (void) 80169695Skan{ 81169695Skan long pagsiz = 0L; 82169695Skan unsigned short itmcod = SYI$_PAGE_SIZE; 83169695Skan 84169695Skan (void) lib$getsyi (&itmcod, (void *) &pagsiz); 85169695Skan if (pagsiz == 0L) 86169695Skan pagsiz = 512L; /* VAX default */ 87169695Skan return (int) pagsiz; 88169695Skan} 89169695Skan 90169695Skan#endif /* VMS */ 91