diff --git a/src/unix/sunos.c b/src/unix/sunos.c index 37fdd898..4c2dae09 100644 --- a/src/unix/sunos.c +++ b/src/unix/sunos.c @@ -37,6 +37,7 @@ #include #include #include +#include #if HAVE_PORTS_FS # include @@ -239,28 +240,24 @@ uv_err_t uv_get_process_title(char* buffer, size_t size) { uv_err_t uv_resident_set_memory(size_t* rss) { - pid_t pid = getpid(); psinfo_t psinfo; - char pidpath[1024]; - FILE *f; + uv_err_t err; + int fd; - sprintf(pidpath, "/proc/%d/psinfo", (int)pid); - - f = fopen(pidpath, "r"); - if (!f) return uv__new_sys_error(errno); - - if (fread(&psinfo, sizeof(psinfo_t), 1, f) != 1) { - fclose (f); + fd = open("/proc/self/psinfo", O_RDONLY); + if (fd == -1) return uv__new_sys_error(errno); - } - /* XXX correct? */ + err = uv_ok_; - *rss = (size_t) psinfo.pr_rssize * 1024; + if (read(fd, &psinfo, sizeof(psinfo)) == sizeof(psinfo)) + *rss = (size_t)psinfo.pr_rssize * 1024; + else + err = uv__new_sys_error(EINVAL); - fclose (f); + close(fd); - return uv_ok_; + return err; }