mirror of git://anongit.mindrot.org/openssh.git
- markus@cvs.openbsd.org 2001/05/11 14:59:56
[clientloop.c misc.c misc.h] add unset_nonblock for stdout/err flushing in client_loop().
This commit is contained in:
parent
ddb4f24056
commit
c93e84c2ce
|
@ -1,3 +1,9 @@
|
||||||
|
20010512
|
||||||
|
- OpenBSD CVS Sync
|
||||||
|
- markus@cvs.openbsd.org 2001/05/11 14:59:56
|
||||||
|
[clientloop.c misc.c misc.h]
|
||||||
|
add unset_nonblock for stdout/err flushing in client_loop().
|
||||||
|
|
||||||
20010511
|
20010511
|
||||||
- OpenBSD CVS Sync
|
- OpenBSD CVS Sync
|
||||||
- markus@cvs.openbsd.org 2001/05/09 22:51:57
|
- markus@cvs.openbsd.org 2001/05/09 22:51:57
|
||||||
|
@ -5394,4 +5400,4 @@
|
||||||
- Wrote replacements for strlcpy and mkdtemp
|
- Wrote replacements for strlcpy and mkdtemp
|
||||||
- Released 1.0pre1
|
- Released 1.0pre1
|
||||||
|
|
||||||
$Id: ChangeLog,v 1.1216 2001/05/10 23:26:11 mouring Exp $
|
$Id: ChangeLog,v 1.1217 2001/05/12 00:08:37 mouring Exp $
|
||||||
|
|
27
clientloop.c
27
clientloop.c
|
@ -59,7 +59,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
RCSID("$OpenBSD: clientloop.c,v 1.69 2001/05/08 19:17:31 markus Exp $");
|
RCSID("$OpenBSD: clientloop.c,v 1.70 2001/05/11 14:59:55 markus Exp $");
|
||||||
|
|
||||||
#include "ssh.h"
|
#include "ssh.h"
|
||||||
#include "ssh1.h"
|
#include "ssh1.h"
|
||||||
|
@ -935,22 +935,35 @@ client_loop(int have_pty, int escape_char_arg, int ssh2_chan_id)
|
||||||
snprintf(buf, sizeof buf, "Connection to %.64s closed.\r\n", host);
|
snprintf(buf, sizeof buf, "Connection to %.64s closed.\r\n", host);
|
||||||
buffer_append(&stderr_buffer, buf, strlen(buf));
|
buffer_append(&stderr_buffer, buf, strlen(buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* restore blocking io */
|
||||||
|
if (!isatty(fileno(stdin)))
|
||||||
|
unset_nonblock(fileno(stdin));
|
||||||
|
if (!isatty(fileno(stdout)))
|
||||||
|
unset_nonblock(fileno(stdout));
|
||||||
|
if (!isatty(fileno(stderr)))
|
||||||
|
unset_nonblock(fileno(stderr));
|
||||||
|
|
||||||
/* Output any buffered data for stdout. */
|
/* Output any buffered data for stdout. */
|
||||||
if (buffer_len(&stdout_buffer) > 0) {
|
while (buffer_len(&stdout_buffer) > 0) {
|
||||||
len = atomicio(write, fileno(stdout), buffer_ptr(&stdout_buffer),
|
len = write(fileno(stdout), buffer_ptr(&stdout_buffer),
|
||||||
buffer_len(&stdout_buffer));
|
buffer_len(&stdout_buffer));
|
||||||
if (len != buffer_len(&stdout_buffer))
|
if (len <= 0) {
|
||||||
error("Write failed flushing stdout buffer.");
|
error("Write failed flushing stdout buffer.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
buffer_consume(&stdout_buffer, len);
|
buffer_consume(&stdout_buffer, len);
|
||||||
stdout_bytes += len;
|
stdout_bytes += len;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Output any buffered data for stderr. */
|
/* Output any buffered data for stderr. */
|
||||||
if (buffer_len(&stderr_buffer) > 0) {
|
while (buffer_len(&stderr_buffer) > 0) {
|
||||||
len = atomicio(write, fileno(stderr), buffer_ptr(&stderr_buffer),
|
len = write(fileno(stderr), buffer_ptr(&stderr_buffer),
|
||||||
buffer_len(&stderr_buffer));
|
buffer_len(&stderr_buffer));
|
||||||
if (len != buffer_len(&stderr_buffer))
|
if (len <= 0) {
|
||||||
error("Write failed flushing stderr buffer.");
|
error("Write failed flushing stderr buffer.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
buffer_consume(&stderr_buffer, len);
|
buffer_consume(&stderr_buffer, len);
|
||||||
stderr_bytes += len;
|
stderr_bytes += len;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef _DEFINES_H
|
#ifndef _DEFINES_H
|
||||||
#define _DEFINES_H
|
#define _DEFINES_H
|
||||||
|
|
||||||
/* $Id: defines.h,v 1.63 2001/05/09 00:38:21 mouring Exp $ */
|
/* $Id: defines.h,v 1.64 2001/05/12 00:08:38 mouring Exp $ */
|
||||||
|
|
||||||
/* Some platforms need this for the _r() functions */
|
/* Some platforms need this for the _r() functions */
|
||||||
#if !defined(_REENTRANT) && !defined(SNI)
|
#if !defined(_REENTRANT) && !defined(SNI)
|
||||||
|
@ -418,7 +418,7 @@ struct winsize {
|
||||||
#endif /* !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY) */
|
#endif /* !defined(HAVE_MEMMOVE) && defined(HAVE_BCOPY) */
|
||||||
|
|
||||||
#if !defined(HAVE_ATEXIT) && defined(HAVE_ON_EXIT)
|
#if !defined(HAVE_ATEXIT) && defined(HAVE_ON_EXIT)
|
||||||
# define atexit(a) on_exit(a)
|
# define atexit(a) on_exit(a, NULL)
|
||||||
#else
|
#else
|
||||||
# if defined(HAVE_XATEXIT)
|
# if defined(HAVE_XATEXIT)
|
||||||
# define atexit(a) xatexit(a)
|
# define atexit(a) xatexit(a)
|
||||||
|
|
29
misc.c
29
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.
|
* Copyright (c) 2000 Markus Friedl. All rights reserved.
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "includes.h"
|
#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 "misc.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
@ -50,13 +50,14 @@ void
|
||||||
set_nonblock(int fd)
|
set_nonblock(int fd)
|
||||||
{
|
{
|
||||||
int val;
|
int val;
|
||||||
|
|
||||||
val = fcntl(fd, F_GETFL, 0);
|
val = fcntl(fd, F_GETFL, 0);
|
||||||
if (val < 0) {
|
if (val < 0) {
|
||||||
error("fcntl(%d, F_GETFL, 0): %s", fd, strerror(errno));
|
error("fcntl(%d, F_GETFL, 0): %s", fd, strerror(errno));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (val & O_NONBLOCK) {
|
if (val & O_NONBLOCK) {
|
||||||
debug("fd %d IS O_NONBLOCK", fd);
|
debug2("fd %d is O_NONBLOCK", fd);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
debug("fd %d setting O_NONBLOCK", fd);
|
debug("fd %d setting O_NONBLOCK", fd);
|
||||||
|
@ -67,6 +68,28 @@ set_nonblock(int fd)
|
||||||
fd, strerror(errno));
|
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. */
|
/* Characters considered whitespace in strsep calls. */
|
||||||
#define WHITESPACE " \t\r\n"
|
#define WHITESPACE " \t\r\n"
|
||||||
|
|
||||||
|
|
5
misc.h
5
misc.h
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: misc.h,v 1.6 2001/05/08 19:45:24 mouring Exp $ */
|
/* $OpenBSD: misc.h,v 1.7 2001/05/11 14:59:56 markus Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
|
@ -17,8 +17,9 @@ char *chop(char *s);
|
||||||
/* return next token in configuration line */
|
/* return next token in configuration line */
|
||||||
char *strdelim(char **s);
|
char *strdelim(char **s);
|
||||||
|
|
||||||
/* set filedescriptor to non-blocking */
|
/* set/unset filedescriptor to non-blocking */
|
||||||
void set_nonblock(int fd);
|
void set_nonblock(int fd);
|
||||||
|
void unset_nonblock(int fd);
|
||||||
|
|
||||||
struct passwd * pwcopy(struct passwd *pw);
|
struct passwd * pwcopy(struct passwd *pw);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue