OSDN Git Service

* sysconf.cc (sysconf): Return more accurate value for _SC_AVPHYS_PAGES.
authorcorinna <corinna>
Thu, 4 Sep 2003 10:57:58 +0000 (10:57 +0000)
committercorinna <corinna>
Thu, 4 Sep 2003 10:57:58 +0000 (10:57 +0000)
winsup/cygwin/ChangeLog
winsup/cygwin/sysconf.cc

index 332701f..d2dd326 100644 (file)
@@ -1,5 +1,9 @@
 2003-09-04  Corinna Vinschen  <corinna@vinschen.de>
 
+       * sysconf.cc (sysconf): Return more accurate value for _SC_AVPHYS_PAGES.
+
+2003-09-04  Corinna Vinschen  <corinna@vinschen.de>
+
        * mmap.cc: Restructure. Add, remove and rewrite comments throughout
        for better readability.  Change function names for better
        understanding.
index d94b606..fa290b9 100644 (file)
@@ -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 */