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