[PATCH 2/3] io: Add closefrom [BZ #10353]
Adhemerval Zanella
adhemerval.zanella@linaro.org
Tue Dec 22 13:28:12 GMT 2020
On 22/12/2020 10:17, Florian Weimer wrote:
> * Adhemerval Zanella:
>
>>> Right, but I think it's needed for correctness. closefrom (3) should
>>> work even if all descriptors are open.
>>
>> Alright, I think we can do something like:
>>
>> int dirfd = __open_nocancel (FD_TO_FILENAME_PREFIX, O_RDONLY | O_DIRECTORY, 0);
>> if (dirfd == -1 && errno == EMFILE)
>> {
>> int maxfd = __getdtablesize ();
>> for (int i = lowfd; i < maxfd; i++)
>> if (__close_nocancel (i) == 0)
>> break;
>> dirfd = __open_nocancel (FD_TO_FILENAME_PREFIX, O_RDONLY | O_DIRECTORY, 0);
>> if (dirfd == -1)
>> goto err;
>> }
>>
>
> I suggest errno != ENOENT (not mounted /proc), but otherwise looks good.
Do you mean fail with /proc is not mounted?
int dirfd = __open_nocancel (FD_TO_FILENAME_PREFIX, O_RDONLY | O_DIRECTORY, 0);
if (dirfd == -1)
{
if (errno != EMFILE)
goto err;
int maxfd = __getdtablesize ();
for (int i = lowfd; i < maxfd; i++)
if (__close_nocancel (i) == 0)
break;
dirfd = __open_nocancel (FD_TO_FILENAME_PREFIX, O_RDONLY | O_DIRECTORY, 0);
if (dirfd == -1)
goto err;
}
More information about the Libc-alpha
mailing list