diff options
author | Markus Friedl <markus@cvs.openbsd.org> | 2001-05-11 14:59:57 +0000 |
---|---|---|
committer | Markus Friedl <markus@cvs.openbsd.org> | 2001-05-11 14:59:57 +0000 |
commit | e437b8bccf6e9a388c53a9133195c8b2e9794592 (patch) | |
tree | 9dd40f7a5ae57d08233415ea7014775530c2b6db /usr.bin/ssh/misc.c | |
parent | 2147301a74e84856cae75f53d8f7e0809763bdfe (diff) |
add unset_nonblock for stdout/err flushing in client_loop().
Diffstat (limited to 'usr.bin/ssh/misc.c')
-rw-r--r-- | usr.bin/ssh/misc.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/usr.bin/ssh/misc.c b/usr.bin/ssh/misc.c index 36363514f83..19487bea9b6 100644 --- a/usr.bin/ssh/misc.c +++ b/usr.bin/ssh/misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.7 2001/05/08 19:45:24 mouring Exp $ */ +/* $OpenBSD: misc.c,v 1.8 2001/05/11 14:59:56 markus Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. @@ -25,7 +25,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: misc.c,v 1.7 2001/05/08 19:45:24 mouring Exp $"); +RCSID("$OpenBSD: misc.c,v 1.8 2001/05/11 14:59:56 markus Exp $"); #include "misc.h" #include "log.h" @@ -50,13 +50,14 @@ void set_nonblock(int fd) { int val; + val = fcntl(fd, F_GETFL, 0); if (val < 0) { error("fcntl(%d, F_GETFL, 0): %s", fd, strerror(errno)); return; } if (val & O_NONBLOCK) { - debug("fd %d IS O_NONBLOCK", fd); + debug2("fd %d is O_NONBLOCK", fd); return; } debug("fd %d setting O_NONBLOCK", fd); @@ -67,6 +68,28 @@ set_nonblock(int fd) fd, strerror(errno)); } +void +unset_nonblock(int fd) +{ + int val; + + val = fcntl(fd, F_GETFL, 0); + if (val < 0) { + error("fcntl(%d, F_GETFL, 0): %s", fd, strerror(errno)); + return; + } + if (!(val & O_NONBLOCK)) { + debug2("fd %d is not O_NONBLOCK", fd); + return; + } + debug("fd %d setting O_NONBLOCK", fd); + val &= ~O_NONBLOCK; + if (fcntl(fd, F_SETFL, val) == -1) + if (errno != ENODEV) + error("fcntl(%d, F_SETFL, O_NONBLOCK): %s", + fd, strerror(errno)); +} + /* Characters considered whitespace in strsep calls. */ #define WHITESPACE " \t\r\n" |