From 49888a01c34e9af51834e078ff7a8c7680f6b99a Mon Sep 17 00:00:00 2001 From: Fedor Indutny Date: Wed, 11 Aug 2010 23:27:41 +0700 Subject: [PATCH] Cygwin: process.execPath fix --- src/platform_cygwin.cc | 99 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 src/platform_cygwin.cc diff --git a/src/platform_cygwin.cc b/src/platform_cygwin.cc new file mode 100644 index 00000000000..31276bd2ed5 --- /dev/null +++ b/src/platform_cygwin.cc @@ -0,0 +1,99 @@ +#include "node.h" +#include "platform.h" + +#include // for MAXPATHLEN +#include // getpagesize + + +namespace node { + +static char buf[MAXPATHLEN + 1]; + +int OS::GetMemory(size_t *rss, size_t *vsize) { + FILE *f = fopen("/proc/self/stat", "r"); + if (!f) return -1; + + int itmp; + char ctmp; + size_t page_size = getpagesize(); + + /* PID */ + if (fscanf(f, "%d ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* Exec file */ + if (fscanf (f, "%s ", buf) == 0) goto error; /* coverity[secure_coding] */ + /* State */ + if (fscanf (f, "%c ", &ctmp) == 0) goto error; /* coverity[secure_coding] */ + /* Parent process */ + if (fscanf (f, "%d ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* Process group */ + if (fscanf (f, "%d ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* Session id */ + if (fscanf (f, "%d ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* TTY */ + if (fscanf (f, "%d ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* TTY owner process group */ + if (fscanf (f, "%d ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* Flags */ + if (fscanf (f, "%u ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* Minor faults (no memory page) */ + if (fscanf (f, "%u ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* Minor faults, children */ + if (fscanf (f, "%u ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* Major faults (memory page faults) */ + if (fscanf (f, "%u ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* Major faults, children */ + if (fscanf (f, "%u ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* utime */ + if (fscanf (f, "%d ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* stime */ + if (fscanf (f, "%d ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* utime, children */ + if (fscanf (f, "%d ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* stime, children */ + if (fscanf (f, "%d ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* jiffies remaining in current time slice */ + if (fscanf (f, "%d ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* 'nice' value */ + if (fscanf (f, "%d ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* jiffies until next timeout */ + if (fscanf (f, "%u ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* jiffies until next SIGALRM */ + if (fscanf (f, "%u ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* start time (jiffies since system boot) */ + if (fscanf (f, "%d ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + + /* Virtual memory size */ + if (fscanf (f, "%u ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + *vsize = (size_t) itmp; + + /* Resident set size */ + if (fscanf (f, "%u ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + *rss = (size_t) itmp * page_size; + + /* rlim */ + if (fscanf (f, "%u ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* Start of text */ + if (fscanf (f, "%u ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* End of text */ + if (fscanf (f, "%u ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + /* Start of stack */ + if (fscanf (f, "%u ", &itmp) == 0) goto error; /* coverity[secure_coding] */ + + fclose (f); + + return 0; + +error: + fclose (f); + return -1; +} + + +int OS::GetExecutablePath(char* buffer, size_t* size) { + *size = readlink("/proc/self/exe", buffer, *size - 1); + if (*size <= 0) return -1; + buffer[*size] = '\0'; + return 0; +} + +} // namespace node