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