diff options
Diffstat (limited to 'examples/libssh_scp.c')
-rw-r--r-- | examples/libssh_scp.c | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/examples/libssh_scp.c b/examples/libssh_scp.c index 5d92e3c..83e60b5 100644 --- a/examples/libssh_scp.c +++ b/examples/libssh_scp.c @@ -175,6 +175,7 @@ static int do_copy(struct location *src, struct location *dest, int recursive){ int total=0; int mode; char *filename; + /* recursive mode doesn't work yet */ (void)recursive; /* Get the file name and size*/ if(!src->is_ssh){ @@ -263,26 +264,14 @@ static int do_copy(struct location *src, struct location *dest, int recursive){ total+=r; } while(total < size); - printf("wrote %d bytes\n",total); - if(dest->is_ssh){ - r=ssh_scp_close(dest->scp); - if(r == SSH_ERROR){ - fprintf(stderr,"Error closing scp: %s\n",ssh_get_error(dest->session)); - ssh_scp_free(dest->scp); - dest->scp=NULL; - return -1; - } - } else { - fclose(dest->file); - dest->file=NULL; - } - return 0; + printf("wrote %d bytes\n",total); + return 0; } int main(int argc, char **argv){ struct location *dest, *src; int i; - + int r; if(opts(argc,argv)<0) return EXIT_FAILURE; dest=parse_location(destination); @@ -293,12 +282,22 @@ int main(int argc, char **argv){ if(open_location(src,READ)<0){ return EXIT_FAILURE; } - while(1){ - if(do_copy(src,dest,0) < 0){ - break; - } + if(do_copy(src,dest,0) < 0){ + break; } } + if(dest->is_ssh){ + r=ssh_scp_close(dest->scp); + if(r == SSH_ERROR){ + fprintf(stderr,"Error closing scp: %s\n",ssh_get_error(dest->session)); + ssh_scp_free(dest->scp); + dest->scp=NULL; + return -1; + } + } else { + fclose(dest->file); + dest->file=NULL; + } ssh_disconnect(dest->session); ssh_finalize(); return 0; |