Add error checks to ssh_socket_write().

git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@466 7dcaeef0-15fb-0310-b436-a5af3365683c
This commit is contained in:
Andreas Schneider
2009-04-14 14:05:16 +00:00
parent f2788c9866
commit fc1cba4407

View File

@@ -333,16 +333,19 @@ int ssh_socket_completewrite(struct socket *s, const void *buffer, u32 len) {
*/ */
int ssh_socket_read(struct socket *s, void *buffer, int len){ int ssh_socket_read(struct socket *s, void *buffer, int len){
SSH_SESSION *session = s->session; SSH_SESSION *session = s->session;
int ret; int rc = SSH_ERROR;
enter_function(); enter_function();
ret = ssh_socket_wait_for_data(s, s->session, len);
if(ret != SSH_OK){ rc = ssh_socket_wait_for_data(s, s->session, len);
if (rc != SSH_OK) {
leave_function(); leave_function();
return ret; return rc;
} }
memcpy(buffer, buffer_get_rest(s->in_buffer), len); memcpy(buffer, buffer_get_rest(s->in_buffer), len);
buffer_pass_bytes(s->in_buffer, len); buffer_pass_bytes(s->in_buffer, len);
leave_function(); leave_function();
return SSH_OK; return SSH_OK;
} }
@@ -355,16 +358,22 @@ int ssh_socket_read(struct socket *s, void *buffer, int len){
*/ */
int ssh_socket_write(struct socket *s, const void *buffer, int len) { int ssh_socket_write(struct socket *s, const void *buffer, int len) {
SSH_SESSION *session = s->session; SSH_SESSION *session = s->session;
int ret; int rc = SSH_ERROR;
enter_function(); enter_function();
buffer_add_data(s->out_buffer,buffer,len);
if(buffer_get_rest_len(s->out_buffer) > WRITE_BUFFERING_THRESHOLD) if (buffer_add_data(s->out_buffer, buffer, len) < 0) {
ret=ssh_socket_nonblocking_flush(s); return SSH_ERROR;
else }
ret=len;
if (buffer_get_rest_len(s->out_buffer) > WRITE_BUFFERING_THRESHOLD) {
rc = ssh_socket_nonblocking_flush(s);
} else {
rc = len;
}
leave_function(); leave_function();
return ret; return rc;
} }