summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/libssh/priv.h2
-rw-r--r--libssh/socket.c38
2 files changed, 21 insertions, 19 deletions
diff --git a/include/libssh/priv.h b/include/libssh/priv.h
index 67e9bef..50b82f6 100644
--- a/include/libssh/priv.h
+++ b/include/libssh/priv.h
@@ -489,7 +489,7 @@ int ssh_socket_is_open(struct socket *s);
int ssh_socket_fd_isset(struct socket *s, fd_set *set);
void ssh_socket_fd_set(struct socket *s, fd_set *set, int *fd_max);
int ssh_socket_completeread(struct socket *s, void *buffer, u32 len);
-int ssh_socket_completewrite(struct socket *s, void *buffer, u32 len);
+int ssh_socket_completewrite(struct socket *s, const void *buffer, u32 len);
int ssh_socket_wait_for_data(struct socket *s, SSH_SESSION *session, u32 len);
int ssh_socket_nonblocking_flush(struct socket *s);
int ssh_socket_blocking_flush(struct socket *s);
diff --git a/libssh/socket.c b/libssh/socket.c
index ff5ef6d..d791714 100644
--- a/libssh/socket.c
+++ b/libssh/socket.c
@@ -301,27 +301,29 @@ int ssh_socket_completeread(struct socket *s, void *buffer, u32 len) {
/** \internal
* \brief Blocking write of len bytes
*/
+int ssh_socket_completewrite(struct socket *s, const void *buffer, u32 len) {
+ SSH_SESSION *session = s->session;
+ int written = -1;
-int ssh_socket_completewrite(struct socket *s, void *buffer, u32 len){
- SSH_SESSION *session=s->session;
- int written;
+ enter_function();
- enter_function();
- if(!ssh_socket_is_open(s)){
- leave_function();
- return SSH_ERROR;
- }
- while(len >0) {
- written=ssh_socket_unbuffered_write(s,buffer,len);
- if(written==0 || written==-1){
- leave_function();
- return SSH_ERROR;
- }
- len-=written;
- buffer+=written;
- }
+ if(! ssh_socket_is_open(s)) {
leave_function();
- return SSH_OK;
+ return SSH_ERROR;
+ }
+
+ while (len >0) {
+ written = ssh_socket_unbuffered_write(s, buffer, len);
+ if (written == 0 || written == -1) {
+ leave_function();
+ return SSH_ERROR;
+ }
+ len -= written;
+ buffer += written;
+ }
+
+ leave_function();
+ return SSH_OK;
}
/** \internal