|  | /* Emulation of getpagesize() for systems that need it. */ | 
|  |  | 
|  | /* | 
|  |  | 
|  | @deftypefn Supplemental int getpagesize (void) | 
|  |  | 
|  | Returns the number of bytes in a page of memory.  This is the | 
|  | granularity of many of the system memory management routines.  No | 
|  | guarantee is made as to whether or not it is the same as the basic | 
|  | memory management hardware page size. | 
|  |  | 
|  | @end deftypefn | 
|  |  | 
|  | BUGS | 
|  |  | 
|  | Is intended as a reasonable replacement for systems where this | 
|  | is not provided as a system call.  The value of 4096 may or may | 
|  | not be correct for the systems where it is returned as the default | 
|  | value. | 
|  |  | 
|  | */ | 
|  |  | 
|  | #ifndef VMS | 
|  |  | 
|  | #include "config.h" | 
|  |  | 
|  | #include <sys/types.h> | 
|  | #ifdef HAVE_SYS_PARAM_H | 
|  | #include <sys/param.h> | 
|  | #endif | 
|  |  | 
|  | #undef GNU_OUR_PAGESIZE | 
|  | #if defined (HAVE_SYSCONF) && defined (HAVE_UNISTD_H) | 
|  | #include <unistd.h> | 
|  | #ifdef _SC_PAGESIZE | 
|  | #define GNU_OUR_PAGESIZE sysconf(_SC_PAGESIZE) | 
|  | #endif | 
|  | #endif | 
|  |  | 
|  | #ifndef GNU_OUR_PAGESIZE | 
|  | # ifdef	PAGESIZE | 
|  | #  define	GNU_OUR_PAGESIZE PAGESIZE | 
|  | # else	/* no PAGESIZE */ | 
|  | #  ifdef	EXEC_PAGESIZE | 
|  | #   define	GNU_OUR_PAGESIZE EXEC_PAGESIZE | 
|  | #  else	/* no EXEC_PAGESIZE */ | 
|  | #   ifdef	NBPG | 
|  | #    define	GNU_OUR_PAGESIZE (NBPG * CLSIZE) | 
|  | #    ifndef	CLSIZE | 
|  | #     define	CLSIZE 1 | 
|  | #    endif	/* CLSIZE */ | 
|  | #   else	/* no NBPG */ | 
|  | #    ifdef	NBPC | 
|  | #     define	GNU_OUR_PAGESIZE NBPC | 
|  | #    else	/* no NBPC */ | 
|  | #     define	GNU_OUR_PAGESIZE 4096	/* Just punt and use reasonable value */ | 
|  | #    endif /* NBPC */ | 
|  | #   endif /* NBPG */ | 
|  | #  endif /* EXEC_PAGESIZE */ | 
|  | # endif /* PAGESIZE */ | 
|  | #endif /* GNU_OUR_PAGESIZE */ | 
|  |  | 
|  | int | 
|  | getpagesize (void) | 
|  | { | 
|  | return (GNU_OUR_PAGESIZE); | 
|  | } | 
|  |  | 
|  | #else /* VMS */ | 
|  |  | 
|  | #if 0	/* older distributions of gcc-vms are missing <syidef.h> */ | 
|  | #include <syidef.h> | 
|  | #endif | 
|  | #ifndef SYI$_PAGE_SIZE	/* VMS V5.4 and earlier didn't have this yet */ | 
|  | #define SYI$_PAGE_SIZE 4452 | 
|  | #endif | 
|  | extern unsigned long lib$getsyi(const unsigned short *,...); | 
|  |  | 
|  | int getpagesize (void) | 
|  | { | 
|  | long pagsiz = 0L; | 
|  | unsigned short itmcod = SYI$_PAGE_SIZE; | 
|  |  | 
|  | (void) lib$getsyi (&itmcod, (void *) &pagsiz); | 
|  | if (pagsiz == 0L) | 
|  | pagsiz = 512L;	/* VAX default */ | 
|  | return (int) pagsiz; | 
|  | } | 
|  |  | 
|  | #endif /* VMS */ |