mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-18 12:29:32 +08:00
* sysconf.cc (sysinfo): New function.
* cygwin.din (sysinfo): Export. * posix.sgml (std-gnu): Add sysinfo. * include/sys/sysinfo.h (struct sysinfo): Define. (sysinfo): Declare. * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
This commit is contained in:
parent
cc718e26c6
commit
2f52cad971
@ -1,3 +1,12 @@
|
||||
2011-05-06 Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
|
||||
|
||||
* sysconf.cc (sysinfo): New function.
|
||||
* cygwin.din (sysinfo): Export.
|
||||
* posix.sgml (std-gnu): Add sysinfo.
|
||||
* include/sys/sysinfo.h (struct sysinfo): Define.
|
||||
(sysinfo): Declare.
|
||||
* include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
|
||||
|
||||
2011-05-06 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* libc/minires-os-if.c (get_dns_info): Drop printing uninitialized
|
||||
|
@ -1682,6 +1682,7 @@ symlinkat SIGFE
|
||||
sync SIGFE
|
||||
sysconf SIGFE
|
||||
_sysconf = sysconf SIGFE
|
||||
sysinfo SIGFE
|
||||
syslog SIGFE
|
||||
_syslog = syslog SIGFE
|
||||
system SIGFE
|
||||
|
@ -408,12 +408,13 @@ details. */
|
||||
241: Export pthread_attr_getstack, pthread_attr_getstackaddr,
|
||||
pthread_getattr_np.
|
||||
242: Export psiginfo, psignal, sys_siglist.
|
||||
243: Export sysinfo.
|
||||
*/
|
||||
|
||||
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
|
||||
|
||||
#define CYGWIN_VERSION_API_MAJOR 0
|
||||
#define CYGWIN_VERSION_API_MINOR 242
|
||||
#define CYGWIN_VERSION_API_MINOR 243
|
||||
|
||||
/* There is also a compatibity version number associated with the
|
||||
shared memory regions. It is incremented when incompatible
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* sys/sysinfo.h
|
||||
|
||||
Copyright 2009 Red Hat, Inc.
|
||||
Copyright 2009, 2011 Red Hat, Inc.
|
||||
|
||||
This file is part of Cygwin.
|
||||
|
||||
@ -17,6 +17,23 @@ details. */
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
struct sysinfo {
|
||||
long uptime; /* Seconds since boot */
|
||||
unsigned long loads[3]; /* 1, 5, and 15 minute load averages */
|
||||
unsigned long totalram; /* Total usable main memory size */
|
||||
unsigned long freeram; /* Available memory size */
|
||||
unsigned long sharedram; /* Amount of shared memory */
|
||||
unsigned long bufferram; /* Memory used by buffers */
|
||||
unsigned long totalswap; /* Total swap space size */
|
||||
unsigned long freeswap; /* swap space still available */
|
||||
unsigned short procs; /* Number of current processes */
|
||||
unsigned long totalhigh; /* Total high memory size */
|
||||
unsigned long freehigh; /* Available high memory size */
|
||||
unsigned int mem_unit; /* Memory unit size in bytes */
|
||||
char __unused[10]; /* Pads structure to 64 bytes */
|
||||
};
|
||||
|
||||
extern int sysinfo (struct sysinfo *);
|
||||
extern int get_nprocs_conf (void);
|
||||
extern int get_nprocs (void);
|
||||
extern long get_phys_pages (void);
|
||||
|
@ -1124,6 +1124,7 @@ also IEEE Std 1003.1-2008 (POSIX.1-2008).</para>
|
||||
removexattr
|
||||
setxattr
|
||||
strchrnul
|
||||
sysinfo
|
||||
tdestroy
|
||||
timegm
|
||||
timelocal
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* sysconf.cc
|
||||
|
||||
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||
2006, 2007, 2009 Red Hat, Inc.
|
||||
2006, 2007, 2009, 2010, 2011 Red Hat, Inc.
|
||||
|
||||
This file is part of Cygwin.
|
||||
|
||||
@ -17,6 +17,7 @@ details. */
|
||||
#include "path.h"
|
||||
#include "fhandler.h"
|
||||
#include "dtable.h"
|
||||
#include "pinfo.h"
|
||||
#include "ntdll.h"
|
||||
|
||||
static long
|
||||
@ -317,3 +318,99 @@ get_avphys_pages (void)
|
||||
{
|
||||
return get_avphys (_SC_AVPHYS_PAGES);
|
||||
}
|
||||
|
||||
extern "C" int
|
||||
sysinfo (struct sysinfo *info)
|
||||
{
|
||||
unsigned long long uptime = 0ULL, totalram = 0ULL, freeram = 0ULL,
|
||||
totalswap = 0ULL, freeswap = 0ULL;
|
||||
MEMORYSTATUSEX memory_status;
|
||||
PSYSTEM_PAGEFILE_INFORMATION spi = NULL;
|
||||
ULONG sizeof_spi = 512;
|
||||
PSYSTEM_TIME_OF_DAY_INFORMATION stodi = NULL;
|
||||
ULONG sizeof_stodi = sizeof (SYSTEM_TIME_OF_DAY_INFORMATION);
|
||||
NTSTATUS ret = STATUS_SUCCESS;
|
||||
winpids pids ((DWORD) 0);
|
||||
|
||||
if (!info)
|
||||
{
|
||||
set_errno (EFAULT);
|
||||
return -1;
|
||||
}
|
||||
|
||||
stodi = (PSYSTEM_TIME_OF_DAY_INFORMATION) malloc (sizeof_stodi);
|
||||
ret = NtQuerySystemInformation (SystemTimeOfDayInformation, (PVOID) stodi,
|
||||
sizeof_stodi, NULL);
|
||||
if (NT_SUCCESS (ret))
|
||||
uptime = (stodi->CurrentTime.QuadPart - stodi->BootTime.QuadPart) / 10000000ULL;
|
||||
else
|
||||
{
|
||||
debug_printf ("NtQuerySystemInformation(SystemTimeOfDayInformation), "
|
||||
"status %p", ret);
|
||||
}
|
||||
|
||||
if (stodi)
|
||||
free (stodi);
|
||||
|
||||
memory_status.dwLength = sizeof (MEMORYSTATUSEX);
|
||||
GlobalMemoryStatusEx (&memory_status);
|
||||
totalram = memory_status.ullTotalPhys / getsystempagesize ();
|
||||
freeram = memory_status.ullAvailPhys / getsystempagesize ();
|
||||
|
||||
spi = (PSYSTEM_PAGEFILE_INFORMATION) malloc (sizeof_spi);
|
||||
if (spi)
|
||||
{
|
||||
ret = NtQuerySystemInformation (SystemPagefileInformation, (PVOID) spi,
|
||||
sizeof_spi, &sizeof_spi);
|
||||
if (ret == STATUS_INFO_LENGTH_MISMATCH)
|
||||
{
|
||||
free (spi);
|
||||
spi = (PSYSTEM_PAGEFILE_INFORMATION) malloc (sizeof_spi);
|
||||
if (spi)
|
||||
ret = NtQuerySystemInformation (SystemPagefileInformation,
|
||||
(PVOID) spi, sizeof_spi, &sizeof_spi);
|
||||
}
|
||||
}
|
||||
if (!spi || ret || (!ret && GetLastError () == ERROR_PROC_NOT_FOUND))
|
||||
{
|
||||
debug_printf ("NtQuerySystemInformation(SystemPagefileInformation), "
|
||||
"status %p", ret);
|
||||
totalswap = (memory_status.ullTotalPageFile - memory_status.ullTotalPhys)
|
||||
/ getsystempagesize ();
|
||||
freeswap = (memory_status.ullAvailPageFile - memory_status.ullTotalPhys)
|
||||
/ getsystempagesize ();
|
||||
}
|
||||
else
|
||||
{
|
||||
PSYSTEM_PAGEFILE_INFORMATION spp = spi;
|
||||
do
|
||||
{
|
||||
totalswap += spp->CurrentSize;
|
||||
freeswap += spp->CurrentSize - spp->TotalUsed;
|
||||
}
|
||||
while (spp->NextEntryOffset
|
||||
&& (spp = (PSYSTEM_PAGEFILE_INFORMATION)
|
||||
((char *) spp + spp->NextEntryOffset)));
|
||||
}
|
||||
if (spi)
|
||||
free (spi);
|
||||
|
||||
info->uptime = (long) uptime;
|
||||
info->totalram = (unsigned long) totalram;
|
||||
info->freeram = (unsigned long) freeram;
|
||||
info->totalswap = (unsigned long) totalswap;
|
||||
info->freeswap = (unsigned long) freeswap;
|
||||
info->procs = (unsigned short) pids.npids;
|
||||
info->mem_unit = (unsigned int) getsystempagesize ();
|
||||
|
||||
/* FIXME: unsupported */
|
||||
info->loads[0] = 0UL;
|
||||
info->loads[1] = 0UL;
|
||||
info->loads[2] = 0UL;
|
||||
info->sharedram = 0UL;
|
||||
info->bufferram = 0UL;
|
||||
info->totalhigh = 0UL;
|
||||
info->freehigh = 0UL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user