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
path: root/winsup
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2000-10-24 22:44:56 +0400
committerCorinna Vinschen <corinna@vinschen.de>2000-10-24 22:44:56 +0400
commit8c8d0db462de553d960b45968c3c77bb73b6b170 (patch)
tree5a13a8d3665a67582dfd0a25825fac8fcd704bc6 /winsup
parentba9e88d24ca3988e7c73d330a924fc184fde5e0e (diff)
* ntdll.h: New file.
* fhandler_mem.cc: Move ntdll.dll specific definitions and declarations to ntdll.h. * sysconf.cc (sysconf): Add support for _SC_NPROCESSORS_CONF, _SC_NPROCESSORS_ONLN, _SC_PHYS_PAGES and _SC_AVPHYS_PAGES.
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/ChangeLog8
-rw-r--r--winsup/cygwin/fhandler_mem.cc37
-rw-r--r--winsup/cygwin/ntdll.h50
-rw-r--r--winsup/cygwin/sysconf.cc35
4 files changed, 94 insertions, 36 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index b95b5d774..c82f601fa 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,11 @@
+Tue Oct 24 20:38:00 2000 Corinna Vinschen <corinna@vinschen.de>
+
+ * ntdll.h: New file.
+ * fhandler_mem.cc: Move ntdll.dll specific definitions and
+ declarations to ntdll.h.
+ * sysconf.cc (sysconf): Add support for _SC_NPROCESSORS_CONF,
+ _SC_NPROCESSORS_ONLN, _SC_PHYS_PAGES and _SC_AVPHYS_PAGES.
+
Tue Oct 24 20:00:00 2000 Corinna Vinschen <corinna@vinschen.de>
* fhandler.cc (fhandler_base::fcntl): Behave properly when passed
diff --git a/winsup/cygwin/fhandler_mem.cc b/winsup/cygwin/fhandler_mem.cc
index 5aa3bee23..5c9ed1ead 100644
--- a/winsup/cygwin/fhandler_mem.cc
+++ b/winsup/cygwin/fhandler_mem.cc
@@ -18,42 +18,7 @@
#include "autoload.h"
#include "cygerrno.h"
#include "fhandler.h"
-
-/*
- * The following both data structures aren't defined anywhere in the Microsoft
- * header files. Taken from the book "Windows NT/2000 Native API Reference"
- * by Gary Nebbett.
- */
-typedef enum _SYSTEM_INFORMATION_CLASS {
- SystemBasicInformation = 0
- /* Dropped each other since not used here. */
-} SYSTEM_INFORMATION_CLASS;
-
-typedef struct _SYSTEM_BASIC_INFORMATION {
- ULONG Unknown;
- ULONG MaximumIncrement;
- ULONG PhysicalPageSize;
- ULONG NumberOfPhysicalPages;
- ULONG LowestPhysicalPage;
- ULONG HighestPhysicalPage;
- ULONG AllocationGranularity;
- ULONG LowestUserAddress;
- ULONG HighestUserAddress;
- ULONG ActiveProcessors;
- ULONG NumberProcessors;
-} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
-
-extern "C" {
-NTSTATUS NTAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,ULONG,
- PLARGE_INTEGER,PULONG,SECTION_INHERIT,
- ULONG,ULONG);
-NTSTATUS NTAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,
- PVOID,ULONG,PULONG);
-NTSTATUS NTAPI NtOpenSection(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
-NTSTATUS NTAPI NtUnmapViewOfSection(HANDLE,PVOID);
-VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
-ULONG NTAPI RtlNtStatusToDosError(NTSTATUS);
-}
+#include "ntdll.h"
/**********************************************************************/
/* fhandler_dev_mem */
diff --git a/winsup/cygwin/ntdll.h b/winsup/cygwin/ntdll.h
new file mode 100644
index 000000000..bdb4fe8ba
--- /dev/null
+++ b/winsup/cygwin/ntdll.h
@@ -0,0 +1,50 @@
+/* ntdll.h. Contains ntdll specific stuff which is nowhere defined.
+
+ Copyright 2000 Cygnus Solutions.
+
+ This file is part of Cygwin.
+
+ This software is a copyrighted work licensed under the terms of the
+ Cygwin license. Please consult the file "CYGWIN_LICENSE" for
+ details. */
+
+/*
+ * The following both data structures aren't defined anywhere in the Microsoft
+ * header files. Taken from the book "Windows NT/2000 Native API Reference"
+ * by Gary Nebbett.
+ */
+typedef enum _SYSTEM_INFORMATION_CLASS {
+ SystemBasicInformation = 0
+ /* Dropped each other since not used here. */
+} SYSTEM_INFORMATION_CLASS;
+
+typedef struct _SYSTEM_BASIC_INFORMATION {
+ ULONG Unknown;
+ ULONG MaximumIncrement;
+ ULONG PhysicalPageSize;
+ ULONG NumberOfPhysicalPages;
+ ULONG LowestPhysicalPage;
+ ULONG HighestPhysicalPage;
+ ULONG AllocationGranularity;
+ ULONG LowestUserAddress;
+ ULONG HighestUserAddress;
+ ULONG ActiveProcessors;
+ ULONG NumberProcessors;
+} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
+
+/*
+ * Function declarations for ntdll.dll. They doesn't appear in any
+ * Win32 header either.
+ */
+extern "C" {
+NTSTATUS NTAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,ULONG,
+ PLARGE_INTEGER,PULONG,SECTION_INHERIT,
+ ULONG,ULONG);
+NTSTATUS NTAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,
+ PVOID,ULONG,PULONG);
+NTSTATUS NTAPI NtOpenSection(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSTATUS NTAPI NtUnmapViewOfSection(HANDLE,PVOID);
+VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
+ULONG NTAPI RtlNtStatusToDosError(NTSTATUS);
+}
+
diff --git a/winsup/cygwin/sysconf.cc b/winsup/cygwin/sysconf.cc
index a6383dccb..964fdb1ab 100644
--- a/winsup/cygwin/sysconf.cc
+++ b/winsup/cygwin/sysconf.cc
@@ -13,9 +13,11 @@ details. */
#include <errno.h>
#include <time.h>
#include <limits.h>
+#include <ntdef.h>
#include "fhandler.h"
#include "dtable.h"
#include "cygerrno.h"
+#include "ntdll.h"
/* sysconf: POSIX 4.8.1.1 */
/* Allows a portable app to determine quantities of resources or
@@ -57,6 +59,39 @@ sysconf (int in)
case _SC_STREAM_MAX:
return _POSIX_STREAM_MAX;
#endif
+ case _SC_NPROCESSORS_CONF:
+ case _SC_NPROCESSORS_ONLN:
+ if (os_being_run != winNT)
+ return 1;
+ /*FALLTHRU*/
+ case _SC_PHYS_PAGES:
+ case _SC_AVPHYS_PAGES:
+ {
+ NTSTATUS ret;
+ SYSTEM_BASIC_INFORMATION sbi;
+ if ((ret = NtQuerySystemInformation (SystemBasicInformation,
+ (PVOID) &sbi,
+ sizeof sbi, NULL))
+ != STATUS_SUCCESS)
+ {
+ __seterrno_from_win_error (RtlNtStatusToDosError (ret));
+ debug_printf("NtQuerySystemInformation: ret = %d, "
+ "Dos(ret) = %d",
+ ret, RtlNtStatusToDosError (ret));
+ return -1;
+ }
+ switch (in)
+ {
+ case _SC_NPROCESSORS_CONF:
+ return sbi.NumberProcessors;
+ case _SC_NPROCESSORS_ONLN:
+ return sbi.ActiveProcessors;
+ case _SC_PHYS_PAGES:
+ return sbi.NumberOfPhysicalPages;
+ case _SC_AVPHYS_PAGES:
+ return sbi.HighestPhysicalPage - sbi.LowestPhysicalPage + 1;
+ }
+ }
}
/* Invalid input or unimplemented sysconf name */