annotate lib/physmem.c @ 4554:5a1e7c84e9cd

Use three spaces, rather than tab, after '#' in shell-script copyright notices. Suggested by Bruno Haible.
author Paul Eggert <eggert@cs.ucla.edu>
date Fri, 15 Aug 2003 18:04:34 +0000
parents e98bdaad6174
children c7ad68a45173
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3064
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
1 /* Calculate the size of physical memory.
4551
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
2 Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
3064
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
3
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
6 the Free Software Foundation; either version 2, or (at your option)
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
7 any later version.
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
8
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
12 GNU General Public License for more details.
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
13
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
15 along with this program; if not, write to the Free Software Foundation,
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
16 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
17
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
18 /* Written by Paul Eggert. */
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
19
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
20 #if HAVE_CONFIG_H
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
21 # include <config.h>
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
22 #endif
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
23
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
24 #include "physmem.h"
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
25
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
26 #if HAVE_UNISTD_H
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
27 # include <unistd.h>
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
28 #endif
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
29
3607
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
30 #if HAVE_SYS_PSTAT_H
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
31 # include <sys/pstat.h>
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
32 #endif
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
33
4551
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
34 #if HAVE_SYS_SYSMP_H
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
35 # include <sys/sysmp.h>
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
36 #endif
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
37
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
38 #if HAVE_SYS_SYSINFO_H && HAVE_MACHINE_HAL_SYSINFO_H
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
39 # include <sys/sysinfo.h>
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
40 # include <machine/hal_sysinfo.h>
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
41 #endif
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
42
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
43 #if HAVE_SYS_TABLE_H
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
44 # include <sys/table.h>
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
45 #endif
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
46
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
47 #include <sys/types.h>
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
48
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
49 #if HAVE_SYS_PARAM_H
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
50 # include <sys/param.h>
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
51 #endif
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
52
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
53 #if HAVE_SYS_SYSCTL_H
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
54 # include <sys/sysctl.h>
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
55 #endif
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
56
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
57 #if HAVE_SYS_SYSTEMCFG_H
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
58 # include <sys/systemcfg.h>
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
59 #endif
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
60
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
61 #ifdef _WIN32
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
62 # define WIN32_LEAN_AND_MEAN
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
63 # include <windows.h>
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
64 /* MEMORYSTATUSEX is missing from older windows headers, so define
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
65 a local replacement. */
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
66 typedef struct
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
67 {
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
68 DWORD dwLength;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
69 DWORD dwMemoryLoad;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
70 DWORDLONG ullTotalPhys;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
71 DWORDLONG ullAvailPhys;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
72 DWORDLONG ullTotalPageFile;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
73 DWORDLONG ullAvailPageFile;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
74 DWORDLONG ullTotalVirtual;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
75 DWORDLONG ullAvailVirtual;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
76 DWORDLONG ullAvailExtendedVirtual;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
77 } lMEMORYSTATUSEX;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
78 typedef WINBOOL (WINAPI *PFN_MS_EX) (lMEMORYSTATUSEX*);
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
79 #endif
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
80
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
81 #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
82
3064
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
83 /* Return the total amount of physical memory. */
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
84 double
4551
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
85 physmem_total ()
3064
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
86 {
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
87 #if defined _SC_PHYS_PAGES && defined _SC_PAGESIZE
4551
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
88 { /* This works on linux-gnu, solaris2 and cygwin. */
3607
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
89 double pages = sysconf (_SC_PHYS_PAGES);
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
90 double pagesize = sysconf (_SC_PAGESIZE);
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
91 if (0 <= pages && 0 <= pagesize)
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
92 return pages * pagesize;
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
93 }
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
94 #endif
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
95
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
96 #if HAVE_PSTAT_GETSTATIC
4551
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
97 { /* This works on hpux11. */
3607
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
98 struct pst_static pss;
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
99 if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0))
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
100 {
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
101 double pages = pss.physical_memory;
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
102 double pagesize = pss.page_size;
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
103 if (0 <= pages && 0 <= pagesize)
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
104 return pages * pagesize;
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
105 }
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
106 }
3064
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
107 #endif
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
108
4551
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
109 #if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
110 { /* This works on irix6. */
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
111 struct rminfo realmem;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
112 if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0)
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
113 {
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
114 double pagesize = sysconf (_SC_PAGESIZE);
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
115 double pages = realmem.physmem;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
116 if (0 <= pages && 0 <= pagesize)
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
117 return pages * pagesize;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
118 }
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
119 }
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
120 #endif
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
121
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
122 #if HAVE_GETSYSINFO && defined GSI_PHYSMEM
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
123 { /* This works on Tru64 UNIX V4/5. */
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
124 int physmem;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
125
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
126 if (getsysinfo (GSI_PHYSMEM, (caddr_t) &physmem, sizeof (physmem),
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
127 NULL, NULL, NULL) == 1)
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
128 {
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
129 double kbytes = physmem;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
130
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
131 if (0 <= kbytes)
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
132 return kbytes * 1024.0;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
133 }
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
134 }
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
135 #endif
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
136
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
137 #if HAVE_SYSCTL && defined HW_PHYSMEM
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
138 { /* This works on *bsd and darwin. */
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
139 unsigned int physmem;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
140 size_t len = sizeof physmem;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
141 static int mib[2] = { CTL_HW, HW_PHYSMEM };
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
142
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
143 if (sysctl (mib, ARRAY_SIZE (mib), &physmem, &len, NULL, 0) == 0
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
144 && len == sizeof (physmem))
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
145 return (double) physmem;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
146 }
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
147 #endif
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
148
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
149 #if HAVE__SYSTEM_CONFIGURATION
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
150 /* This works on AIX. */
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
151 return _system_configuration.physmem;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
152 #endif
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
153
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
154 #if defined _WIN32
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
155 { /* this works on windows */
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
156 PFN_MS_EX pfnex;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
157 HMODULE h = GetModuleHandle ("kernel32.dll");
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
158
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
159 if (!h)
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
160 return 0.0;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
161
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
162 /* Use GlobalMemoryStatusEx if available. */
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
163 if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx")))
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
164 {
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
165 lMEMORYSTATUSEX lms_ex;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
166 lms_ex.dwLength = sizeof lms_ex;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
167 if (!pfnex (&lms_ex))
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
168 return 0.0;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
169 return (double) lms_ex.ullTotalPhys;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
170 }
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
171
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
172 /* Fall back to GlobalMemoryStatus which is always available.
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
173 but returns wrong results for physical memory > 4GB. */
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
174 else
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
175 {
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
176 MEMORYSTATUS ms;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
177 GlobalMemoryStatus (&ms);
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
178 return (double) ms.dwTotalPhys;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
179 }
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
180 }
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
181 #endif
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
182
3064
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
183 /* Guess 64 MB. It's probably an older host, so guess small. */
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
184 return 64 * 1024 * 1024;
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
185 }
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
186
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
187 /* Return the amount of physical memory available. */
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
188 double
4551
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
189 physmem_available ()
3064
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
190 {
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
191 #if defined _SC_AVPHYS_PAGES && defined _SC_PAGESIZE
4551
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
192 { /* This works on linux-gnu, solaris2 and cygwin. */
3607
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
193 double pages = sysconf (_SC_AVPHYS_PAGES);
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
194 double pagesize = sysconf (_SC_PAGESIZE);
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
195 if (0 <= pages && 0 <= pagesize)
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
196 return pages * pagesize;
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
197 }
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
198 #endif
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
199
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
200 #if HAVE_PSTAT_GETSTATIC && HAVE_PSTAT_GETDYNAMIC
4551
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
201 { /* This works on hpux11. */
3607
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
202 struct pst_static pss;
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
203 struct pst_dynamic psd;
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
204 if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0)
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
205 && 0 <= pstat_getdynamic (&psd, sizeof psd, 1, 0))
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
206 {
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
207 double pages = psd.psd_free;
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
208 double pagesize = pss.page_size;
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
209 if (0 <= pages && 0 <= pagesize)
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
210 return pages * pagesize;
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
211 }
0eb39272f531 [HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents: 3064
diff changeset
212 }
3064
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
213 #endif
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
214
4551
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
215 #if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
216 { /* This works on irix6. */
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
217 struct rminfo realmem;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
218 if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0)
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
219 {
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
220 double pagesize = sysconf (_SC_PAGESIZE);
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
221 double pages = realmem.availrmem;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
222 if (0 <= pages && 0 <= pagesize)
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
223 return pages * pagesize;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
224 }
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
225 }
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
226 #endif
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
227
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
228 #if HAVE_TABLE && defined TBL_VMSTATS
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
229 { /* This works on Tru64 UNIX V4/5. */
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
230 struct tbl_vmstats vmstats;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
231
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
232 if (table (TBL_VMSTATS, 0, &vmstats, 1, sizeof (vmstats)) == 1)
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
233 {
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
234 double pages = vmstats.free_count;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
235 double pagesize = vmstats.pagesize;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
236
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
237 if (0 <= pages && 0 <= pagesize)
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
238 return pages * pagesize;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
239 }
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
240 }
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
241 #endif
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
242
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
243 #if HAVE_SYSCTL && defined HW_USERMEM
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
244 { /* This works on *bsd and darwin. */
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
245 unsigned int usermem;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
246 size_t len = sizeof usermem;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
247 static int mib[2] = { CTL_HW, HW_USERMEM };
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
248
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
249 if (sysctl (mib, ARRAY_SIZE (mib), &usermem, &len, NULL, 0) == 0
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
250 && len == sizeof (usermem))
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
251 return (double) usermem;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
252 }
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
253 #endif
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
254
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
255 #if defined _WIN32
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
256 { /* this works on windows */
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
257 PFN_MS_EX pfnex;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
258 HMODULE h = GetModuleHandle ("kernel32.dll");
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
259
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
260 if (!h)
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
261 return 0.0;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
262
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
263 /* Use GlobalMemoryStatusEx if available. */
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
264 if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx")))
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
265 {
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
266 lMEMORYSTATUSEX lms_ex;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
267 lms_ex.dwLength = sizeof lms_ex;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
268 if (!pfnex (&lms_ex))
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
269 return 0.0;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
270 return (double) lms_ex.ullAvailPhys;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
271 }
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
272
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
273 /* Fall back to GlobalMemoryStatus which is always available.
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
274 but returns wrong results for physical memory > 4GB */
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
275 else
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
276 {
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
277 MEMORYSTATUS ms;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
278 GlobalMemoryStatus (&ms);
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
279 return (double) ms.dwAvailPhys;
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
280 }
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
281 }
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
282 #endif
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
283
3064
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
284 /* Guess 25% of physical memory. */
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
285 return physmem_total () / 4;
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
286 }
4551
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
287
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
288
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
289 #if DEBUG
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
290
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
291 # include <stdio.h>
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
292 # include <stdlib.h>
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
293
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
294 int
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
295 main ()
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
296 {
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
297 printf ("%12.f %12.f\n", physmem_total (), physmem_available ());
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
298 exit (0);
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
299 }
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
300
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
301 #endif /* DEBUG */
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
302
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
303 /*
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
304 Local Variables:
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
305 compile-command: "gcc -DDEBUG -DHAVE_CONFIG_H -I.. -g -O -Wall -W physmem.c"
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
306 End:
e98bdaad6174 Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents: 3607
diff changeset
307 */