src/w32.c (w32_memory_info): New function.
src/w32.h (w32_memory_info): Prototype it.
src/alloc.c (Fmemory_info) [WINDOWSNT]: Call it.
+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)
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;
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 */
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;
+}
+
\f
/* Wrappers for winsock functions to map between our file descriptors
and winsock's handles; also set h_errno for convenience.
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>