* 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>
|
2011-05-06 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* libc/minires-os-if.c (get_dns_info): Drop printing uninitialized
|
* libc/minires-os-if.c (get_dns_info): Drop printing uninitialized
|
||||||
|
@ -1682,6 +1682,7 @@ symlinkat SIGFE
|
|||||||
sync SIGFE
|
sync SIGFE
|
||||||
sysconf SIGFE
|
sysconf SIGFE
|
||||||
_sysconf = sysconf SIGFE
|
_sysconf = sysconf SIGFE
|
||||||
|
sysinfo SIGFE
|
||||||
syslog SIGFE
|
syslog SIGFE
|
||||||
_syslog = syslog SIGFE
|
_syslog = syslog SIGFE
|
||||||
system SIGFE
|
system SIGFE
|
||||||
|
@ -408,12 +408,13 @@ details. */
|
|||||||
241: Export pthread_attr_getstack, pthread_attr_getstackaddr,
|
241: Export pthread_attr_getstack, pthread_attr_getstackaddr,
|
||||||
pthread_getattr_np.
|
pthread_getattr_np.
|
||||||
242: Export psiginfo, psignal, sys_siglist.
|
242: Export psiginfo, psignal, sys_siglist.
|
||||||
|
243: Export sysinfo.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
|
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
|
||||||
|
|
||||||
#define CYGWIN_VERSION_API_MAJOR 0
|
#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
|
/* There is also a compatibity version number associated with the
|
||||||
shared memory regions. It is incremented when incompatible
|
shared memory regions. It is incremented when incompatible
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* sys/sysinfo.h
|
/* sys/sysinfo.h
|
||||||
|
|
||||||
Copyright 2009 Red Hat, Inc.
|
Copyright 2009, 2011 Red Hat, Inc.
|
||||||
|
|
||||||
This file is part of Cygwin.
|
This file is part of Cygwin.
|
||||||
|
|
||||||
@ -17,6 +17,23 @@ details. */
|
|||||||
|
|
||||||
__BEGIN_DECLS
|
__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_conf (void);
|
||||||
extern int get_nprocs (void);
|
extern int get_nprocs (void);
|
||||||
extern long get_phys_pages (void);
|
extern long get_phys_pages (void);
|
||||||
|
@ -1124,6 +1124,7 @@ also IEEE Std 1003.1-2008 (POSIX.1-2008).</para>
|
|||||||
removexattr
|
removexattr
|
||||||
setxattr
|
setxattr
|
||||||
strchrnul
|
strchrnul
|
||||||
|
sysinfo
|
||||||
tdestroy
|
tdestroy
|
||||||
timegm
|
timegm
|
||||||
timelocal
|
timelocal
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* sysconf.cc
|
/* sysconf.cc
|
||||||
|
|
||||||
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
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.
|
This file is part of Cygwin.
|
||||||
|
|
||||||
@ -17,6 +17,7 @@ details. */
|
|||||||
#include "path.h"
|
#include "path.h"
|
||||||
#include "fhandler.h"
|
#include "fhandler.h"
|
||||||
#include "dtable.h"
|
#include "dtable.h"
|
||||||
|
#include "pinfo.h"
|
||||||
#include "ntdll.h"
|
#include "ntdll.h"
|
||||||
|
|
||||||
static long
|
static long
|
||||||
@ -317,3 +318,99 @@ get_avphys_pages (void)
|
|||||||
{
|
{
|
||||||
return get_avphys (_SC_AVPHYS_PAGES);
|
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