diff options
author | Erik M. Bray <erik.bray@lri.fr> | 2017-01-10 18:03:10 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2017-01-10 18:24:50 +0300 |
commit | 5bebfa17c5e71338fb77b7b737cee0f8ed04f077 (patch) | |
tree | 2ac718f826994a9ad3457f911e36983012d96a0f | |
parent | 578bbc3a2907aed549da6fcfc4713f3a2358cc86 (diff) |
Add a /proc/<pid>/environ proc file handler, analogous to /proc/<pid>/cmdline.
-rw-r--r-- | winsup/cygwin/fhandler_process.cc | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/winsup/cygwin/fhandler_process.cc b/winsup/cygwin/fhandler_process.cc index 5f530a207..bbb44fa56 100644 --- a/winsup/cygwin/fhandler_process.cc +++ b/winsup/cygwin/fhandler_process.cc @@ -49,6 +49,7 @@ static off_t format_process_ctty (void *, char *&); static off_t format_process_fd (void *, char *&); static off_t format_process_mounts (void *, char *&); static off_t format_process_mountinfo (void *, char *&); +static off_t format_process_environ (void *, char *&); static const virt_tab_t process_tab[] = { @@ -57,6 +58,7 @@ static const virt_tab_t process_tab[] = { _VN ("cmdline"), FH_PROCESS, virt_file, format_process_cmdline }, { _VN ("ctty"), FH_PROCESS, virt_file, format_process_ctty }, { _VN ("cwd"), FH_PROCESS, virt_symlink, format_process_cwd }, + { _VN ("environ"), FH_PROCESS, virt_file, format_process_environ }, { _VN ("exe"), FH_PROCESS, virt_symlink, format_process_exename }, { _VN ("exename"), FH_PROCESS, virt_file, format_process_exename }, { _VN ("fd"), FH_PROCESSFD, virt_directory, format_process_fd }, @@ -570,6 +572,26 @@ format_process_winexename (void *data, char *&destbuf) return len; } +static off_t +format_process_environ (void *data, char *&destbuf) +{ + _pinfo *p = (_pinfo *) data; + size_t fs; + + if (destbuf) + { + cfree (destbuf); + destbuf = NULL; + } + destbuf = p->environ (fs); + if (!destbuf || !*destbuf) + { + destbuf = cstrdup ("<defunct>"); + fs = strlen (destbuf) + 1; + } + return fs; +} + struct heap_info { struct heap |