Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2003-09-04 14:57:58 +0400
committerCorinna Vinschen <corinna@vinschen.de>2003-09-04 14:57:58 +0400
commit39473bba440668848d133e3d3a6c05266e3bd2a3 (patch)
treea5855cdb1110d1da51c07586d600a5e186634020 /winsup/cygwin/sysconf.cc
parent4544f7f6a2ae3211707994a425fb57dffb4f34fe (diff)
* sysconf.cc (sysconf): Return more accurate value for _SC_AVPHYS_PAGES.
Diffstat (limited to 'winsup/cygwin/sysconf.cc')
-rw-r--r--winsup/cygwin/sysconf.cc21
1 files changed, 18 insertions, 3 deletions
diff --git a/winsup/cygwin/sysconf.cc b/winsup/cygwin/sysconf.cc
index d94b60699..fa290b945 100644
--- a/winsup/cygwin/sysconf.cc
+++ b/winsup/cygwin/sysconf.cc
@@ -69,7 +69,6 @@ sysconf (int in)
return 1;
/*FALLTHRU*/
case _SC_PHYS_PAGES:
- case _SC_AVPHYS_PAGES:
if (wincap.supports_smp ())
{
NTSTATUS ret;
@@ -100,11 +99,27 @@ sysconf (int in)
}
case _SC_PHYS_PAGES:
return sbi.NumberOfPhysicalPages;
- case _SC_AVPHYS_PAGES:
- return sbi.HighestPhysicalPage - sbi.LowestPhysicalPage + 1;
}
}
break;
+ case _SC_AVPHYS_PAGES:
+ if (wincap.supports_smp ())
+ {
+ NTSTATUS ret;
+ SYSTEM_PERFORMANCE_INFORMATION spi;
+ if ((ret = NtQuerySystemInformation (SystemPerformanceInformation,
+ (PVOID) &spi,
+ sizeof spi, NULL))
+ != STATUS_SUCCESS)
+ {
+ __seterrno_from_win_error (RtlNtStatusToDosError (ret));
+ debug_printf ("NtQuerySystemInformation: ret = %d, "
+ "Dos(ret) = %d",
+ ret, RtlNtStatusToDosError (ret));
+ return -1;
+ }
+ return spi.AvailablePages;
+ }
}
/* Invalid input or unimplemented sysconf name */