Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik M. Bray <erik.bray@lri.fr>2017-01-10 18:03:10 +0300
committerCorinna Vinschen <corinna@vinschen.de>2017-01-10 18:24:50 +0300
commit5bebfa17c5e71338fb77b7b737cee0f8ed04f077 (patch)
tree2ac718f826994a9ad3457f911e36983012d96a0f
parent578bbc3a2907aed549da6fcfc4713f3a2358cc86 (diff)
Add a /proc/<pid>/environ proc file handler, analogous to /proc/<pid>/cmdline.
-rw-r--r--winsup/cygwin/fhandler_process.cc22
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