From 8b55d62f4ec9739884e75feeba785014db71aca5 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Fri, 3 Jun 2016 13:34:15 -0400 Subject: eval: Clean up open fd counting code. --- eval.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index 87c6932..9ac0c6a 100644 --- a/eval.c +++ b/eval.c @@ -867,14 +867,15 @@ static int infer_fdlimit() { } } - // Account for std{in,out,err}, and allow an extra fd for the predicates - int nopen = 4; + // std{in,out,err} + int nopen = 3; // Check /dev/fd for the current number of open fds, if possible (we may // have inherited more than just the standard ones) DIR *dir = opendir("/dev/fd"); if (dir) { - nopen = 0; + // Account for 'dir' itself + nopen = -1; struct dirent *de; while ((de = readdir(dir)) != NULL) { @@ -886,8 +887,11 @@ static int infer_fdlimit() { closedir(dir); } - if (ret > nopen) { - ret -= nopen; + // Extra fd needed by -empty + int reserved = nopen + 1; + + if (ret > reserved) { + ret -= reserved; } else { ret = 1; } -- cgit v1.2.3