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