summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2006-04-02 05:53:03 +0000
committerZac Medico <zmedico@gentoo.org>2006-04-02 05:53:03 +0000
commitfa3a424e63ab923acd97889150690673c80290c1 (patch)
tree5e0d68ebeafe98008aee83b110ad02186cf56ec1 /pym/portage_exec.py
parentMore exception fixes... (diff)
downloadportage-multirepo-fa3a424e63ab923acd97889150690673c80290c1.tar.gz
portage-multirepo-fa3a424e63ab923acd97889150690673c80290c1.tar.bz2
portage-multirepo-fa3a424e63ab923acd97889150690673c80290c1.zip
Add a portage_exec.get_open_fds() function for bug #128284. Thanks to Brian Harring for this patch.
svn path=/main/trunk/; revision=3054
Diffstat (limited to 'pym/portage_exec.py')
-rw-r--r--pym/portage_exec.py9
1 files changed, 8 insertions, 1 deletions
diff --git a/pym/portage_exec.py b/pym/portage_exec.py
index 31b37939..e800376d 100644
--- a/pym/portage_exec.py
+++ b/pym/portage_exec.py
@@ -17,6 +17,13 @@ try:
except ImportError:
max_fd_limit = 256
+if os.path.isdir("/proc/%i/fd" % os.getpid()):
+ def get_open_fds():
+ return map(int, os.listdir("/proc/%i/fd" % os.getpid()))
+else:
+ def get_open_fds():
+ return xrange(max_fd_limit)
+
sandbox_capable = (os.path.isfile(SANDBOX_BINARY) and
os.access(SANDBOX_BINARY, os.X_OK))
@@ -222,7 +229,7 @@ def _exec(binary, mycommand, opt_name, fd_pipes, env, gid, groups, uid, umask):
os.dup2(my_fds[fd], fd)
# Then close _all_ fds that haven't been explictly
# requested to be kept open.
- for fd in range(max_fd_limit):
+ for fd in get_open_fds():
if fd not in my_fds:
try:
os.close(fd)