/* Emulation of getpagesize() for systems that need it. */

/*

NAME

	getpagesize -- return the number of bytes in page of memory

SYNOPSIS

	int getpagesize (void)

DESCRIPTION

	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.

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 ()
{
  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 ()
{
  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 */
