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