fd-util: make fd_in_set() (and thus close_all_fds()) handle invalidated fds in the array

let's handle gracefully if fds in the specified array are already
invalidated (i.e. negative). This is handy when putting together arrays
on the fly.
This commit is contained in:
Lennart Poettering
2022-11-04 18:45:32 +01:00
parent 6e14e70599
commit d11c14a981
+9 -1
View File
@@ -177,9 +177,13 @@ int fd_cloexec(int fd, bool cloexec) {
_pure_ static bool fd_in_set(int fd, const int fdset[], size_t n_fdset) {
assert(n_fdset == 0 || fdset);
for (size_t i = 0; i < n_fdset; i++)
for (size_t i = 0; i < n_fdset; i++) {
if (fdset[i] < 0)
continue;
if (fdset[i] == fd)
return true;
}
return false;
}
@@ -252,6 +256,10 @@ static int close_all_fds_special_case(const int except[], size_t n_except) {
if (!have_close_range)
return 0;
if (n_except == 1 && except[0] < 0) /* Minor optimization: if we only got one fd, and it's invalid,
* we got none */
n_except = 0;
switch (n_except) {
case 0: