+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
#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 */
--- /dev/null
+/* 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);
+}
+
#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
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 */