From 39f962c91eb4575a65edc7d984ce3f1a699097b8 Mon Sep 17 00:00:00 2001 From: rofl0r Date: Sat, 6 Aug 2011 10:31:27 +0200 Subject: [PATCH] channels: Fix ssh_channel_from_local() It only worked if the first channel in the list was equivalent to we were looking for. --- src/channels.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/channels.c b/src/channels.c index ef140ba2..f01d52e8 100644 --- a/src/channels.c +++ b/src/channels.c @@ -304,24 +304,25 @@ static int channel_open(ssh_channel channel, const char *type_c, int window, return err; } -/* get ssh channel from local session? */ +/* return channel with corresponding local id, or NULL if not found */ ssh_channel ssh_channel_from_local(ssh_session session, uint32_t id) { - ssh_channel initchan = session->channels; - ssh_channel channel; + ssh_channel initchan = session->channels; + ssh_channel channel = initchan; - /* We assume we are always the local */ - if (initchan == NULL) { - return NULL; - } - - for (channel = initchan; channel->local_channel != id; - channel=channel->next) { - if (channel->next == initchan) { - return NULL; + for (;;) { + if (channel == NULL) { + return NULL; + } + if (channel->local_channel == id) { + return channel; + } + if (channel->next == initchan) { + return NULL; + } + channel = channel->next; } - } - return channel; + return NULL; } /**