mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-25 06:20:06 +00:00
(_hurd_alloc_fd): When expanding the dtable, make sure the new size exceeds FIRST_FD.
This commit is contained in:
parent
63deb0e4e7
commit
5f5ab9533b
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1994 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1994, 1995 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -89,17 +89,20 @@ _hurd_alloc_fd (int *fd, int first_fd)
|
||||
/* Enlarge the table. */
|
||||
int save = errno;
|
||||
struct hurd_fd **new;
|
||||
/* Try to double the table size (but don't exceed the limit).
|
||||
If there isn't any at all, give it three slots (because
|
||||
stdio will take that many anyway). */
|
||||
int size = _hurd_dtablesize ? _hurd_dtablesize * 2 : 3;
|
||||
/* Try to double the table size, but don't exceed the limit,
|
||||
and make sure it exceeds FIRST_FD. */
|
||||
int size = _hurd_dtablesize * 2;
|
||||
if (size > rlimit)
|
||||
size = rlimit;
|
||||
else if (size <= first_fd)
|
||||
size = first_fd + 1;
|
||||
|
||||
/* If we fail to allocate that, decrement the desired size
|
||||
until we succeed in allocating it. */
|
||||
do
|
||||
new = realloc (_hurd_dtable, size * sizeof (*_hurd_dtable));
|
||||
while (new == NULL && size-- > _hurd_dtablesize);
|
||||
while (new == NULL && size-- > first_fd);
|
||||
|
||||
if (new != NULL)
|
||||
{
|
||||
/* We managed to allocate a new table. Now install it. */
|
||||
|
Loading…
Reference in New Issue
Block a user