aboutsummaryrefslogtreecommitdiff
path: root/sample.c
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2005-08-31 02:20:36 +0000
committerAris Adamantiadis <aris@0xbadc0de.be>2005-08-31 02:20:36 +0000
commit1b20b8df85e07353f8403a6b55f8206980228639 (patch)
treedfd9fe6425742cc1c84c11c57f60057a3f32fc29 /sample.c
parentc7a059f0d316b757714fb3e278044ed30bcdcda3 (diff)
downloadlibssh-1b20b8df85e07353f8403a6b55f8206980228639.tar.gz
libssh-1b20b8df85e07353f8403a6b55f8206980228639.tar.xz
libssh-1b20b8df85e07353f8403a6b55f8206980228639.zip
fixed bug in sample that made the client running in infinite loop.
hunted a bug in channel_poll that returned 0 when EOF. git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@35 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'sample.c')
-rw-r--r--sample.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/sample.c b/sample.c
index 60125d60..1d0b3670 100644
--- a/sample.c
+++ b/sample.c
@@ -155,7 +155,7 @@ void select_loop(SSH_SESSION *session,CHANNEL *channel){
}
}
if(outchannel[0]){
- while(channel_poll(outchannel[0],0)){
+ while(channel && channel_poll(outchannel[0],0)){
lus=channel_read(outchannel[0],readbuf,0,0);
if(lus==-1){
ssh_say(0,"error reading channel : %s\n",ssh_get_error(session));
@@ -163,10 +163,12 @@ void select_loop(SSH_SESSION *session,CHANNEL *channel){
}
if(lus==0){
ssh_say(1,"EOF received\n");
+ channel_free(channel);
+ channel=NULL;
} else
write(1,buffer_get(readbuf),lus);
}
- while(channel_poll(outchannel[0],1)){ /* stderr */
+ while(channel && channel_poll(outchannel[0],1)){ /* stderr */
lus=channel_read(outchannel[0],readbuf,0,1);
if(lus==-1){
ssh_say(0,"error reading channel : %s\n",ssh_get_error(session));
@@ -174,11 +176,13 @@ void select_loop(SSH_SESSION *session,CHANNEL *channel){
}
if(lus==0){
ssh_say(1,"EOF received\n");
+ channel_free(channel);
+ channel=NULL;
} else
write(2,buffer_get(readbuf),lus);
}
}
- if(!channel_is_open(channel)){
+ if(channel && !channel_is_open(channel)){
channel_free(channel);
channel=NULL;
}