Implement memory-info for MS-Windows.
src/w32.c (w32_memory_info): New function. src/w32.h (w32_memory_info): Prototype it. src/alloc.c (Fmemory_info) [WINDOWSNT]: Call it.
This commit is contained in:
parent
64c333303c
commit
644656aa56
4 changed files with 53 additions and 3 deletions
|
@ -1,3 +1,10 @@
|
|||
2014-07-10 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
Implement memory-info for MS-Windows.
|
||||
* w32.c (w32_memory_info): New function.
|
||||
* w32.h (w32_memory_info): Prototype it.
|
||||
* alloc.c (Fmemory_info) [WINDOWSNT]: Call it.
|
||||
|
||||
2014-07-10 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
* coding.h (struct coding_system): Remove 'error_positions' (unused)
|
||||
|
|
16
src/alloc.c
16
src/alloc.c
|
@ -6875,7 +6875,7 @@ All values are in Kbytes. If there is no swap space, last two
|
|||
values are zero. If the system is not supported, return nil. */)
|
||||
(void)
|
||||
{
|
||||
#ifdef HAVE_LINUX_SYSINFO
|
||||
#if defined HAVE_LINUX_SYSINFO
|
||||
struct sysinfo si;
|
||||
uintmax_t units;
|
||||
|
||||
|
@ -6885,12 +6885,22 @@ values are zero. If the system is not supported, return nil. */)
|
|||
units = si.mem_unit;
|
||||
#else
|
||||
units = 1;
|
||||
#endif
|
||||
#endif
|
||||
return list4i ((uintmax_t) si.totalram * units / 1024,
|
||||
(uintmax_t) si.freeram * units / 1024,
|
||||
(uintmax_t) si.totalswap * units / 1024,
|
||||
(uintmax_t) si.freeswap * units / 1024);
|
||||
#else /* not HAVE_LINUX_SYSINFO */
|
||||
#elif defined WINDOWSNT
|
||||
unsigned long long totalram, freeram, totalswap, freeswap;
|
||||
|
||||
if (w32_memory_info (&totalram, &freeram, &totalswap, &freeswap) == 0)
|
||||
return list4i ((uintmax_t) totalram / 1024,
|
||||
(uintmax_t) freeram / 1024,
|
||||
(uintmax_t) totalswap / 1024,
|
||||
(uintmax_t) freeswap / 1024);
|
||||
else
|
||||
return Qnil;
|
||||
#else /* not HAVE_LINUX_SYSINFO, not WINDOWSNT */
|
||||
/* FIXME: add more systems. */
|
||||
return Qnil;
|
||||
#endif /* HAVE_LINUX_SYSINFO */
|
||||
|
|
29
src/w32.c
29
src/w32.c
|
@ -6955,6 +6955,35 @@ system_process_attributes (Lisp_Object pid)
|
|||
return attrs;
|
||||
}
|
||||
|
||||
int
|
||||
w32_memory_info (unsigned long long *totalram, unsigned long long *freeram,
|
||||
unsigned long long *totalswap, unsigned long long *freeswap)
|
||||
{
|
||||
MEMORYSTATUS memst;
|
||||
MEMORY_STATUS_EX memstex;
|
||||
|
||||
/* Use GlobalMemoryStatusEx if available, as it can report more than
|
||||
2GB of memory. */
|
||||
if (global_memory_status_ex (&memstex))
|
||||
{
|
||||
*totalram = memstex.ullTotalPhys;
|
||||
*freeram = memstex.ullAvailPhys;
|
||||
*totalswap = memstex.ullTotalPageFile;
|
||||
*freeswap = memstex.ullAvailPageFile;
|
||||
return 0;
|
||||
}
|
||||
else if (global_memory_status (&memst))
|
||||
{
|
||||
*totalram = memst.dwTotalPhys;
|
||||
*freeram = memst.dwAvailPhys;
|
||||
*totalswap = memst.dwTotalPageFile;
|
||||
*freeswap = memst.dwAvailPageFile;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/* Wrappers for winsock functions to map between our file descriptors
|
||||
and winsock's handles; also set h_errno for convenience.
|
||||
|
|
|
@ -206,6 +206,10 @@ extern void register_child (pid_t, int);
|
|||
extern void sys_sleep (int);
|
||||
extern int sys_link (const char *, const char *);
|
||||
|
||||
/* Return total and free memory info. */
|
||||
extern int w32_memory_info (unsigned long long *, unsigned long long *,
|
||||
unsigned long long *, unsigned long long *);
|
||||
|
||||
#ifdef HAVE_GNUTLS
|
||||
#include <gnutls/gnutls.h>
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue