* fhandler.cc (fhandler_base::fcntl): Treat O_NONBLOCK and OLD_O_NDELAY
as exactly the same. If one is set, both are set. * net.cc (fhandler_socket::fcntl): Ditto.
This commit is contained in:
parent
d220f0b21c
commit
2f7356f39b
@ -1,3 +1,9 @@
|
|||||||
|
Wed Oct 25 10:43:00 2000 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* fhandler.cc (fhandler_base::fcntl): Treat O_NONBLOCK and OLD_O_NDELAY
|
||||||
|
as exactly the same. If one is set, both are set.
|
||||||
|
* net.cc (fhandler_socket::fcntl): Ditto.
|
||||||
|
|
||||||
Tue Oct 24 23:58:35 2000 Christopher Faylor <cgf@cygnus.com>
|
Tue Oct 24 23:58:35 2000 Christopher Faylor <cgf@cygnus.com>
|
||||||
|
|
||||||
* dcrt0.cc (do_exit): Remove debugging statement.
|
* dcrt0.cc (do_exit): Remove debugging statement.
|
||||||
|
@ -1021,12 +1021,17 @@ int fhandler_base::fcntl (int cmd, void *arg)
|
|||||||
* Each other flag will be ignored.
|
* Each other flag will be ignored.
|
||||||
* Since O_ASYNC isn't defined in fcntl.h it's currently
|
* Since O_ASYNC isn't defined in fcntl.h it's currently
|
||||||
* ignored as well.
|
* ignored as well.
|
||||||
* There's no functionality at all, so...
|
|
||||||
*/
|
*/
|
||||||
const int allowed_flags = O_APPEND | O_NONBLOCK | OLD_O_NDELAY;
|
const int allowed_flags = O_APPEND | O_NONBLOCK | OLD_O_NDELAY;
|
||||||
|
|
||||||
|
/* Care for the old O_NDELAY flag. If one of the flags is set,
|
||||||
|
both flags are set. */
|
||||||
|
int new_flags = (int) arg;
|
||||||
|
if (new_flags & (O_NONBLOCK | OLD_O_NDELAY))
|
||||||
|
new_flags |= O_NONBLOCK | OLD_O_NDELAY;
|
||||||
|
|
||||||
int flags = get_flags () & ~allowed_flags;
|
int flags = get_flags () & ~allowed_flags;
|
||||||
set_flags (flags | ((int)arg & allowed_flags));
|
set_flags (flags | (new_flags & allowed_flags));
|
||||||
}
|
}
|
||||||
res = 0;
|
res = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -1988,15 +1988,22 @@ fhandler_socket::fcntl (int cmd, void *arg)
|
|||||||
switch (cmd)
|
switch (cmd)
|
||||||
{
|
{
|
||||||
case F_SETFL:
|
case F_SETFL:
|
||||||
request = ((int) arg & O_NONBLOCK) ? 1 : 0;
|
{
|
||||||
|
/* Care for the old O_NDELAY flag. If one of the flags is set,
|
||||||
|
both flags are set. */
|
||||||
|
int new_flags = (int) arg;
|
||||||
|
if (new_flags & (O_NONBLOCK | OLD_O_NDELAY))
|
||||||
|
new_flags |= O_NONBLOCK | OLD_O_NDELAY;
|
||||||
|
request = (new_flags & O_NONBLOCK) ? 1 : 0;
|
||||||
current = (get_flags () & O_NONBLOCK) ? 1 : 0;
|
current = (get_flags () & O_NONBLOCK) ? 1 : 0;
|
||||||
if (request != current && (res = ioctl (FIONBIO, &request)))
|
if (request != current && (res = ioctl (FIONBIO, &request)))
|
||||||
break;
|
break;
|
||||||
if (request)
|
if (request)
|
||||||
set_flags (get_flags () | O_NONBLOCK);
|
set_flags (get_flags () | O_NONBLOCK | OLD_O_NDELAY);
|
||||||
else
|
else
|
||||||
set_flags (get_flags () & ~O_NONBLOCK);
|
set_flags (get_flags () & ~(O_NONBLOCK | OLD_O_NDELAY));
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
res = fhandler_base::fcntl (cmd, arg);
|
res = fhandler_base::fcntl (cmd, arg);
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user