From 9d5aca9f8e5353a943d0ad3f5181df703b42dd72 Mon Sep 17 00:00:00 2001 From: Ben Kibbey Date: Tue, 7 Apr 2009 19:10:05 -0400 Subject: [PATCH] Fixed read_hook() and write_hook() over an SSH channel. --- src/libpwmd.c | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/src/libpwmd.c b/src/libpwmd.c index 59035c39..09b67d84 100644 --- a/src/libpwmd.c +++ b/src/libpwmd.c @@ -211,7 +211,6 @@ static int read_hook(assuan_context_t ctx, assuan_fd_t fd, void *data, size_t len, ssize_t *ret) { pwm_t *pwm = assuan_get_pointer(ctx); - int n = 0; if (!pwm || !pwm->tcp_conn) #ifdef WITH_LIBPTH @@ -219,21 +218,16 @@ static int read_hook(assuan_context_t ctx, assuan_fd_t fd, void *data, #else *ret = read((int)fd, data, len); #endif - else { - do { - *ret = libssh2_channel_read(pwm->tcp_conn->channel, data, len); - n = libssh2_session_last_errno(pwm->tcp_conn->session); - } while (n == LIBSSH2_ERROR_EAGAIN); - } + else + *ret = libssh2_channel_read(pwm->tcp_conn->channel, data, len); - return !n && *ret != -1 ? 1 : 0; + return *ret > 0 ? 1 : 0; } static int write_hook(assuan_context_t ctx, assuan_fd_t fd, const void *data, size_t len, ssize_t *ret) { pwm_t *pwm = assuan_get_pointer(ctx); - int n = 0; if (!pwm || !pwm->tcp_conn) #ifdef WITH_LIBPTH @@ -241,14 +235,10 @@ static int write_hook(assuan_context_t ctx, assuan_fd_t fd, const void *data, #else *ret = write((int)fd, data, len); #endif - else { - do { - *ret = libssh2_channel_write(pwm->tcp_conn->channel, data, len); - n = libssh2_session_last_errno(pwm->tcp_conn->session); - } while (n == LIBSSH2_ERROR_EAGAIN); - } + else + *ret = libssh2_channel_write(pwm->tcp_conn->channel, data, len); - return !n && *ret != -1 ? 1 : 0; + return *ret > 0 ? 1 : 0; } static void _ssh_deinit(pwmd_tcp_conn_t *conn); -- 2.11.4.GIT