diff --git a/src/node.cc b/src/node.cc index 01b9ed5c9e..8796047c6a 100644 --- a/src/node.cc +++ b/src/node.cc @@ -475,6 +475,50 @@ v8::Handle Exit(const v8::Arguments& args) { return Undefined(); } +#ifdef __sun +#define HAVE_GETMEM 1 +#include /* getpagesize() */ + +#if (!defined(_LP64)) && (_FILE_OFFSET_BITS - 0 == 64) +#define PROCFS_FILE_OFFSET_BITS_HACK 1 +#undef _FILE_OFFSET_BITS +#else +#define PROCFS_FILE_OFFSET_BITS_HACK 0 +#endif + +#include + +#if (PROCFS_FILE_OFFSET_BITS_HACK - 0 == 1) +#define _FILE_OFFSET_BITS 64 +#endif + +int getmem(size_t *rss, size_t *vsize) { + pid_t pid = getpid(); + + size_t page_size = getpagesize(); + char pidpath[1024]; + sprintf(pidpath, "/proc/%d/psinfo", pid); + + psinfo_t psinfo; + FILE *f = fopen(pidpath, "r"); + if (!f) return -1; + + if (fread(&psinfo, sizeof(psinfo_t), 1, f) != 1) { + fclose (f); + return -1; + } + + /* XXX correct? */ + + *vsize = (size_t) psinfo.pr_size * page_size; + *rss = (size_t) psinfo.pr_rssize * 1024; + + fclose (f); + + return 0; +} +#endif + #ifdef __FreeBSD__ #define HAVE_GETMEM 1