summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--Src/Modules/zpty.c2
-rw-r--r--Src/exec.c1
-rw-r--r--Src/parse.c16
4 files changed, 22 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 2c55366c7..4d56575b0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,9 @@
2000-05-04 Sven Wischnowsky <wischnow@informatik.hu-berlin.de>
+ * 11151: Src/exec.c, Src/parse.c, Src/Modules/zpty.c: close dump
+ file descriptors in children
+
* 11145: Src/lex.c: parse_subst_string() should use modified
version of `len'
diff --git a/Src/Modules/zpty.c b/Src/Modules/zpty.c
index 38da5d500..23b1f4209 100644
--- a/Src/Modules/zpty.c
+++ b/Src/Modules/zpty.c
@@ -356,6 +356,8 @@ newptycmd(char *nam, char *pname, char **args, int echo, int block)
if (SHTTY != -1)
close(SHTTY);
+ closedumps();
+
execve(cmd, args, environ);
exit(0);
}
diff --git a/Src/exec.c b/Src/exec.c
index 33f28b53b..7913dec2e 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -356,6 +356,7 @@ zexecve(char *pth, char **argv)
if (!*eep)
eep[1] = NULL;
*eep = buf;
+ closedumps();
execve(pth, argv, environ);
/* If the execve returns (which in general shouldn't happen), *
diff --git a/Src/parse.c b/Src/parse.c
index b9ebad9a7..453e45ad0 100644
--- a/Src/parse.c
+++ b/Src/parse.c
@@ -3030,6 +3030,16 @@ decrdumpcount(FuncDump f)
}
}
+/**/
+mod_export void
+closedumps(void)
+{
+ FuncDump p;
+
+ for (p = dumps; p; p = p->next)
+ zclose(p->fd);
+}
+
#else
void
@@ -3042,6 +3052,11 @@ decrdumpcount(FuncDump f)
{
}
+void
+closedumps(void)
+{
+}
+
#endif
/**/
@@ -3070,3 +3085,4 @@ dump_autoload(char *nam, char *file, int on, char *ops, int func)
}
return ret;
}
+