Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Tarot
gnulib
Commits
a7b40bdb
Commit
a7b40bdb
authored
Aug 23, 2009
by
Bruno Haible
Browse files
Fix getdtablesize() on mingw.
parent
0aa929ca
Changes
3
Hide whitespace changes
Inline
Side-by-side
ChangeLog
View file @
a7b40bdb
2009-08-23 Bruno Haible <bruno@clisp.org>
Fix getdtablesize() on mingw.
* lib/getdtablesize.c (getdtablesize): Implement differently.
* lib/unistd.in.h (getdtablesize): Improve comment.
2009-08-23 Bruno Haible <bruno@clisp.org>
New module 'mkostemp'.
lib/getdtablesize.c
View file @
a7b40bdb
/* getdtablesize() function for platforms that don't have it.
Copyright (C) 2008 Free Software Foundation, Inc.
Copyright (C) 2008
-2009
Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2008.
This program is free software: you can redistribute it and/or modify
...
...
@@ -24,10 +24,40 @@
#include <stdio.h>
/* Cache for the previous getdtablesize () result. */
static
int
dtablesize
;
int
getdtablesize
(
void
)
{
return
_getmaxstdio
();
if
(
dtablesize
==
0
)
{
/* We are looking for the number N such that the valid file descriptors
are 0..N-1. It can be obtained through a loop as follows:
{
int fd;
for (fd = 3; fd < 65536; fd++)
if (dup2 (0, fd) == -1)
break;
return fd;
}
On Windows XP, the result is 2048.
The drawback of this loop is that it allocates memory for a libc
internal array that is never freed.
The number N can also be obtained as the upper bound for
_getmaxstdio (). _getmaxstdio () returns the maximum number of open
FILE objects. The sanity check in _setmaxstdio reveals the maximum
number of file descriptors. This too allocates memory, but it is
freed when we call _setmaxstdio with the original value. */
int
orig_max_stdio
=
_getmaxstdio
();
unsigned
int
bound
;
for
(
bound
=
0x10000
;
_setmaxstdio
(
bound
)
<
0
;
bound
=
bound
/
2
)
;
_setmaxstdio
(
orig_max_stdio
);
dtablesize
=
bound
;
}
return
dtablesize
;
}
#endif
lib/unistd.in.h
View file @
a7b40bdb
...
...
@@ -328,7 +328,8 @@ extern int getdomainname(char *name, size_t len);
#if @GNULIB_GETDTABLESIZE@
# if !@HAVE_GETDTABLESIZE@
/* Return the maximum number of file descriptors in the current process. */
/* Return the maximum number of file descriptors in the current process.
In POSIX, this is same as sysconf (_SC_OPEN_MAX). */
extern
int
getdtablesize
(
void
);
# endif
#elif defined GNULIB_POSIXCHECK
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment