| /* 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 */ |